// // Generated by dtk // Translation Unit: d_a_arrow_iceeff.cpp // #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_arrow_iceeff.h" #include "m_Do/m_Do_mtx.h" #include "f_op/f_op_actor_mng.h" #include "d/d_com_inf_game.h" #include "d/d_procname.h" #include "d/d_priority.h" #include "d/actor/d_a_player_main.h" #include "d/actor/d_a_arrow.h" /* 000000EC-0000010C .text CheckCreateHeap__FP10fopAc_ac_c */ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->CreateHeap(); } /* 0000010C-00000324 .text CreateHeap__16daArrow_Iceeff_cFv */ BOOL daArrow_Iceeff_c::CreateHeap() { J3DModelData* modelData; if(field_0xA38 == 0) { modelData = static_cast(dComIfG_getObjectRes("Link", LINK_BDL_GICER00)); JUT_ASSERT(87, modelData != NULL); for(int i = 0; i < 30; i++) { field_0x298[i] = mDoExt_J3DModel__create(modelData, 0, 0x11020203); if(field_0x298[i] == 0) { return false; } } } else { modelData = static_cast(dComIfG_getObjectRes("Link", LINK_BDL_GICER01)); JUT_ASSERT(98, modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); if(mpModel == NULL) { return false; } J3DAnmTransform* bck = static_cast(dComIfG_getObjectRes("Link", LINK_BCK_GICER01)); JUT_ASSERT(107, bck != NULL); if(!mBck.init(modelData, bck, true, J3DFrameCtrl::EMode_NONE, 1.0f, 0, -1, false)) { return false; } } return true; } /* 00000324-000005E4 .text CreateInit__16daArrow_Iceeff_cFv */ void daArrow_Iceeff_c::CreateInit() { if(field_0xA38 == 0) { for(int i = 0; i < 30; i++) { fopAcM_SetMtx(this, field_0x298[i]->getBaseTRMtx()); field_0x8B4[i].setall(cM_rndF(4.5f) + 6.2999997f); f32 temp = 180.0f * i / 30.0f; s16 angle = cM_rndF(65536.0f); mDoMtx_stack_c::ZrotS(cM_rndF(65536.0f)); mDoMtx_stack_c::XrotM(cM_rndF(65536.0f)); mDoMtx_stack_c::YrotM(cM_rndF(65536.0f)); mDoMtx_stack_c::transM(temp * cM_ssin(angle), temp * cM_scos(angle), 0.0f); mDoMtx_stack_c::ZrotM(current.angle.z); mDoMtx_stack_c::XrotM(current.angle.x); mDoMtx_stack_c::YrotM(current.angle.y); cMtx_copy(mDoMtx_stack_c::get(), field_0x314[i]); } } else { current.angle.y = cM_rndF(65536.0f); } fopAcM_setCullSizeBox(this, -100.0f, -100.0f, -100.0f, 100.0f, 100.0f, 100.0f); fopAcM_setCullSizeFar(this, 1.0f); set_mtx(); field_0xA30 = 0; field_0xA34 = 0.0f; if(field_0xA38 == 0) { field_0xA1C = daPy_getPlayerLinkActorClass()->mpGicer00Btk; } else { field_0xA1C = daPy_getPlayerLinkActorClass()->mpGicer01Btk; } field_0xA1C->setFrame(field_0xA34); field_0xA3C = 1; } /* 000005E4-0000073C .text set_mtx__16daArrow_Iceeff_cFv */ void daArrow_Iceeff_c::set_mtx() { if(field_0xA38 == 0) { for(int i = 0; i < 30; i++) { field_0x298[i]->setBaseScale(field_0x8B4[i]); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, 0); mDoMtx_stack_c::concat(field_0x314[i]); field_0x298[i]->setBaseTRMtx(mDoMtx_stack_c::get()); } } else { scale.setall(1.0f); mpModel->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } } cPhs_State daArrow_Iceeff_c::_create() { fopAcM_SetupActor(this, daArrow_Iceeff_c); void* arrow = fopAcM_SearchByID(parentActorID); if(arrow == 0) { return cPhs_ERROR_e; } else { if(fopAcM_GetParam(arrow) == 4) { field_0xA38 = 1; } else { field_0xA38 = 0; } if(!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0xD5E0)) { return cPhs_ERROR_e; } CreateInit(); return cPhs_COMPLEATE_e; } } /* 0000073C-00000854 .text daArrow_Iceeff_Create__FPv */ static cPhs_State daArrow_Iceeff_Create(void* i_this) { return static_cast(i_this)->_create(); } bool daArrow_Iceeff_c::_delete() { return true; } /* 00000938-00000940 .text daArrow_Iceeff_Delete__FPv */ static BOOL daArrow_Iceeff_Delete(void* i_this) { return static_cast(i_this)->_delete(); } bool daArrow_Iceeff_c::_draw() { s32 temp = field_0xA30; if(30 < temp) { temp = 30; } field_0xA1C->setFrame(field_0xA34); dComIfGd_setListP1(); g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr); if(field_0xA38 == 0) { for(int i = 0; i < temp; i++) { g_env_light.setLightTevColorType(field_0x298[i], &tevStr); if(field_0xA3C == 1) { mDoExt_modelUpdateDL(field_0x298[i]); } } } else { g_env_light.setLightTevColorType(mpModel, &tevStr); J3DModelData* mdl_data = mpModel->getModelData(); mBck.entry(mdl_data, mBck.getFrame()); if(field_0xA3C == 1) { mDoExt_modelUpdateDL(mpModel); } mBck.remove(mpModel->getModelData()); } dComIfGd_setList(); return true; } /* 00000940-00000A98 .text daArrow_Iceeff_Draw__FPv */ static BOOL daArrow_Iceeff_Draw(void* i_this) { return static_cast(i_this)->_draw(); } /* 00000A98-00000ABC .text daArrow_Iceeff_Execute__FPv */ static BOOL daArrow_Iceeff_Execute(void* i_this) { return static_cast(i_this)->_execute(); } /* 00000ABC-00001050 .text _execute__16daArrow_Iceeff_cFv */ bool daArrow_Iceeff_c::_execute() { static cXyz ripple_scale(1.0f, 1.0f, 1.0f); daArrow_c* arrow = static_cast(fopAcM_SearchByID(parentActorID)); if(field_0xA38 == 0) { if(arrow == 0) { dComIfGp_particle_setP1(dPa_name::ID_COMMON_0055, ¤t.pos, ¤t.angle); fopAcM_delete(this); return true; } current.pos = arrow->field_0x6a8; current.angle = arrow->shape_angle; if(field_0xA30 == 0) { fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE, 0); } if(field_0xA30 >= 30) { field_0xA34 += 1.0f; if(field_0xA34 >= field_0xA1C->getFrameMax()) { field_0xA34 = field_0xA1C->getFrameMax(); } } if(field_0xA30 < 0x3C) { field_0xA30++; } else { dComIfGp_particle_setP1(dPa_name::ID_COMMON_0055, ¤t.pos, ¤t.angle); fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE_BREAK, 0); fopAcM_delete(arrow); fopAcM_delete(this); } } else { mBck.play(); f32 waterY; fopAcM_getWaterY(¤t.pos, &waterY); current.pos.y = waterY; if(field_0xA30 == 0) { csXyz angle; angle.set(-0x4000, 0, 0); JPABaseEmitter* ptcl = dComIfGp_particle_setP1(dPa_name::ID_COMMON_029E, ¤t.pos, &angle); if(ptcl) { JGeometry::TVec3 scale(0.5f, 0.5f, 0.5f); ptcl->setGlobalScale(scale); ptcl->setRate(50.0f); ptcl->setGlobalAlpha(0x80); } fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE, 0); } field_0xA34 += 1.0f; if(field_0xA34 >= field_0xA1C->getFrameMax()) { field_0xA34 = field_0xA1C->getFrameMax(); } if(field_0xA30 < 300) { field_0xA30++; } else { fopAcM_delete(this); } if(field_0xA30 == 0x23) { JPABaseEmitter* ptcl = dComIfGp_particle_setSingleRipple(dPa_name::ID_COMMON_003D, ¤t.pos, NULL, &ripple_scale); if(ptcl) { ptcl->setGlobalParticleScale(0.67f, 0.67f); } } else if(field_0xA30 == 0x28) { JPABaseEmitter* ptcl = dComIfGp_particle_setP1(dPa_name::ID_COMMON_0055, ¤t.pos); if(ptcl) { ptcl->setAwayFromCenterSpeed(25.0f); ptcl->setAwayFromAxisSpeed(5.0f); ptcl->setDirectionalSpeed(5.0f); JGeometry::TVec3 scale1(0.5f, 1.0f, 0.5f); ptcl->setEmitterScale(scale1); ptcl->setGlobalParticleScale(0.33f, 0.33f); } dComIfGp_particle_setSingleRipple(dPa_name::ID_COMMON_003F, ¤t.pos, NULL, &ripple_scale); fopAcM_seStartCurrent(this, JA_SE_OBJ_MINI_ICE_BREAK, 0); field_0xA3C = 0; } } set_mtx(); return true; } /* 00001050-00001058 .text daArrow_Iceeff_IsDelete__FPv */ static BOOL daArrow_Iceeff_IsDelete(void*) { return true; } static actor_method_class daArrow_IceeffMethodTable = { (process_method_func)daArrow_Iceeff_Create, (process_method_func)daArrow_Iceeff_Delete, (process_method_func)daArrow_Iceeff_Execute, (process_method_func)daArrow_Iceeff_IsDelete, (process_method_func)daArrow_Iceeff_Draw, }; actor_process_profile_definition g_profile_ARROW_ICEEFF = { /* LayerID */ fpcLy_CURRENT_e, /* ListID */ 0x0009, /* ListPrio */ fpcPi_CURRENT_e, /* ProcName */ PROC_ARROW_ICEEFF, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(daArrow_Iceeff_c), /* SizeOther */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Priority */ PRIO_ARROW_ICEEFF, /* Actor SubMtd */ &daArrow_IceeffMethodTable, /* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e, /* Group */ fopAc_ACTOR_e, /* CullType */ fopAc_CULLBOX_CUSTOM_e, };