// // Generated by dtk // Translation Unit: d_a_atdoor.cpp // #include "d/dolzel.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(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, };