Files
tww/src/d/actor/d_a_shutter.cpp
T
LagoLunatic b77717694c Add dolzel_rel.pch
This fixes the sdata linker error in the debug build.
2025-08-23 12:17:10 -04:00

331 lines
11 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_shutter.cpp
//
#include "d/dolzel_rel.h" // IWYU pragma: keep
#include "d/actor/d_a_shutter.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "d/d_com_inf_game.h"
#include "d/res/res_htobi1.h"
#include "d/res/res_htobi2.h"
const float daShutter_c::m_max_speed[2] = {3.0f, 3.0f};
const float daShutter_c::m_min_speed[2] = {1.0f, 1.0f};
const float daShutter_c::m_move_len[2] = {200.0f, 84.0f};
const float daShutter_c::m_width[2] = {220.0f, 82.0f};
const float daShutter_c::m_height[2] = {200.0f, 100.0f};
const s16 daShutter_c::m_bdlidx[2] = {HTOBI1_BDL_HTOBI1, HTOBI2_BDL_HTOBI2};
const s16 daShutter_c::m_dzbidx[2] = {HTOBI1_DZB_HTOBI1, HTOBI2_DZB_HTOBI2};
const s32 daShutter_c::m_heapsize[2] = {0x1140, 0x3000};
const Vec daShutter_c::m_cull_min[2] = {{-500.0f, -100.0f, -50.0f}, {-150.0f, -100.0f, -50.0f}};
const Vec daShutter_c::m_cull_max[2] = {{500.0f, 250.0f, 50.0f}, {150.0f, 250.0f, 50.0f}};
char* daShutter_c::m_arcname[2] = {"Htobi1", "Htobi2"};
char* daShutter_c::m_open_ev_name[2] = {"HYSDOOROPEN", "R03DOOROPEN"};
char* daShutter_c::m_close_ev_name[2] = {NULL, "R03DOORCLOSE"};
char* daShutter_c::m_staff_name[2] = {"Htobi1", "Htobi2"};
/* 00000078-00000108 .text _delete__11daShutter_cFv */
bool daShutter_c::_delete() {
dComIfG_resDelete(&mPhs, m_arcname[mType]);
if (heap != NULL) {
for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) {
dComIfG_Bgsp()->Release(mdBgW[i]);
};
}
return TRUE;
}
/* 00000108-00000128 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
return ((daShutter_c*)i_this)->CreateHeap();
}
/* 00000128-000002B8 .text CreateHeap__11daShutter_cFv */
BOOL daShutter_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectRes(m_arcname[mType], m_bdlidx[mType]);
JUT_ASSERT(0x121, modelData != NULL);
for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) {
mpModel[i] = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
if (!mpModel[i]) {
return FALSE;
}
mdBgW[i] = new dBgW();
if (mdBgW[i]) {
cBgD_t* pData = (cBgD_t *)dComIfG_getObjectRes(m_arcname[mType], m_dzbidx[mType]);
if (mdBgW[i]->Set(pData, cBgW::MOVE_BG_e, &mMtx[i]) == true) {
return FALSE;
}
}
else {
return FALSE;
}
}
return TRUE;
}
/* 000002B8-000004B4 .text Create__11daShutter_cFv */
BOOL daShutter_c::Create() {
fopAcM_SetMtx(this, mpModel[0]->getBaseTRMtx());
Vec cullMin = m_cull_min[mType];
Vec cullMax = m_cull_max[mType];
fopAcM_setCullSizeBox(this, cullMin.x, cullMin.y, cullMin.z, cullMax.x, cullMax.y, cullMax.z);
mSwitchNo = daShutter_prm::getSwitchNo(this);
mcXyz[0].x = -m_width[mType] / 2.0f;
mcXyz[1].x = m_width[mType] / 2.0f;
if (!fopAcM_isSwitch(this, mSwitchNo)) {
field_0x328 = 3;
}
else {
field_0x328 = 2;
mcXyz[0].x = mcXyz[0].x - m_move_len[mType];
mcXyz[1].x = mcXyz[1].x + m_move_len[mType];
}
mFrameTimer = 0x1e;
set_mtx();
for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) {
dComIfG_Bgsp()->Regist(mdBgW[i], this);
mdBgW[i]->Move();
}
if (m_open_ev_name[mType] != NULL) {
mOpenEventIdx = dComIfGp_evmng_getEventIdx(m_open_ev_name[mType], 0xff);
}
if (m_close_ev_name[mType] != NULL) {
mCloseEventIdx = dComIfGp_evmng_getEventIdx(m_close_ev_name[mType], 0xff);
}
return TRUE;
}
/* 000004B4-000005A0 .text _create__11daShutter_cFv */
cPhs_State daShutter_c::_create() {
fopAcM_SetupActor(this, daShutter_c);
mType = daShutter_prm::getType(this);
cPhs_State result = dComIfG_resLoad(&mPhs, m_arcname[mType]);
if (result == cPhs_COMPLEATE_e) {
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, m_heapsize[mType])){
return cPhs_ERROR_e;
}
else {
Create();
}
}
return result;
}
/* 000005E0-000006F0 .text set_mtx__11daShutter_cFv */
void daShutter_c::set_mtx() {
cXyz local_48;
for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) {
mDoMtx_stack_c::YrotS(current.angle.y);
mDoMtx_stack_c::multVec(&mcXyz[i], &local_48);
mpModel[i]->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos.x + local_48.x, current.pos.y + local_48.y, current.pos.z + local_48.z);
mDoMtx_stack_c::ZXYrotM(current.angle.x, current.angle.y, current.angle.z);
mpModel[i]->setBaseTRMtx(mDoMtx_stack_c::get());
MTXCopy(mDoMtx_stack_c::get(), mMtx[i]);
}
}
/* 000006F0-00000788 .text _execute__11daShutter_cFv */
bool daShutter_c::_execute() {
if (mFrameTimer >= 0) {
mFrameTimer--;
}
demo();
set_mtx();
for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) {
mdBgW[i]->Move();
}
mbIsSwitch = fopAcM_isSwitch(this, mSwitchNo);
return TRUE;
}
/* 00000788-00000B14 .text shutter_move__11daShutter_cFv */
void daShutter_c::shutter_move() {
static char* action_table[] = {
"WAIT",
"WAIT02",
"OPEN",
"CLOSE",
};
enum {
ACT_WAIT,
ACT_WAIT02,
ACT_OPEN,
ACT_CLOSE,
};
int actionIndex = dComIfGp_evmng_getMyActIdx(mStaffId, action_table, ARRAY_SIZE(action_table), FALSE, 0);
float maxVel = m_max_speed[mType];
float minVel = m_min_speed[mType];
float fVar4;
float fVar5;
switch (actionIndex) {
case ACT_WAIT:
{
mTimer = 0xf;
field_0x33A = 0;
dComIfGp_evmng_cutEnd(mStaffId);
break;
}
case ACT_WAIT02:
{
if (cLib_calcTimer(&mTimer) == 0) {
field_0x339 = 0;
dComIfGp_evmng_cutEnd(mStaffId);
}
break;
}
case ACT_OPEN:
{
field_0x33A++;
if (field_0x339 == 0) {
field_0x339 = 1;
if (dStage_stagInfo_GetSaveTbl(dComIfGp_getStage().getStagInfo()) == 5) {
fopAcM_seStart(this, JA_SE_OBJ_B_SHUTTER_OPEN, 0);
}
}
fVar4 = cLib_addCalc(&mcXyz[0].x, -m_move_len[mType] - m_width[mType] / 2.0f, 0.1f, maxVel, minVel);
fVar5 = cLib_addCalc(&mcXyz[1].x, m_move_len[mType] + m_width[mType] / 2.0f, 0.1f, maxVel, minVel);
if ((dStage_stagInfo_GetSaveTbl(dComIfGp_getStage().getStagInfo()) == 5) && (field_0x33A == 75)) {
fopAcM_seStart(this, JA_SE_OBJ_B_SHUTTER_STOP, 0);
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
}
if (fVar4 != 0.0f){
break;
}
if (fVar5 != 0.0f) {
break;
}
dComIfGp_evmng_cutEnd(mStaffId);
break;
}
case ACT_CLOSE:
{
if (field_0x339 == 0) {
field_0x339 = 1;
}
fVar4 = cLib_addCalc(&mcXyz[0].x, -m_width[mType] / 2.0f, 0.1f, maxVel, minVel);
fVar5 = cLib_addCalc(&mcXyz[1].x, m_width[mType] / 2.0f, 0.1f, maxVel, minVel);
if (fVar4 != 0.0f) {
break;
}
if (fVar5 != 0.0f) {
break;
}
dComIfGp_evmng_cutEnd(mStaffId);
break;
}
default:
{
dComIfGp_evmng_cutEnd(mStaffId);
break;
}
}
}
/* 00000B14-00000CF0 .text demo__11daShutter_cFv */
void daShutter_c::demo() {
u8 isSwitch = fopAcM_isSwitch(this, mSwitchNo);
if (field_0x320 == 0) {
if ((isSwitch != mbIsSwitch) && (mFrameTimer < 0)) {
if (!isSwitch) {
field_0x320 = 2;
}
else {
field_0x320 = 1;
}
}
}
if (eventInfo.checkCommandDemoAccrpt()) {
if ((dComIfGp_evmng_startCheck(mOpenEventIdx)) && (field_0x320 == 1)) {
field_0x320 = 0;
}
if ((dComIfGp_evmng_startCheck(mCloseEventIdx)) && (field_0x320 == 2)) {
field_0x320 = 0;
}
if (dComIfGp_evmng_endCheck(mOpenEventIdx) || dComIfGp_evmng_endCheck(mCloseEventIdx)) {
dComIfGp_event_reset();
}
mStaffId = dComIfGp_evmng_getMyStaffId(m_staff_name[mType], NULL, 0);
shutter_move();
}
else if ((field_0x320 == 1) && (mOpenEventIdx != 0)) {
fopAcM_orderOtherEventId(this, mOpenEventIdx);
eventInfo.onCondition(dEvtCnd_UNK2_e);
}
else if ((field_0x320 == 2) && (mCloseEventIdx != 0)) {
fopAcM_orderOtherEventId(this, mCloseEventIdx);
eventInfo.onCondition(dEvtCnd_UNK2_e);
}
}
/* 00000CF0-00000DD8 .text _draw__11daShutter_cFv */
bool daShutter_c::_draw() {
cXyz actorPos;
for (int i = 0; i < (int)ARRAY_SIZE(mMtx); i++) {
actorPos = current.pos;
actorPos += mcXyz[i];
g_env_light.settingTevStruct(TEV_TYPE_BG0, &actorPos, &tevStr);
g_env_light.setLightTevColorType(mpModel[i], &tevStr);
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mpModel[i]);
dComIfGd_setList();
}
return TRUE;
}
/* 00000DD8-00000DF8 .text daShutter_Create__FPv */
static cPhs_State daShutter_Create(void* i_this) {
return ((daShutter_c*)i_this)->_create();
}
/* 00000DF8-00000E18 .text daShutter_Delete__FPv */
static bool daShutter_Delete(void* i_this) {
return ((daShutter_c*)i_this)->_delete();
}
/* 00000E18-00000E38 .text daShutter_Draw__FPv */
static bool daShutter_Draw(void* i_this) {
return ((daShutter_c*)i_this)->_draw();
}
/* 00000E38-00000E58 .text daShutter_Execute__FPv */
static bool daShutter_Execute(void* i_this) {
return ((daShutter_c*)i_this)->_execute();
}
/* 00000E58-00000E60 .text daShutter_IsDelete__FPv */
static BOOL daShutter_IsDelete(void*) {
return TRUE;
}
static actor_method_class daShutterMethodTable = {
(process_method_func)daShutter_Create,
(process_method_func)daShutter_Delete,
(process_method_func)daShutter_Execute,
(process_method_func)daShutter_IsDelete,
(process_method_func)daShutter_Draw,
};
actor_process_profile_definition g_profile_SHUTTER = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0003,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_SHUTTER,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daShutter_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_SHUTTER,
/* Actor SubMtd */ &daShutterMethodTable,
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
};