// // Generated by dtk // Translation Unit: d_a_obj_plant.cpp // #include "d/dolzel_rel.h" // IWYU pragma: keep #include "d/actor/d_a_obj_plant.h" #include "m_Do/m_Do_ext.h" #include "d/d_cc_d.h" #include "res/Object/Plant.h" static dCcD_SrcCyl l_cyl_src = { // dCcD_SrcGObjInf { /* Flags */ 0, /* SrcObjAt Type */ 0, /* SrcObjAt Atp */ 0, /* SrcObjAt SPrm */ 0, /* SrcObjTg Type */ AT_TYPE_BOMB, /* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e, /* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsOther_e | cCcD_CoSPrm_VsEnemy_e, /* SrcGObjAt Se */ 0, /* SrcGObjAt HitMark */ dCcG_AtHitMark_None_e, /* SrcGObjAt Spl */ dCcG_At_Spl_UNK0, /* SrcGObjAt Mtrl */ 0, /* SrcGObjAt SPrm */ 0, /* SrcGObjTg Se */ 0, /* SrcGObjTg HitMark */ 0, /* SrcGObjTg Spl */ dCcG_Tg_Spl_UNK0, /* SrcGObjTg Mtrl */ 0, /* SrcGObjTg SPrm */ dCcG_TgSPrm_NoHitMark_e, /* SrcGObjCo SPrm */ 0, }, // cM3dGCylS {{ /* Center */ {0.0f, 0.0f, 0.0f}, /* Radius */ 30.0f, /* Height */ 200.0f, }}, }; static BOOL nodeCallBack(J3DNode*, int); static BOOL _CheckCreateHeap(fopAc_ac_c* i_this) { return static_cast(i_this)->CreateHeap(); } cPhs_State daObjPlant_c::_create() { fopAcM_ct(this, daObjPlant_c); cPhs_State phase_state = dComIfG_resLoad(&mPhase, "Plant"); if (phase_state == cPhs_COMPLEATE_e) { if (!fopAcM_entrySolidHeap(this, _CheckCreateHeap, 0x0D20)) { return cPhs_ERROR_e; } CreateInit(); } field_0x410 = 0; return phase_state; } BOOL daObjPlant_c::_draw() { g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr); g_env_light.setLightTevColorType(mpModel, &tevStr); dComIfGd_setListBG(); mDoExt_modelUpdateDL(mpModel); dComIfGd_setList(); cXyz shadow_vec; shadow_vec.x = 0.0f; shadow_vec.y = 1.0f; shadow_vec.z = 0.0f; dComIfGd_setSimpleShadow(¤t.pos, current.pos.y, 60.0f, &shadow_vec, 0, 1.0f, dDlst_shadowControl_c::getSimpleTex()); return TRUE; } BOOL daObjPlant_c::_delete() { dComIfG_resDeleteDemo(&mPhase, "Plant"); return TRUE; } BOOL daObjPlant_c::_execute() { mCyl.SetC(current.pos); dComIfG_Ccsp()->Set(&mCyl); if ((mHitTimer > 0x38 || field_0x410 == 0) && mCyl.ChkCoHit()) { fopAc_ac_c* hitAc = mCyl.GetCoHitAc(); cXyz diff = current.pos - hitAc->current.pos; s16 angle = cM_atan2s(diff.x, diff.z); field_0x40E = angle - 0x4000; field_0x410 = 1; mHitTimer = 0; field_0x40A = 0; fopAcM_seStart(this, JA_SE_OBJ_TREE_SWING_S, 0); } if (field_0x410 != 0) { mHitTimer++; if (mHitTimer < 8) { field_0x408 = (s16)((0x100 - mHitTimer) * cM_ssin(field_0x40A) * 32.0f); field_0x40A += 0x1000; } else { field_0x408 = (s16)((0x100 - mHitTimer) * cM_ssin(field_0x40A) * 16.0f); field_0x40A += 0x0800; } if (mHitTimer > 0x100) { field_0x410 = 0; mHitTimer = 0; field_0x408 = 0; } } set_mtx(); return TRUE; } /* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */ static BOOL CheckCreateHeap(fopAc_ac_c* i_this) { return ((daObjPlant_c*)i_this)->CreateHeap(); } /* 00000098-000001E0 .text CreateHeap__12daObjPlant_cFv */ BOOL daObjPlant_c::CreateHeap() { J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Plant", dRes_INDEX_PLANT_BDL_YRMWD_e); JUT_ASSERT(0xAA, modelData != NULL); mpModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203); if (mpModel != NULL) { JUTNameTab* nameTab = mpModel->getModelData()->getJointName(); for (u16 i = 0; i < mpModel->getModelData()->getJointNum(); i++) { if (strcmp("joint2", nameTab->getName(i)) == 0) { mpModel->getModelData()->getJointNodePointer(i)->setCallBack(nodeCallBack); break; } } mpModel->setUserArea((u32)this); } else { return FALSE; } return TRUE; } /* 000001E0-000002AC .text CreateInit__12daObjPlant_cFv */ void daObjPlant_c::CreateInit() { fopAcM_SetMtx(this, mpModel->getBaseTRMtx()); fopAcM_setCullSizeBox(this, -600.0f, -0.0f, -600.0f, 600.0f, 900.0f, 600.0f); fopAcM_setCullSizeFar(this, 1.0f); mStts.Init(0xFF, 0xFF, this); mCyl.Set(l_cyl_src); mCyl.SetStts(&mStts); field_0x408 = 0; eyePos = current.pos; eyePos.y += 150.0f; set_mtx(); } /* 000002AC-00000390 .text nodeCallBack__FP7J3DNodei */ static inline BOOL nodeCallBack(J3DNode* node, int calcTiming) { if (calcTiming == J3DNodeCBCalcTiming_In) { int jntNo = ((J3DJoint*)node)->getJntNo(); J3DModel* model = j3dSys.getModel(); daObjPlant_c* plant = (daObjPlant_c*)model->getUserArea(); if (plant != NULL) { PSMTXCopy(model->getAnmMtx(jntNo), *calc_mtx); cMtx_XrotM(*calc_mtx, plant->field_0x40E); cMtx_YrotM(*calc_mtx, plant->field_0x408); cMtx_XrotM(*calc_mtx, -plant->field_0x40E); model->setAnmMtx(jntNo, *calc_mtx); PSMTXCopy(*calc_mtx, j3dSys.mCurrentMtx); } } return TRUE; } /* 00000390-00000410 .text set_mtx__12daObjPlant_cFv */ void daObjPlant_c::set_mtx() { mpModel->setBaseScale(scale); mDoMtx_stack_c::transS(current.pos); mDoMtx_stack_c::YrotM(current.angle.y); mpModel->setBaseTRMtx(mDoMtx_stack_c::get()); } /* 00000410-00000544 .text daObjPlant_Create__FPv */ static cPhs_State daObjPlant_Create(void* i_this) { return ((daObjPlant_c*)i_this)->_create(); } /* 000006FC-0000072C .text daObjPlant_Delete__FPv */ static BOOL daObjPlant_Delete(void* i_this) { daObjPlant_c* plant = static_cast(i_this); return plant->_delete(); } /* 0000072C-00000814 .text daObjPlant_Draw__FPv */ static BOOL daObjPlant_Draw(void* i_this) { return ((daObjPlant_c*)i_this)->_draw(); } /* 00000814-00000A58 .text daObjPlant_Execute__FPv */ static BOOL daObjPlant_Execute(void* i_this) { return ((daObjPlant_c*)i_this)->_execute(); } /* 00000A58-00000A60 .text daObjPlant_IsDelete__FPv */ static BOOL daObjPlant_IsDelete(void*) { return TRUE; } static actor_method_class daObj_PlantMethodTable = { (process_method_func)daObjPlant_Create, (process_method_func)daObjPlant_Delete, (process_method_func)daObjPlant_Execute, (process_method_func)daObjPlant_IsDelete, (process_method_func)daObjPlant_Draw, }; actor_process_profile_definition g_profile_Obj_Plant = { /* Layer ID */ fpcLy_CURRENT_e, /* List ID */ 0x0007, /* List Prio */ fpcPi_CURRENT_e, /* Proc Name */ fpcNm_Obj_Plant_e, /* Proc SubMtd */ &g_fpcLf_Method.base, /* Size */ sizeof(daObjPlant_c), /* Size Other */ 0, /* Parameters */ 0, /* Leaf SubMtd */ &g_fopAc_Method.base, /* Draw Prio */ fpcDwPi_Obj_Plant_e, /* Actor SubMtd */ &daObj_PlantMethodTable, /* Status */ fopAcStts_NOCULLEXEC_e | fopAcStts_CULL_e | fopAcStts_UNK40000_e, /* Group */ fopAc_ACTOR_e, /* Cull Type */ fopAc_CULLBOX_CUSTOM_e, };