Files
tww/src/d/actor/d_a_obj_plant.cpp
T
LagoLunatic 102042628f Process profiles and enums cleanup (#1031)
* Fix some profile comments

* Add missing static for local visibility data

* Move proc name and draw priority enums to f_pc

* Add _e suffix to daObjBarrier_c proc enum

* Change proc name enum format to match TP

* Change draw prio enum format to match TP

* Change ItemNo enum format, finish fixing item names

* Revert static for cb1 hio

* Clean up formatting of profile comments

* Fix comment alignment
2026-05-26 00:11:58 -04:00

244 lines
7.4 KiB
C++

//
// 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 "d/res/res_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<daObjPlant_c*>(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, &current.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(&current.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", PLANT_BDL_YRMWD);
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<daObjPlant_c*>(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,
};