mirror of
https://github.com/zeldaret/tww.git
synced 2026-06-09 04:29:46 -04:00
b77717694c
This fixes the sdata linker error in the debug build.
244 lines
6.5 KiB
C++
244 lines
6.5 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_atdoor.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_atdoor.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/res/res_atdoor.h"
|
|
|
|
enum Action_e {
|
|
ACT_WAIT_e = 0,
|
|
ACT_CLOSE_WAIT_e = 1,
|
|
ACT_CLOSE_e = 2,
|
|
ACT_OPEN_WAIT_e = 3,
|
|
ACT_OPEN_e = 4,
|
|
};
|
|
|
|
const char daAtdoor_c::M_arcname[] = "Atdoor";
|
|
|
|
/* 00000078-00000084 .text getSwbit__10daAtdoor_cFv */
|
|
u8 daAtdoor_c::getSwbit() {
|
|
return (fopAcM_GetParam(this) >> 0) & 0xFF;
|
|
}
|
|
|
|
/* 00000084-000000A4 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* i_this) {
|
|
return ((daAtdoor_c*)i_this)->CreateHeap();
|
|
}
|
|
|
|
/* 000000A4-000001E8 .text CreateHeap__10daAtdoor_cFv */
|
|
BOOL daAtdoor_c::CreateHeap() {
|
|
J3DModelData* modelData = static_cast<J3DModelData*>(dComIfG_getObjectRes(daAtdoor_c::M_arcname, ATDOOR_BDL_SDOOR01));
|
|
JUT_ASSERT(112, modelData != NULL);
|
|
|
|
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000022);
|
|
if (mpModel == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
mpBgW = new dBgW();
|
|
if (mpBgW == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
cBgD_t* dzb = (cBgD_t*)dComIfG_getObjectRes(daAtdoor_c::M_arcname, ATDOOR_DZB_SDOOR01);
|
|
if (dzb == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
calcMtx();
|
|
|
|
if (mpBgW->Set(dzb, cBgW::MOVE_BG_e, &mpModel->getBaseTRMtx()) == true) {
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000001E8-00000258 .text calcMtx__10daAtdoor_cFv */
|
|
void daAtdoor_c::calcMtx() {
|
|
mDoMtx_stack_c::transS(current.pos);
|
|
mDoMtx_stack_c::YrotM(home.angle.y - unk_2A2);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
/* 00000258-0000036C .text CreateInit__10daAtdoor_cFv */
|
|
bool daAtdoor_c::CreateInit() {
|
|
s32 swBit = getSwbit();
|
|
if (dComIfG_Bgsp()->Regist(mpBgW, this)) {
|
|
JUT_ASSERT(170, FALSE);
|
|
}
|
|
|
|
tevStr.mRoomNo = current.roomNo;
|
|
|
|
if (swBit == 0xFF) {
|
|
mAction = ACT_WAIT_e;
|
|
} else if (dComIfGs_isSwitch(swBit, fopAcM_GetRoomNo(this))) {
|
|
mAction = ACT_OPEN_WAIT_e;
|
|
unk_2A2 = 0x4000;
|
|
} else {
|
|
mAction = ACT_CLOSE_WAIT_e;
|
|
}
|
|
|
|
attention_info.position.y += 150.0f;
|
|
eyePos.y += 150.0f;
|
|
calcMtx();
|
|
mpBgW->Move();
|
|
return true;
|
|
}
|
|
|
|
/* 0000036C-00000418 .text create__10daAtdoor_cFv */
|
|
cPhs_State daAtdoor_c::create() {
|
|
cPhs_State ret = dComIfG_resLoad(&mPhase, daAtdoor_c::M_arcname);
|
|
#if VERSION == VERSION_DEMO
|
|
if (ret != cPhs_COMPLEATE_e) {
|
|
return ret;
|
|
}
|
|
fopAcM_SetupActor(this, daAtdoor_c);
|
|
#else
|
|
fopAcM_SetupActor(this, daAtdoor_c);
|
|
if (ret != cPhs_COMPLEATE_e) {
|
|
return ret;
|
|
}
|
|
#endif
|
|
|
|
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x1580)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
CreateInit();
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 00000418-00000420 .text daAtdoor_actionWait__FP10daAtdoor_c */
|
|
bool daAtdoor_actionWait(daAtdoor_c* i_this) {
|
|
return true;
|
|
}
|
|
|
|
/* 00000420-000004CC .text daAtdoor_actionCloseWait__FP10daAtdoor_c */
|
|
bool daAtdoor_actionCloseWait(daAtdoor_c* i_this) {
|
|
if (dComIfGs_isSwitch(i_this->getSwbit(), fopAcM_GetRoomNo(i_this))) {
|
|
fopAcM_seStart(i_this, JA_SE_OBJ_TC_JAIL_DOOR_OP, 0);
|
|
i_this->setAction(ACT_OPEN_e);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 000004CC-00000530 .text daAtdoor_actionClose__FP10daAtdoor_c */
|
|
bool daAtdoor_actionClose(daAtdoor_c* i_this) {
|
|
i_this->unk_2A2 -= 0x400;
|
|
if (i_this->unk_2A2 <= 0) {
|
|
i_this->setAction(ACT_CLOSE_WAIT_e);
|
|
i_this->unk_2A2 = 0;
|
|
}
|
|
|
|
i_this->calcMtx();
|
|
i_this->mpBgW->Move();
|
|
return true;
|
|
}
|
|
|
|
/* 00000530-00000594 .text daAtdoor_actionOpenWait__FP10daAtdoor_c */
|
|
bool daAtdoor_actionOpenWait(daAtdoor_c* i_this) {
|
|
if (!dComIfGs_isSwitch(i_this->getSwbit(), fopAcM_GetRoomNo(i_this))) {
|
|
i_this->setAction(ACT_CLOSE_e);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/* 00000594-000005F8 .text daAtdoor_actionOpen__FP10daAtdoor_c */
|
|
bool daAtdoor_actionOpen(daAtdoor_c* i_this) {
|
|
i_this->unk_2A2 += 0x400;
|
|
if (i_this->unk_2A2 >= 0x4000) {
|
|
i_this->setAction(ACT_OPEN_WAIT_e);
|
|
i_this->unk_2A2 = 0x4000;
|
|
}
|
|
|
|
i_this->calcMtx();
|
|
i_this->mpBgW->Move();
|
|
return true;
|
|
}
|
|
|
|
BOOL daAtdoor_c::draw() {
|
|
g_env_light.settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
|
g_env_light.setLightTevColorType(mpModel, &tevStr);
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000005F8-00000658 .text daAtdoor_Draw__FP10daAtdoor_c */
|
|
static BOOL daAtdoor_Draw(daAtdoor_c* i_this) {
|
|
return i_this->draw();
|
|
}
|
|
|
|
BOOL daAtdoor_c::execute() {
|
|
typedef bool (*actionFuncs)(daAtdoor_c*);
|
|
static actionFuncs l_action[] = {
|
|
daAtdoor_actionWait,
|
|
daAtdoor_actionCloseWait,
|
|
daAtdoor_actionClose,
|
|
daAtdoor_actionOpenWait,
|
|
daAtdoor_actionOpen,
|
|
};
|
|
|
|
l_action[mAction](this);
|
|
return true;
|
|
}
|
|
|
|
/* 00000658-00000694 .text daAtdoor_Execute__FP10daAtdoor_c */
|
|
static BOOL daAtdoor_Execute(daAtdoor_c* i_this) {
|
|
return i_this->execute();
|
|
}
|
|
|
|
/* 00000694-0000069C .text daAtdoor_IsDelete__FP10daAtdoor_c */
|
|
static BOOL daAtdoor_IsDelete(daAtdoor_c*) {
|
|
return TRUE;
|
|
}
|
|
|
|
/* 0000069C-0000070C .text daAtdoor_Delete__FP10daAtdoor_c */
|
|
static BOOL daAtdoor_Delete(daAtdoor_c* i_this) {
|
|
#if VERSION > VERSION_DEMO
|
|
if (i_this->heap != NULL)
|
|
#endif
|
|
{
|
|
dComIfG_Bgsp()->Release(i_this->mpBgW);
|
|
}
|
|
|
|
dComIfG_resDeleteDemo(&i_this->mPhase, daAtdoor_c::M_arcname);
|
|
i_this->~daAtdoor_c();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 0000070C-0000072C .text daAtdoor_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daAtdoor_Create(fopAc_ac_c* i_this) {
|
|
return ((daAtdoor_c*)i_this)->create();
|
|
}
|
|
|
|
static actor_method_class l_daAtdoor_Method = {
|
|
(process_method_func)daAtdoor_Create,
|
|
(process_method_func)daAtdoor_Delete,
|
|
(process_method_func)daAtdoor_Execute,
|
|
(process_method_func)daAtdoor_IsDelete,
|
|
(process_method_func)daAtdoor_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_ATDOOR = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_ATDOOR,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daAtdoor_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_ATDOOR,
|
|
/* Actor SubMtd */ &l_daAtdoor_Method,
|
|
/* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_6_e,
|
|
};
|