/** * @file d_a_obj_firepillar.cpp * */ #include "d/actor/d_a_obj_firepillar.h" #include "d/d_cc_d.h" #include "d/d_com_inf_game.h" #include "f_op/f_op_actor_mng.h" /* 80BE9118-80BE9138 000078 0020+00 1/1 0/0 0/0 .text initBaseMtx__14daObjFPillar_cFv */ void daObjFPillar_c::initBaseMtx() { setBaseMtx(); } /* 80BE9138-80BE9190 000098 0058+00 1/1 0/0 0/0 .text setBaseMtx__14daObjFPillar_cFv */ void daObjFPillar_c::setBaseMtx() { mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z); mDoMtx_stack_c::ZXYrotM(shape_angle.x, shape_angle.y, shape_angle.z); } /* ############################################################################################## */ /* 80BE9ABC-80BE9AC8 000000 000C+00 1/1 0/0 0/0 .data cNullVec__6Z2Calc */ static u8 cNullVec__6Z2Calc[12] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; /* 80BE9AC8-80BE9ADC 00000C 0004+10 0/0 0/0 0/0 .data @1787 */ #pragma push #pragma force_active on static u32 lit_1787[1 + 4 /* padding */] = { 0x02000201, /* padding */ 0x40080000, 0x00000000, 0x3FE00000, 0x00000000, }; #pragma pop /* 80BE9ADC-80BE9AF4 000020 0018+00 1/1 0/0 0/0 .data l_cull_box */ static f32 l_cull_box[6] = { -30.0f, -10.0f, -30.0f, 30.0f, 60.0f, 30.0f, }; /* 80BE9AF4-80BE9B40 000038 004C+00 1/1 0/0 0/0 .data l_cps_src */ static dCcD_SrcCps l_cps_src = { { {0x0, {{0x100, 0x1, 0x1d}, {0x0, 0x0}, 0x0}}, // mObj {dCcD_SE_NONE, 0x0, 0x0, 0x1, 0x2}, // mGObjAt {dCcD_SE_NONE, 0x0, 0x0, 0x0, 0x4}, // mGObjTg {0x0}, // mGObjCo }, // mObjInf { {{0.0f, 0.0f, 0.0f}, {0.0f, 100.0f, 0.0f}, 50.0f}, // mCps } // mCpsAttr }; /* 80BE9190-80BE9230 0000F0 00A0+00 1/1 0/0 0/0 .text Create__14daObjFPillar_cFv */ int daObjFPillar_c::Create() { initBaseMtx(); mStts.Init(0, 0xff, this); mCps.Set(l_cps_src); mCps.SetStts(&mStts); f32 maxy = l_cull_box[4] * scale.y; fopAcM_setCullSizeBox(this, (l_cull_box[0] * scale.x), (l_cull_box[1] * scale.y), (l_cull_box[2] * scale.x), (l_cull_box[3] * scale.x), maxy, maxy); return 1; } /* 80BE9230-80BE9360 000190 0130+00 1/1 0/0 0/0 .text create__14daObjFPillar_cFv */ int daObjFPillar_c::create() { fopAcM_SetupActor(this, daObjFPillar_c); int rv = Create(); if (rv == 0) { return cPhs_ERROR_e; } return cPhs_COMPLEATE_e; } /* 80BE94E4-80BE9610 000444 012C+00 1/1 0/0 0/0 .text execute__14daObjFPillar_cFv */ int daObjFPillar_c::execute() { action(); mCylScale.x = scale.x; mCylScale.z = scale.z; cXyz cStack_1c(0.0f, 1.0f, 0.0f); cStack_1c.y *= mCylScale.y * 100.0f; mDoMtx_stack_c::ZXYrotS(current.angle.x, current.angle.y, current.angle.z); mDoMtx_stack_c::multVec(&cStack_1c, &cStack_1c); field_0x954.mStart = current.pos; field_0x954.mEnd = cStack_1c + current.pos; field_0x954.mRadius = scale.x * 50.0f; if (mCylScale.y > scale.y * 0.1f) { mCps.cM3dGCps::Set(field_0x954); dComIfG_Ccsp()->Set(&mCps); } return 1; } /* 80BE9610-80BE96B4 000570 00A4+00 1/1 0/0 0/0 .text action__14daObjFPillar_cFv */ void daObjFPillar_c::action() { static daObjFPillar_c::actionFunc l_func[3] = { &daObjFPillar_c::actionOff, &daObjFPillar_c::actionOnWait, &daObjFPillar_c::actionOn, }; (this->*(l_func[mAction]))(); } /* 80BE96B4-80BE96E0 000614 002C+00 2/2 0/0 0/0 .text actionOffInit__14daObjFPillar_cFv */ void daObjFPillar_c::actionOffInit() { u8 bVar1 = daObjFPillar_prm::getArg0(this); if (bVar1 == 0xff) { bVar1 = 1; } mActionTimer = bVar1 * 15; mAction = ACTION_OFF; } /* 80BE96E0-80BE9784 000640 00A4+00 1/0 0/0 0/0 .text actionOff__14daObjFPillar_cFv */ void daObjFPillar_c::actionOff() { cLib_chaseF(&mCylScale.y, 0.0f, scale.y * 0.1f); if (mActionTimer == 0) { actionOnWaitInit(); } else { if (daObjFPillar_prm::getSwNo(this) != 0xff) { if (fopAcM_isSwitch(this, daObjFPillar_prm::getSwNo(this))) { mActionTimer--; } } else { mActionTimer--; } } } /* 80BE9784-80BE97B8 0006E4 0034+00 1/1 0/0 0/0 .text actionOnWaitInit__14daObjFPillar_cFv */ void daObjFPillar_c::actionOnWaitInit() { u8 bVar1 = daObjFPillar_prm::getArg1(this); if (bVar1 == 0xff) { bVar1 = 1; } mActionTimer = bVar1 * 15; mActionTimer = 30; mAction = ACTION_ON_WAIT; } /* 80BE97B8-80BE986C 000718 00B4+00 1/0 0/0 0/0 .text actionOnWait__14daObjFPillar_cFv */ void daObjFPillar_c::actionOnWait() { cLib_chaseF(&mCylScale.y, scale.y * 0.1f, scale.y * 0.02f); if (mActionTimer == 0) { actionOnInit(); } else { if (daObjFPillar_prm::getSwNo(this) != 0xff) { if (fopAcM_isSwitch(this, daObjFPillar_prm::getSwNo(this))) { mActionTimer--; } else { actionOffInit(); } } else { mActionTimer--; } } } /* 80BE986C-80BE98A0 0007CC 0034+00 1/1 0/0 0/0 .text actionOnInit__14daObjFPillar_cFv */ void daObjFPillar_c::actionOnInit() { u8 bVar1 = daObjFPillar_prm::getArg2(this); if (bVar1 == 0xff) { bVar1 = 1; } mActionTimer = bVar1 * 15; mActionTimer = 30; mAction = ACTION_ON; } /* 80BE98A0-80BE9980 000800 00E0+00 1/0 0/0 0/0 .text actionOn__14daObjFPillar_cFv */ void daObjFPillar_c::actionOn() { f32 target = scale.y; if (mActionTimer == 0) { target = 0.0; } else { if (daObjFPillar_prm::getSwNo(this) != 0xff) { if (fopAcM_isSwitch(this, daObjFPillar_prm::getSwNo(this))) { mActionTimer--; } else { target = 0.0; } } else { mActionTimer--; } } int reachedTarget = cLib_chaseF(&mCylScale.y, target, scale.y * 0.1f); if (reachedTarget && target == 0.0f) { actionOffInit(); } } /* 80BE9980-80BE9984 0008E0 0004+00 1/1 0/0 0/0 .text drawCylinder__FP4cXyzP4cXyzP5csXyz */ static void drawCylinder(cXyz* pos, cXyz* scale, csXyz* angle) { static GXColor const color = {0xFF,00,00,0x60}; #if DEBUG mDoMtx_stack_c::transS(pos->x, pos->y, pos->z); mDoMtx_stack_c::ZXYrotM(angle->x, angle->y, angle->z); mDoMtx_stack_c::scaleM(scale.x * 50.0f, scale.y * 50.0f, scale.x * 50.0f); mDoMtx_stack_c::transM(0.0f, 1.0f, 0.0f); mDoMtx_stack_c::XrotM(0x4000); Mtx mtx; MTXCopy(mDoMtx_stack_c::get(), mtx); dDbVw_drawCylinderMXlu(mtx, color, 1); #endif } /* 80BE9984-80BE99B8 0008E4 0034+00 1/1 0/0 0/0 .text draw__14daObjFPillar_cFv */ int daObjFPillar_c::draw() { drawCylinder(¤t.pos, &mCylScale, ¤t.angle); return 1; } /* 80BE99B8-80BE99C0 000918 0008+00 1/1 0/0 0/0 .text _delete__14daObjFPillar_cFv */ int daObjFPillar_c::_delete() { return 1; } /* 80BE99C0-80BE99E0 000920 0020+00 1/0 0/0 0/0 .text daObjFPillar_Draw__FP14daObjFPillar_c */ static int daObjFPillar_Draw(daObjFPillar_c* i_this) { return i_this->draw(); } /* 80BE99E0-80BE9A00 000940 0020+00 1/0 0/0 0/0 .text daObjFPillar_Execute__FP14daObjFPillar_c */ static int daObjFPillar_Execute(daObjFPillar_c* i_this) { return i_this->execute(); } /* 80BE9A00-80BE9A20 000960 0020+00 1/0 0/0 0/0 .text daObjFPillar_Delete__FP14daObjFPillar_c */ static int daObjFPillar_Delete(daObjFPillar_c* i_this) { fopAcM_GetID(i_this); return i_this->_delete(); } /* 80BE9A20-80BE9A40 000980 0020+00 1/0 0/0 0/0 .text daObjFPillar_Create__FP10fopAc_ac_c */ static int daObjFPillar_Create(fopAc_ac_c* i_this) { fopAcM_GetID(i_this); return static_cast(i_this)->create(); } /* 80BE9B88-80BE9BA8 -00001 0020+00 1/0 0/0 0/0 .data l_daObjFPillar_Method */ static actor_method_class l_daObjFPillar_Method = { (process_method_func)daObjFPillar_Create, (process_method_func)daObjFPillar_Delete, (process_method_func)daObjFPillar_Execute, NULL, (process_method_func)daObjFPillar_Draw, }; /* 80BE9BA8-80BE9BD8 -00001 0030+00 0/0 0/0 1/0 .data g_profile_Obj_FirePillar */ extern actor_process_profile_definition g_profile_Obj_FirePillar = { fpcLy_CURRENT_e, // mLayerID 7, // mListID fpcPi_CURRENT_e, // mListPrio PROC_Obj_FirePillar, // mProcName &g_fpcLf_Method.base, // sub_method sizeof(daObjFPillar_c), // mSize 0, // mSizeOther 0, // mParameters &g_fopAc_Method.base, // sub_method 446, // mPriority &l_daObjFPillar_Method, // sub_method 0x00040000, // mStatus fopAc_ACTOR_e, // mActorType fopAc_CULLBOX_CUSTOM_e, // cullType };