// // Generated by dtk // Translation Unit: d_a_ykgr.cpp // #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_ykgr.h" #include "d/actor/d_a_player.h" #include "d/d_path.h" #include "f_op/f_op_actor_mng.h" #include "m_Do/m_Do_hostIO.h" class daYkgr_HIO_c : #if VERSION == VERSION_DEMO public JORReflexible #else public mDoHIO_entry_c #endif { public: daYkgr_HIO_c() { #if VERSION == VERSION_DEMO mNo = -1; m05 = 0; #else mNo = 0; #endif m08 = 0xFF; m0C = 3; m10 = -16.0f; m14 = -5.0f; m18 = -3.0f; m1C = 0.0f; m20 = 1500.0f; m24 = 500.0f; } virtual ~daYkgr_HIO_c() { #if VERSION == VERSION_DEMO mNo = -1; #endif } void genMessage(JORMContext* ctx) {} public: /* 0x04 */ s8 mNo; /* 0x05 */ s8 m05; /* 0x08 */ s32 m08; /* 0x0C */ s32 m0C; /* 0x10 */ f32 m10; /* 0x14 */ f32 m14; /* 0x18 */ f32 m18; /* 0x1C */ f32 m1C; /* 0x20 */ f32 m20; /* 0x24 */ f32 m24; }; // size = 0x28 static daYkgr_HIO_c l_HIO; static dPa_YkgrPcallBack YkgrCB; /* 000000EC-00000134 .text draw__17dPa_YkgrPcallBackFP14JPABaseEmitterP15JPABaseParticle */ void dPa_YkgrPcallBack::draw(JPABaseEmitter*, JPABaseParticle*) { GXSetIndTexMtx(GX_ITM_0, &m04, m1C); GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0); } /* 00000134-00000234 .text setParam__17dPa_YkgrPcallBackFf */ void dPa_YkgrPcallBack::setParam(float arg1) { if ((arg1 <= -17.0f) || (arg1 >= 47.0f)) { return; } if (arg1 >= 0.0f) { m1C = arg1; m04 = m14 = (arg1 - m1C) * 0.5f + 0.5f; } else { f32 tmp = arg1 - 1.0f; m1C = tmp; m04 = m14 = (tmp - m1C) * 0.5f + 1.0f; } m08 = 0.0f; m0C = 0.0f; m10 = 0.0f; m18 = 0.0f; } /* 00000234-00000408 .text getPosRate__8daYkgr_cFv */ f32 daYkgr_c::getPosRate() { if (m_path == NULL) { return 0.0f; } f32 fVar4 = FLOAT_MAX; fopAc_ac_c* player = dComIfGp_getPlayer(0); cXyz sp30 = player->current.pos; dPnt* pdVar7 = m_path->m_points; s32 num = m_path->m_num; for (s32 i = 0; i < num; i++, pdVar7++) { cXyz sp24(pdVar7->m_position.x, pdVar7->m_position.y, pdVar7->m_position.z); f32 abs = sp30.absXZ(sp24); if (abs < fVar4) { fVar4 = abs; } } if (fVar4 > l_HIO.m20) { fVar4 = l_HIO.m20; } else if (fVar4 < l_HIO.m24) { fVar4 = l_HIO.m24; } fVar4 = (fVar4 - l_HIO.m24) / (l_HIO.m20 - l_HIO.m24); return 1.0f - fVar4; } /* 00000408-00000428 .text daYkgrCreate__FPv */ static cPhs_State daYkgrCreate(void* i_this) { return ((daYkgr_c*)i_this)->_create(); } /* 00000428-00000680 .text _create__8daYkgr_cFv */ cPhs_State daYkgr_c::_create() { u8 uVar4 = fopAcM_GetParam(this) >> 0x14 & 0xF; fopAcM_ct(this, daYkgr_c); u8 pathIndex = fopAcM_GetParam(this) >> 8 & 0xFF; if (pathIndex != 0xff) { m_path = dPath_GetRoomPath(pathIndex, fopAcM_GetRoomNo(this)); } else { m_path = NULL; } if (strcmp(dComIfGp_getStartStageName(), "Adanmae") == 0 && dComIfGs_isSymbol(dSymbol_DIN_e)) { return cPhs_STOP_e; } if (m_emitter == NULL) { fopAc_ac_c* player = dComIfGp_getPlayer(0); current.pos = player->current.pos; m_emitter = dComIfGp_particle_setProjection(dPa_name::ID_AK_SP_MTDRAGONKAGEROU, ¤t.pos); if (m_emitter != NULL) { m_emitter->setParticleCallBackPtr(&YkgrCB); YkgrCB.setParam(-3.0f); } else { return cPhs_ERROR_e; } fopAcM_setStageLayer(this); if ((s32)uVar4 == 1) { setAlpha(0xFF); m_emitter->setGlobalAlpha(0xFF); m2CC = 0.5f; m2D0 = 0.0f; start(); } else { setAlpha(0); m_emitter->setGlobalAlpha(0); m2CC = 0.5f; m2D0 = 0.0f; stop(); } #if VERSION == VERSION_DEMO if (l_HIO.mNo < 0) { l_HIO.mNo = mDoHIO_createChild("竜の山陽炎", &l_HIO); } #endif } else { if ((s32)uVar4 == 1) { start(); } else { stop(); } return cPhs_STOP_e; } return cPhs_COMPLEATE_e; } bool daYkgr_c::_delete() { return true; } /* 00000680-00000688 .text daYkgrDelete__FPv */ static BOOL daYkgrDelete(void* v_this) { return ((daYkgr_c*)v_this)->_delete(); } bool daYkgr_c::_execute() { cLib_addCalc2(&m2CC, m_aim_rate, 0.25f, 0.05f); cLib_addCalc2(&daYkgr_c::m_aim_rate, l_HIO.m1C, 0.25f, 0.05f); cLib_addCalc2(&m2D0, getPosRate(), 0.25f, 0.05f); f32 fVar1 = m2CC * 0.5f + m2D0 * 0.5f; f32 tmp2 = fVar1 * l_HIO.m18 + (1.0f - fVar1) * l_HIO.m14; YkgrCB.setParam(tmp2); if (m_alpha_flag == 0) { if (m_alpha != 0) { if (m_alpha > l_HIO.m0C) { m_alpha -= l_HIO.m0C; } else { m_alpha = 0; } } } else if (m_alpha < 0xff) { if (m_alpha < 0xff - l_HIO.m0C) { m_alpha += l_HIO.m0C; } else { m_alpha = 0xff; } } return true; } /* 00000688-000007F4 .text daYkgrExecute__FPv */ static BOOL daYkgrExecute(void* v_this) { return ((daYkgr_c*)v_this)->_execute(); } void daYkgr_c::set_mtx() { camera_class* camera = dComIfGp_getCamera(0); current.pos = *fopCamM_GetEye_p(camera); current.angle.y = fopCamM_GetAngleY(camera); current.angle.x = fopCamM_GetAngleX(camera); mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::YrotM(current.angle.y); mDoMtx_stack_c::XrotM(current.angle.x); MTXCopy(mDoMtx_stack_c::get(), mMtx); } bool daYkgr_c::_draw() { if (m_alpha == 0) { return true; } set_mtx(); #if VERSION == VERSION_DEMO m_emitter->setGlobalRTMatrix(mMtx); if (m_emitter != NULL) { m_emitter->setGlobalAlpha(m_alpha); } #else if (m_emitter != NULL) { m_emitter->setGlobalRTMatrix(mMtx); m_emitter->setGlobalAlpha(m_alpha); } #endif return true; } /* 000007F4-000008F4 .text daYkgrDraw__FPv */ static BOOL daYkgrDraw(void* v_this) { return ((daYkgr_c*)v_this)->_draw(); } /* 000008F4-000008FC .text daYkgrIsDelete__FPv */ static BOOL daYkgrIsDelete(void*) { return TRUE; } static actor_method_class daYkgrMethodTable = { (process_method_func)daYkgrCreate, (process_method_func)daYkgrDelete, (process_method_func)daYkgrExecute, (process_method_func)daYkgrIsDelete, (process_method_func)daYkgrDraw, }; actor_process_profile_definition g_profile_Ykgr = { /* Layer ID */ fpcLy_CURRENT_e, /* List ID */ 0x0007, /* List Prio */ fpcPi_CURRENT_e, /* Proc Name */ fpcNm_Ykgr_e, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(daYkgr_c), /* Size Other */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Draw Prio */ fpcDwPi_Ykgr_e, /* Actor SubMtd */ &daYkgrMethodTable, /* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e, /* Group */ fopAc_ACTOR_e, /* Cull Type */ fopAc_CULLBOX_0_e, };