mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-17 21:03:35 -04:00
244 lines
7.4 KiB
C++
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 "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<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, ¤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<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,
|
|
};
|