Files
tww/src/d/actor/d_a_fallrock.cpp
T
LagoLunatic 72dc8f4ef6 DEMO_SELECT
2025-07-25 21:05:36 -04:00

322 lines
9.5 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_fallrock.cpp
//
#include "d/actor/d_a_fallrock.h"
#include "d/res/res_always.h"
#include "d/d_com_inf_game.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_cc_d.h"
#include "f_op/f_op_actor_mng.h"
#include "f_op/f_op_kankyo_mng.h"
char daFallRock_c::m_arcname[] = "Always";
f32 daFallRock_c::m_falllen = 7000.0f;
s16 daFallRock_c::m_rot_speed = 0x3E8;
const dCcD_SrcCyl daFallRock_c::m_cyl_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ AT_TYPE_UNK8,
/* SrcObjAt Atp */ 1,
/* SrcObjAt SPrm */ cCcD_AtSPrm_Set_e | cCcD_AtSPrm_GrpAll_e,
/* SrcObjTg Type */ AT_TYPE_ALL,
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsEnemy_e,
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_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 */ 0,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGCylS
{
/* Center */ 0.0f, 0.0f, 0.0f,
/* Radius */ 30.0f,
/* Height */ 80.0f,
},
};
/* 00000078-00000098 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
return ((daFallRock_c*) i_this)->CreateHeap();
}
/* 00000098-00000140 .text CreateHeap__12daFallRock_cFv */
BOOL daFallRock_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*) dComIfG_getObjectRes(m_arcname, ALWAYS_BDL_KROCK_00);
JUT_ASSERT(DEMO_SELECT(159, 161), modelData != NULL);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000,0x11020002);
return TRUE;
}
/* 00000140-000001F0 .text set_mtx__12daFallRock_cFv */
void daFallRock_c::set_mtx() {
J3DModel* model = mpModel;
model->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::XYZrotM(shape_angle);
mDoMtx_stack_c::transM(0.0f, -(scale.x * 120.0f), 0.0f);
model->setBaseTRMtx(mDoMtx_stack_c::get());
}
/* 000001F0-000002B0 .text daFallRock_Draw__FP12daFallRock_c */
static BOOL daFallRock_Draw(daFallRock_c* i_this) {
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, &i_this->current.pos, &i_this->tevStr);
g_env_light.setLightTevColorType(i_this->mpModel, &i_this->tevStr);
mDoExt_modelUpdate(i_this->mpModel);
cXyz shadow_pos(i_this->current.pos);
shadow_pos.y = i_this->field_0x29C.GetGroundH() + 100.0f;
f32 shadow_scale = i_this->scale.x * 90.0f;
dComIfGd_setSimpleShadow2(
&shadow_pos,
i_this->field_0x29C.GetGroundH(),
shadow_scale,
i_this->field_0x29C.m_gnd
);
return TRUE;
}
/* 000002B0-000002D0 .text daFallRock_Execute__FP12daFallRock_c */
static BOOL daFallRock_Execute(daFallRock_c* i_this) {
return ((daFallRock_c*)i_this)->execute();
}
/* 000002D0-00000810 .text execute__12daFallRock_cFv */
BOOL daFallRock_c::execute() {
BOOL deleted = FALSE;
field_0x614++;
fopAcM_posMoveF(this, mStts.GetCCMoveP());
field_0x29C.CrrPos(*dComIfG_Bgsp());
field_0x610 = fabs(speed.y) + (f64)field_0x610;
if (field_0x610 > m_falllen) {
if (deleted == FALSE) {
deleted = fopAcM_delete(this);
}
}
if (field_0x29C.ChkGroundLanding()) {
setParticle(0, &current.pos);
fopAcM_seStart(this, JA_SE_OBJ_BREAK_ROCK, 0);
if (deleted == FALSE) {
deleted = fopAcM_delete(this);
}
}
if (field_0x29C.ChkWaterIn()) {
if (scale.x < 1.3f) {
fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_M, 0);
} else {
fopAcM_seStart(this, JA_SE_OBJ_FALL_WATER_L, 0);
}
setParticle(2, &current.pos);
if (!deleted) {
deleted = fopAcM_delete(this);
}
}
dBgS_ObjGndChk_Yogan chk;
cXyz check_pos;
check_pos.set(old.pos.x, old.pos.y + scale.x * 120.0f, old.pos.z);
chk.SetPos(&check_pos);
f32 height = dComIfG_Bgsp()->GroundCross(&chk);
if (height != -G_CM3D_F_INF) {
if (height > current.pos.y + scale.x * 120.0f) {
if (scale.x < 1.3f) {
fopAcM_seStart(this, JA_SE_OBJ_FALL_MAGMA_M, 0);
} else {
fopAcM_seStart(this, JA_SE_OBJ_FALL_MAGMA_L, 0);
}
check_pos.y = height;
setParticle(1, &check_pos);
if (!deleted) {
fopAcM_delete(this);
}
}
}
cLib_chaseAngleS(&shape_angle.x, shape_angle.x + m_rot_speed, m_rot_speed);
set_mtx();
mCyl.SetC(current.pos);
dComIfG_Ccsp()->Set(&mCyl);
return TRUE;
}
/* 00000E38-00000E40 .text daFallRock_IsDelete__FP12daFallRock_c */
static BOOL daFallRock_IsDelete(daFallRock_c*) {
return TRUE;
}
/* 00000E40-00000E68 .text daFallRock_Delete__FP12daFallRock_c */
static BOOL daFallRock_Delete(daFallRock_c* i_this) {
i_this->~daFallRock_c();
return TRUE;
}
daFallRock_c::~daFallRock_c() {
dComIfG_resDeleteDemo(&mPhs, m_arcname);
}
/* 00001030-00001050 .text daFallRock_Create__FP10fopAc_ac_c */
static cPhs_State daFallRock_Create(fopAc_ac_c* i_this) {
return ((daFallRock_c*)i_this)->create();
}
/* 00001050-0000127C .text create__12daFallRock_cFv */
cPhs_State daFallRock_c::create() {
#if VERSION > VERSION_DEMO
fopAcM_SetupActor(this, daFallRock_c);
#endif
cPhs_State res = dComIfG_resLoad(&mPhs, m_arcname);
if (res == cPhs_COMPLEATE_e) {
#if VERSION == VERSION_DEMO
fopAcM_SetupActor(this, daFallRock_c);
#endif
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0xB80)) {
return cPhs_ERROR_e;
}
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
mStts.Init(0xFF, 0xFF, this);
mCyl.Set(m_cyl_src);
mCyl.SetStts(&mStts);
mCyl.SetH(scale.x * 120.0f);
mCyl.SetR(scale.x * 90.0f);
field_0x460.SetWall(30.0f, 30.0f);
field_0x29C.Set(
fopAcM_GetPosition_p(this),
fopAcM_GetOldPosition_p(this),
this,
1,
&field_0x460,
fopAcM_GetSpeed_p(this)
);
set_mtx();
f32 grav = -5.0f;
f32 fall_speed = -70.0f;
f32 speed_f = 0.0f;
gravity = grav;
speedF = speed_f;
fopAcM_SetMaxFallSpeed(this, fall_speed);
field_0x610 = 0.0f;
field_0x29C.ClrWaterNone();
}
return res;
}
/* 00001588-00001794 .text setParticle__12daFallRock_cFiP4cXyz */
void daFallRock_c::setParticle(int param_1, cXyz* pos) {
cXyz particle_scale(5.0f, 5.0f, 5.0f);
field_0x60C.r = tevStr.mColorC0.r;
field_0x60C.g = tevStr.mColorC0.g;
field_0x60C.b = tevStr.mColorC0.b;
field_0x60C.a = tevStr.mColorC0.a;
particle_scale.setall(particle_scale.x * scale.x);
cXyz pos_copy = *pos;
switch (param_1) {
case 0: {
dComIfGp_particle_set(
dPa_name::ID_COMMON_03E3,
&pos_copy,
NULL,
&particle_scale,
0xFF,
NULL,
-1,
&tevStr.mColorK0,
&tevStr.mColorK0
);
J3DModelData* modelData = (J3DModelData*)
dComIfG_getObjectRes(m_arcname, ALWAYS_BDL_MPI_KOISHI);
J3DAnmTexPattern* anmTexPattern = (J3DAnmTexPattern*)
dComIfG_getObjectRes(m_arcname, ALWAYS_BTP_MPI_KOISHI);
JPABaseEmitter* emitter = (JPABaseEmitter*)dComIfGp_particle_set(
dPa_name::ID_COMMON_03E2,
&pos_copy,
NULL,
&particle_scale,
0xFF,
NULL,
-1,
&field_0x60C,
&tevStr.mColorK0
);
if (emitter != NULL && modelData != NULL && anmTexPattern != NULL) {
dPa_J3DmodelEmitter_c* modelEmitter = new dPa_J3DmodelEmitter_c(
emitter, modelData, tevStr, anmTexPattern, 0, 0
);
if (modelEmitter != NULL) {
dComIfGp_particle_addModelEmitter(modelEmitter);
}
}
break;
}
case 1:
fopKyM_createMpillar(pos, scale.x);
break;
case 2:
fopKyM_createWpillar(pos, scale.x, 1.0f, 0);
break;
}
}
static actor_method_class l_daFallRock_Method = {
(process_method_func)daFallRock_Create,
(process_method_func)daFallRock_Delete,
(process_method_func)daFallRock_Execute,
(process_method_func)daFallRock_IsDelete,
(process_method_func)daFallRock_Draw,
};
actor_process_profile_definition g_profile_FallRock = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0007,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_FallRock,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daFallRock_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_FallRock,
/* Actor SubMtd */ &l_daFallRock_Method,
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_0_e,
};