mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
268 lines
8.5 KiB
C++
268 lines
8.5 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_shutter2.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_shutter2.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/res/res_htobi3.h"
|
|
|
|
const float daShutter2_c::m_max_speed[1] = {3.0f};
|
|
const float daShutter2_c::m_min_speed[1] = {1.0f};
|
|
const float daShutter2_c::m_move_len[1] = {350.0f};
|
|
const float daShutter2_c::m_width[1] = {500.0f};
|
|
const float daShutter2_c::m_height[1] = {400.0f};
|
|
const s16 daShutter2_c::m_bdlidx[1] = {HTOBI3_BDL_HTOBI3};
|
|
const s16 daShutter2_c::m_dzbidx[1] = {HTOBI3_DZB_HTOBI3};
|
|
const s32 daShutter2_c::m_heapsize[1] = {0x0C00};
|
|
const Vec daShutter2_c::m_cull_min[1] = {{-300.0f, -10.0f, -40.0f}};
|
|
const Vec daShutter2_c::m_cull_max[1] = {{300.0f, 400.0f, 40.0f}};
|
|
|
|
char* daShutter2_c::m_arcname[1] = {"Htobi3"};
|
|
char* daShutter2_c::m_open_ev_name[1] = {"R04DOOROPEN"};
|
|
char* daShutter2_c::m_close_ev_name[1] = {"R04DOORCLOSE"};
|
|
char* daShutter2_c::m_staff_name[1] = {"Htobi3"};
|
|
|
|
/* 00000078-000000B8 .text Delete__12daShutter2_cFv */
|
|
BOOL daShutter2_c::Delete() {
|
|
dComIfG_resDelete(&mPhs, m_arcname[mType]);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000000B8-00000194 .text CreateHeap__12daShutter2_cFv */
|
|
int daShutter2_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData *)dComIfG_getObjectRes(m_arcname[mType], m_bdlidx[mType]);
|
|
JUT_ASSERT(0xe0, modelData != NULL);
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
|
|
if (!mpModel) {
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000194-00000350 .text Create__12daShutter2_cFv */
|
|
BOOL daShutter2_c::Create() {
|
|
fopAcM_SetMtx(this, mpModel->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 = daShutter2_prm::getSwitchNo(this);
|
|
mbIsNearEnemy = fopAcM_myRoomSearchEnemy(fopAcM_GetRoomNo(this)) == NULL;
|
|
if (((mSwitchNo != 0xff) && (fopAcM_isSwitch(this, mSwitchNo))) ||
|
|
((mSwitchNo == 0xff) && (mbIsNearEnemy))) {
|
|
m30C = 1;
|
|
current.pos.y = home.pos.y + 350.0f;
|
|
}
|
|
else {
|
|
m30C = 2;
|
|
}
|
|
mbIsSwitch = fopAcM_isSwitch(this, mSwitchNo);
|
|
set_mtx();
|
|
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;
|
|
}
|
|
|
|
/* 00000350-0000041C .text _create__12daShutter2_cFv */
|
|
cPhs_State daShutter2_c::_create() {
|
|
fopAcM_ct(this, daShutter2_c);
|
|
mType = 0;
|
|
cPhs_State phase_state = dComIfG_resLoad(&mPhs, m_arcname[mType]);
|
|
if (phase_state == cPhs_COMPLEATE_e) {
|
|
phase_state = MoveBGCreate(m_arcname[mType], m_dzbidx[mType], NULL, m_heapsize[mType]);
|
|
if (phase_state == cPhs_ERROR_e) {
|
|
phase_state = cPhs_ERROR_e;
|
|
}
|
|
}
|
|
return phase_state;
|
|
}
|
|
|
|
/* 0000041C-000004AC .text set_mtx__12daShutter2_cFv */
|
|
void daShutter2_c::set_mtx() {
|
|
mpModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(current.angle.y);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
MTXCopy(mDoMtx_stack_c::get(), mMtx);
|
|
}
|
|
|
|
/* 000004AC-00000528 .text Execute__12daShutter2_cFPPA3_A4_f */
|
|
BOOL daShutter2_c::Execute(Mtx** pMtx) {
|
|
demo();
|
|
set_mtx();
|
|
mbIsSwitch = fopAcM_isSwitch(this, mSwitchNo);
|
|
mbIsNearEnemy = fopAcM_myRoomSearchEnemy(fopAcM_GetRoomNo(this)) == NULL;
|
|
*pMtx = &mMtx;
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000528-00000698 .text shutter_move__12daShutter2_cFv */
|
|
void daShutter2_c::shutter_move() {
|
|
float fVar3;
|
|
|
|
static char* action_table[4] = {
|
|
"WAIT",
|
|
"OPEN",
|
|
"CLOSE",
|
|
"OPEN_INIT",
|
|
};
|
|
enum {
|
|
ACT_WAIT,
|
|
ACT_OPEN,
|
|
ACT_CLOSE,
|
|
ACT_OPEN_INIT,
|
|
};
|
|
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];
|
|
|
|
switch (actionIndex) {
|
|
case ACT_WAIT:
|
|
{
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
break;
|
|
}
|
|
case ACT_OPEN_INIT:
|
|
{
|
|
fopAcM_seStart(this, JA_SE_OBJ_WDUN_R04_STR_OP, 0);
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
break;
|
|
}
|
|
case ACT_OPEN:
|
|
{
|
|
fVar3 = cLib_addCalc(¤t.pos.y, home.pos.y + 350.0f, 0.1f, maxVel, minVel);
|
|
if (fVar3 == 0.0f){
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
break;
|
|
|
|
}
|
|
case ACT_CLOSE:
|
|
{
|
|
fVar3 = cLib_addCalc(¤t.pos.y, home.pos.y, 0.1f, maxVel, minVel);
|
|
if (fVar3 == 0.0f){
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
break;
|
|
}
|
|
default:
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 00000698-000008B0 .text demo__12daShutter2_cFv */
|
|
void daShutter2_c::demo() {
|
|
u8 isSwitch = fopAcM_isSwitch(this, mSwitchNo);
|
|
u8 isNearEnemy = fopAcM_myRoomSearchEnemy(fopAcM_GetRoomNo(this)) == NULL;
|
|
if (mDemoState == 0) {
|
|
if (mSwitchNo != 0xFF) {
|
|
if (isSwitch != mbIsSwitch) {
|
|
if (!isSwitch) {
|
|
mDemoState = 2;
|
|
}
|
|
else {
|
|
mDemoState = 1;
|
|
}
|
|
}
|
|
}
|
|
else if (isNearEnemy != mbIsNearEnemy) {
|
|
if (!isNearEnemy) {
|
|
mDemoState = 2;
|
|
}
|
|
else {
|
|
mDemoState = 1;
|
|
}
|
|
}
|
|
}
|
|
if (eventInfo.checkCommandDemoAccrpt()) {
|
|
if (dComIfGp_evmng_startCheck(mOpenEventIdx) && (mDemoState == 1)) {
|
|
mDemoState = 0;
|
|
}
|
|
if (dComIfGp_evmng_startCheck(mCloseEventIdx) && (mDemoState == 2)) {
|
|
mDemoState = 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 ((mDemoState == 1) && (mOpenEventIdx != 0)) {
|
|
fopAcM_orderOtherEventId(this, mOpenEventIdx);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
}
|
|
else if ((mDemoState == 2) && (mCloseEventIdx != 0)) {
|
|
fopAcM_orderOtherEventId(this, mCloseEventIdx);
|
|
eventInfo.onCondition(dEvtCnd_UNK2_e);
|
|
}
|
|
}
|
|
|
|
/* 000008B0-00000950 .text Draw__12daShutter2_cFv */
|
|
BOOL daShutter2_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();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00000950-00000970 .text daShutter2_Create__FPv */
|
|
static cPhs_State daShutter2_Create(void* i_this) {
|
|
return ((daShutter2_c*)i_this)->_create();
|
|
}
|
|
|
|
/* 00000970-00000990 .text daShutter2_Delete__FPv */
|
|
static BOOL daShutter2_Delete(void* i_this) {
|
|
return ((daShutter2_c*)i_this)->MoveBGDelete();
|
|
}
|
|
|
|
/* 00000990-000009BC .text daShutter2_Draw__FPv */
|
|
static BOOL daShutter2_Draw(void* i_this) {
|
|
return ((daShutter2_c*)i_this)->MoveBGDraw();
|
|
}
|
|
|
|
/* 000009BC-000009DC .text daShutter2_Execute__FPv */
|
|
static BOOL daShutter2_Execute(void* i_this) {
|
|
return ((daShutter2_c*)i_this)->MoveBGExecute();
|
|
}
|
|
|
|
/* 000009DC-000009E4 .text daShutter2_IsDelete__FPv */
|
|
static BOOL daShutter2_IsDelete(void*) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class daShutter2MethodTable = {
|
|
(process_method_func)daShutter2_Create,
|
|
(process_method_func)daShutter2_Delete,
|
|
(process_method_func)daShutter2_Execute,
|
|
(process_method_func)daShutter2_IsDelete,
|
|
(process_method_func)daShutter2_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_SHUTTER2 = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0003,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_SHUTTER2,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daShutter2_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_SHUTTER2,
|
|
/* Actor SubMtd */ &daShutter2MethodTable,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|