mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-30 00:46:29 -04:00
926 lines
22 KiB
C++
926 lines
22 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_door12.cpp
|
|
//
|
|
|
|
#include "d/dolzel_rel.h" // IWYU pragma: keep
|
|
#include "d/actor/d_a_door12.h"
|
|
#include "d/actor/d_a_player.h"
|
|
#include "d/res/res_door12.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "f_op/f_op_actor_mng.h"
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
#include "m_Do/m_Do_hostIO.h"
|
|
|
|
class daDoor12_HIO_c : public JORReflexible {
|
|
public:
|
|
daDoor12_HIO_c();
|
|
virtual ~daDoor12_HIO_c() {}
|
|
|
|
void genMessage(JORMContext*) {}
|
|
|
|
public:
|
|
/* 0x04 */ s8 mNo;
|
|
/* 0x08 */ f32 m08;
|
|
/* 0x0C */ u8 m0C;
|
|
};
|
|
|
|
static daDoor12_HIO_c l_HIO;
|
|
|
|
daDoor12_HIO_c::daDoor12_HIO_c() {
|
|
mNo = -1;
|
|
m08 = 200.0f;
|
|
m0C = 0;
|
|
}
|
|
|
|
#endif
|
|
|
|
/* 00000078-000000C0 .text chkMakeKey__10daDoor12_cFv */
|
|
s32 daDoor12_c::chkMakeKey() {
|
|
u8 type = getType();
|
|
if (type == 1) {
|
|
return TRUE;
|
|
}
|
|
|
|
if (type == 3) {
|
|
return 2;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 000000C0-000001A0 .text setKey__10daDoor12_cFv */
|
|
void daDoor12_c::setKey() {
|
|
if (chkMakeKey() == 1) {
|
|
if (!dComIfGs_isSwitch(getSwbit(), -1)) {
|
|
mKeyLock.keyOn();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (chkMakeKey() == 2) {
|
|
if (getSwbit() == 0xff) {
|
|
mKeyLock.keyOff();
|
|
return;
|
|
}
|
|
|
|
if (getSwbit() >= 0x80 || !dComIfGs_isSwitch(getSwbit(), -1)) {
|
|
mKeyLock.keyOn();
|
|
return;
|
|
}
|
|
}
|
|
|
|
mKeyLock.keyOff();
|
|
}
|
|
|
|
/* 000001A0-00000210 .text chkMakeStop__10daDoor12_cFv */
|
|
BOOL daDoor12_c::chkMakeStop() {
|
|
if (getSwbit2() != 0xFF) {
|
|
return TRUE;
|
|
}
|
|
|
|
if (!chkMakeKey() && getSwbit() != 0xFF) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000210-000002DC .text chkStopF__10daDoor12_cFv */
|
|
s32 daDoor12_c::chkStopF() {
|
|
u8 uVar2 = getType();
|
|
u8 bVar3 = getSwbit();
|
|
u8 uVar1 = getFRoomNo();
|
|
if (bVar3 == 0xff) {
|
|
return 0;
|
|
}
|
|
|
|
switch (uVar2) {
|
|
case 0:
|
|
case 2:
|
|
if (!dComIfGp_roomControl_checkStatusFlag(uVar1, 1)) {
|
|
return -1;
|
|
} else {
|
|
return !dComIfGs_isSwitch(bVar3, uVar1);
|
|
}
|
|
break;
|
|
case 1:
|
|
break;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* 000002DC-0000036C .text chkStopB__10daDoor12_cFv */
|
|
s32 daDoor12_c::chkStopB() {
|
|
u8 uVar1 = getSwbit2();
|
|
u8 uVar2 = getBRoomNo();
|
|
if (uVar1 == 0xff) {
|
|
return 0;
|
|
}
|
|
|
|
if (!dComIfGp_roomControl_checkStatusFlag(uVar2, 1)) {
|
|
return -1;
|
|
}
|
|
|
|
return !dComIfGs_isSwitch(uVar1, uVar2);
|
|
}
|
|
|
|
/* 0000036C-00000400 .text setStop__10daDoor12_cFv */
|
|
void daDoor12_c::setStop() {
|
|
if (chkMakeStop() && mStopBars.mpModel != NULL) {
|
|
mStopBars.mFrontCheck = mFrontCheck;
|
|
if (mFrontCheck == 0) {
|
|
mStopBars.m8 = chkStopF();
|
|
mStopBars.mA = chkStopB();
|
|
} else {
|
|
mStopBars.m8 = chkStopB();
|
|
mStopBars.mA = chkStopF();
|
|
}
|
|
mStopBars.mOffsY = 0.0f;
|
|
}
|
|
}
|
|
|
|
/* 00000400-0000055C .text chkStopOpen__10daDoor12_cFv */
|
|
BOOL daDoor12_c::chkStopOpen() {
|
|
u8 cVar4 = getType();
|
|
u8 uVar2;
|
|
u8 bVar5;
|
|
|
|
if (mFrontCheck == 0) {
|
|
uVar2 = getSwbit();
|
|
bVar5 = getFRoomNo();
|
|
} else {
|
|
uVar2 = getSwbit2();
|
|
bVar5 = getBRoomNo();
|
|
}
|
|
|
|
if (mFrontCheck == 0 && cVar4 == 2) {
|
|
if (
|
|
dComIfGp_event_runCheck() == FALSE
|
|
#if VERSION > VERSION_DEMO
|
|
|| m2A1 == 0
|
|
#endif
|
|
) {
|
|
if (dComIfGp_roomControl_checkRoomDisp(bVar5) && fopAcM_myRoomSearchEnemy(bVar5) == NULL) {
|
|
if (m2A1 != 0) {
|
|
m2A1--;
|
|
return FALSE;
|
|
}
|
|
|
|
if (uVar2 != 0xff) {
|
|
dComIfGs_onSwitch(uVar2, bVar5);
|
|
}
|
|
return TRUE;
|
|
}
|
|
#if VERSION > VERSION_DEMO
|
|
m2A1 = 0x41;
|
|
#endif
|
|
}
|
|
#if VERSION == VERSION_DEMO
|
|
m2A1 = 0x41;
|
|
#endif
|
|
} else if (uVar2 != 0xff && dComIfGs_isSwitch(uVar2, bVar5)) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 0000055C-00000580 .text setStopDemo__10daDoor12_cFv */
|
|
void daDoor12_c::setStopDemo() {
|
|
if (mFrontCheck == 0) {
|
|
m2C6 = 0;
|
|
} else {
|
|
m2C6 = 1;
|
|
}
|
|
}
|
|
|
|
/* 00000580-00000658 .text chkStopClose__10daDoor12_cFv */
|
|
BOOL daDoor12_c::chkStopClose() {
|
|
u8 uVar3 = getType();
|
|
|
|
if (mStopBars.mpModel == NULL) {
|
|
return FALSE;
|
|
} else if (uVar3 == 3) {
|
|
return FALSE;
|
|
}
|
|
|
|
u8 uVar1;
|
|
u8 uVar2;
|
|
if (mFrontCheck == 0) {
|
|
if (uVar3 == 2) {
|
|
return FALSE;
|
|
}
|
|
uVar1 = getSwbit();
|
|
uVar2 = getFRoomNo();
|
|
} else {
|
|
uVar1 = getSwbit2();
|
|
uVar2 = getBRoomNo();
|
|
}
|
|
|
|
if (uVar1 == 0xff) {
|
|
return FALSE;
|
|
} else if (!dComIfGs_isSwitch(uVar1, uVar2)) {
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
/* 00000658-00000678 .text CheckCreateHeap__FP10fopAc_ac_c */
|
|
static BOOL CheckCreateHeap(fopAc_ac_c* a_this) {
|
|
return ((daDoor12_c*)a_this)->CreateHeap();
|
|
}
|
|
|
|
/* 00000678-000008F8 .text CreateHeap__10daDoor12_cFv */
|
|
BOOL daDoor12_c::CreateHeap() {
|
|
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes(getArcName(), getBdlLf());
|
|
JUT_ASSERT(DEMO_SELECT(360, 362), modelData != NULL);
|
|
|
|
mpLeftModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
|
if (mpLeftModel == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
modelData = (J3DModelData*)dComIfG_getObjectRes(getArcName(), getBdlRt());
|
|
JUT_ASSERT(DEMO_SELECT(369, 371), modelData != NULL);
|
|
|
|
mpRightModel = mDoExt_J3DModel__create(modelData, 0, 0x11020203);
|
|
if (mpRightModel == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
mpBgw = new dBgW();
|
|
if (mpBgw == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
cBgD_t* pData = (cBgD_t*)dComIfG_getObjectRes(getArcName(), getDzb());
|
|
if (pData == NULL) {
|
|
return FALSE;
|
|
}
|
|
|
|
calcMtx();
|
|
|
|
if (mpBgw->Set(pData, cBgW::MOVE_BG_e, &mpLeftModel->getBaseTRMtx()) == true) {
|
|
return FALSE;
|
|
}
|
|
|
|
switch (chkMakeKey()) {
|
|
case 1:
|
|
if (!mKeyLock.keyCreate(0)) {
|
|
return FALSE;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if (!mKeyLock.keyCreate(1)) {
|
|
return FALSE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (chkMakeStop() && !mStopBars.create()) {
|
|
return FALSE;
|
|
}
|
|
|
|
mKeyLock.calcMtx(this);
|
|
mStopBars.calcMtx(this);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000008F8-00000974 .text getShapeType__10daDoor12_cFv */
|
|
u8 daDoor12_c::getShapeType() {
|
|
switch (getArg1()) {
|
|
case 8:
|
|
return 1;
|
|
case 9:
|
|
return 2;
|
|
case 10:
|
|
return 3;
|
|
case 11:
|
|
return 4;
|
|
case 12:
|
|
return 5;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
/* 00000974-000009B0 .text getArcName__10daDoor12_cFv */
|
|
char* daDoor12_c::getArcName() {
|
|
u8 uVar2 = getShapeType();
|
|
char* pcVar1;
|
|
|
|
if (uVar2 >= 3) {
|
|
pcVar1 = "door13";
|
|
} else {
|
|
pcVar1 = "door12";
|
|
}
|
|
return pcVar1;
|
|
}
|
|
|
|
/* 000009B0-000009E0 .text getBdlLf__10daDoor12_cFv */
|
|
s32 daDoor12_c::getBdlLf() {
|
|
static s32 bldLf_table[] = {
|
|
DOOR12_BDL_DOOR12_GL, DOOR12_BDL_DOOR12M_L, DOOR12_BDL_DOOR12B_L, DOOR12_BDL_DOOR12_GR, DOOR12_BDL_DOOR12M_R, DOOR12_BDL_DOOR12B_R
|
|
};
|
|
return bldLf_table[getShapeType()];
|
|
}
|
|
|
|
/* 000009E0-00000A10 .text getBdlRt__10daDoor12_cFv */
|
|
s32 daDoor12_c::getBdlRt() {
|
|
static s32 bldRf_table[] = {
|
|
DOOR12_BDL_DOOR12_GR, DOOR12_BDL_DOOR12M_R, DOOR12_BDL_DOOR12B_R, DOOR12_BDL_DOOR12_GL, DOOR12_BDL_DOOR12M_L, DOOR12_BDL_DOOR12B_L
|
|
};
|
|
return bldRf_table[getShapeType()];
|
|
}
|
|
|
|
/* 00000A10-00000A6C .text getDzb__10daDoor12_cFv */
|
|
s32 daDoor12_c::getDzb() {
|
|
switch (getShapeType()) {
|
|
case 2:
|
|
return DOOR12_DZB_DOOR12_B;
|
|
case 3:
|
|
case 4:
|
|
return DOOR12_DZB_DOOR12_G;
|
|
|
|
case 5:
|
|
return DOOR12_DZB_DOOR12_B;
|
|
}
|
|
|
|
return DOOR12_DZB_DOOR12_G;
|
|
}
|
|
|
|
/* 00000A6C-00000ACC .text openWide__10daDoor12_cFv */
|
|
f32 daDoor12_c::openWide() {
|
|
#if VERSION == VERSION_DEMO
|
|
return l_HIO.m08;
|
|
#else
|
|
f32 uVar2;
|
|
|
|
switch (getShapeType()) {
|
|
case 3:
|
|
case 4:
|
|
uVar2 = 140.0f;
|
|
break;
|
|
|
|
case 5:
|
|
uVar2 = 220.0f;
|
|
break;
|
|
|
|
default:
|
|
uVar2 = 200.0f;
|
|
break;
|
|
}
|
|
return uVar2;
|
|
#endif
|
|
}
|
|
|
|
/* 00000ACC-00000CD0 .text setEventPrm__10daDoor12_cFv */
|
|
void daDoor12_c::setEventPrm() {
|
|
if (mFrontCheck == 0) {
|
|
m2C6 = 2;
|
|
if (mStopBars.mA == 0xff) {
|
|
mStopBars.mA = chkStopB();
|
|
}
|
|
} else {
|
|
m2C6 = 3;
|
|
if (getType() == 3) {
|
|
return;
|
|
}
|
|
|
|
if (mStopBars.mA == 0xff) {
|
|
mStopBars.mA = chkStopF();
|
|
}
|
|
}
|
|
|
|
if (mStopBars.m8 == 0) {
|
|
if (getType() == 3) {
|
|
m2C6 = 6;
|
|
} else if (mStopBars.mA == 1) {
|
|
m2C6 += 2;
|
|
}
|
|
|
|
if (getShapeType() == 1 || getShapeType() == 2 || getShapeType() == 4 || getShapeType() == 5) {
|
|
if (fopAcM_SearchByID(daPy_getPlayerActorClass()->getGrabActorID()) != NULL) {
|
|
m2C6 = 0xb;
|
|
}
|
|
}
|
|
|
|
if (mKeyLock.mbEnabled) {
|
|
switch (getType()) {
|
|
case 3:
|
|
if (dComIfGs_isDungeonItemBossKey() == 0) {
|
|
return;
|
|
}
|
|
break;
|
|
|
|
default:
|
|
if (dComIfGs_getKeyNum() == 0) {
|
|
return;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (checkArea(SQUARE(110.0f), SQUARE(110.0f), SQUARE(250.0f))) {
|
|
eventInfo.setEventId(mEventIdx[m2C6]);
|
|
eventInfo.setToolId(mToolId[m2C6]);
|
|
eventInfo.onCondition(dEvtCnd_CANDOOR_e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/* 00000CD0-00000DB0 .text openInit__10daDoor12_cFv */
|
|
void daDoor12_c::openInit() {
|
|
openInitCom(1);
|
|
onFlag(1);
|
|
dComIfG_Bgsp()->Release(mpBgw);
|
|
m31C = 0.0f;
|
|
speedF = 0.0f;
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if ((getArg1() != 8 && getArg1() != 0xb) || m318 != 1)
|
|
#endif
|
|
{
|
|
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_MOVE_U, 0);
|
|
}
|
|
}
|
|
|
|
/* 00000DB0-00000E50 .text openProc__10daDoor12_cFv */
|
|
BOOL daDoor12_c::openProc() {
|
|
BOOL ret = FALSE;
|
|
|
|
switch (m2C6) {
|
|
case 2:
|
|
case 3:
|
|
case 11:
|
|
openProcCom();
|
|
break;
|
|
}
|
|
|
|
cLib_chaseF(&speedF, 20.0f, 2.0f);
|
|
if (cLib_chaseF(&m31C, 200.0f, speedF)) {
|
|
ret = TRUE;
|
|
}
|
|
|
|
calcMtx();
|
|
return ret;
|
|
}
|
|
|
|
/* 00000E50-00000F14 .text openEnd__10daDoor12_cFv */
|
|
void daDoor12_c::openEnd() {
|
|
#if VERSION > VERSION_DEMO
|
|
if ((getArg1() != 8 && getArg1() != 0xb) || m318 != 1)
|
|
#endif
|
|
{
|
|
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_STOP_U, 0);
|
|
}
|
|
|
|
offFlag(1);
|
|
m31C = 200.0f;
|
|
speedF = 0.0f;
|
|
}
|
|
|
|
/* 00000F14-00001020 .text closeInit__10daDoor12_cFv */
|
|
void daDoor12_c::closeInit() {
|
|
onFlag(2);
|
|
bool rt = dComIfG_Bgsp()->Regist(mpBgw, this);
|
|
JUT_ASSERT(DEMO_SELECT(649, 661), !rt);
|
|
|
|
dComIfGp_map_clrAGBMapSendStopFlg();
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if ((getArg1() != 8 && getArg1() != 0xb) || m318 == 1)
|
|
#endif
|
|
{
|
|
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_MOVE_D, 0);
|
|
}
|
|
}
|
|
|
|
/* 00001020-00001094 .text closeProc__10daDoor12_cFv */
|
|
BOOL daDoor12_c::closeProc() {
|
|
BOOL ret = FALSE;
|
|
cLib_chaseF(&speedF, 20.0f, 2.0f);
|
|
if (cLib_chaseF(&m31C, 0.0f, speedF)) {
|
|
ret = TRUE;
|
|
}
|
|
calcMtx();
|
|
return ret;
|
|
}
|
|
|
|
/* 00001094-00001180 .text closeEnd__10daDoor12_cFv */
|
|
void daDoor12_c::closeEnd() {
|
|
offFlag(2);
|
|
closeEndCom();
|
|
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
if ((getArg1() != 8 && getArg1() != 0xb) || m318 == 1)
|
|
#endif
|
|
{
|
|
fopAcM_seStart(this, JA_SE_OBJ_STN_DOOR_STOP_D, 0);
|
|
}
|
|
}
|
|
|
|
/* 00001180-00001254 .text calcMtx__10daDoor12_cFv */
|
|
void daDoor12_c::calcMtx() {
|
|
f32 fVar1 = m31C * 0.005f * openWide();
|
|
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
|
|
mDoMtx_stack_c::YrotM(home.angle.y);
|
|
|
|
mDoMtx_stack_c::transM(fVar1, 0.0f, 0.0f);
|
|
mpRightModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
|
|
mDoMtx_stack_c::transM(-fVar1 * 2.0f, 0.0f, 0.0f);
|
|
mpLeftModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
|
|
/* 00001254-0000134C .text CreateInit__10daDoor12_cFv */
|
|
BOOL daDoor12_c::CreateInit() {
|
|
if (dComIfG_Bgsp()->Regist(mpBgw, this)) {
|
|
JUT_ASSERT(DEMO_SELECT(726, 748), FALSE);
|
|
}
|
|
|
|
tevStr.mRoomNo = current.roomNo;
|
|
m31C = 0.0f;
|
|
setAction(0);
|
|
attention_info.position.y += 150.0f;
|
|
eyePos.y += 150.0f;
|
|
attention_info.flags = fopAc_Attn_ACTION_DOOR_e;
|
|
|
|
calcMtx();
|
|
mpBgw->Move();
|
|
|
|
mpBgw->SetRoomId(getFRoomNo());
|
|
initProc(2);
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
m2A1 = 0x41;
|
|
#endif
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
if (l_HIO.mNo < 0) {
|
|
l_HIO.mNo = mDoHIO_createChild("両開きドア", &l_HIO);
|
|
}
|
|
#endif
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 0000134C-0000144C .text create__10daDoor12_cFv */
|
|
cPhs_State daDoor12_c::create() {
|
|
cPhs_State PVar2 = dComIfG_resLoad(&mPhase, getArcName());
|
|
|
|
if (PVar2 != cPhs_COMPLEATE_e) {
|
|
return PVar2;
|
|
}
|
|
|
|
if (getArg1() == 9 || getArg1() == 0xc) {
|
|
setType(3);
|
|
}
|
|
|
|
if (getArg1() == 8) {
|
|
dComIfGs_offTmpBit(dSv_event_tmp_flag_c::UNK_0440);
|
|
}
|
|
|
|
if (chkMakeKey()) {
|
|
cPhs_State pVar3 = mKeyLock.keyResLoad();
|
|
if (pVar3 != cPhs_COMPLEATE_e) {
|
|
return pVar3;
|
|
}
|
|
}
|
|
|
|
fopAcM_SetRoomNo(this, getFRoomNo());
|
|
|
|
if (!fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x2700)) {
|
|
return cPhs_ERROR_e;
|
|
}
|
|
|
|
CreateInit();
|
|
return cPhs_COMPLEATE_e;
|
|
}
|
|
|
|
/* 0000144C-0000171C .text demoProc__10daDoor12_cFv */
|
|
void daDoor12_c::demoProc() {
|
|
s32 iVar1 = getDemoAction();
|
|
|
|
if (dComIfGp_evmng_getIsAddvance(mStaffId)) {
|
|
switch (iVar1) {
|
|
case 3:
|
|
openInit();
|
|
break;
|
|
|
|
case 4:
|
|
closeInit();
|
|
break;
|
|
|
|
case 7:
|
|
setGoal();
|
|
break;
|
|
|
|
case 8:
|
|
mKeyLock.keyInit(this);
|
|
break;
|
|
|
|
case 2:
|
|
setStop();
|
|
if (mStopBars.m8) {
|
|
mStopBars.closeInit(this);
|
|
}
|
|
break;
|
|
|
|
case 1:
|
|
mStopBars.openInit(this);
|
|
break;
|
|
|
|
case 0x14:
|
|
setPlayerAngle(0);
|
|
break;
|
|
|
|
case 0x15:
|
|
setPlayerAngle(1);
|
|
break;
|
|
}
|
|
}
|
|
|
|
switch (iVar1) {
|
|
case 3:
|
|
if (checkFlag(1)) {
|
|
if (openProc()) {
|
|
openEnd();
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
} else {
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
break;
|
|
|
|
case 4:
|
|
if (checkFlag(2)) {
|
|
if (closeProc()) {
|
|
closeEnd();
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
} else {
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
break;
|
|
|
|
case 8:
|
|
if (mKeyLock.keyProc()) {
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
mKeyLock.calcMtx(this);
|
|
break;
|
|
|
|
case 2:
|
|
iVar1 = mStopBars.closeProc(this);
|
|
if (iVar1 == 2 && getArg1() == 8) {
|
|
dComIfGs_onTmpBit(dSv_event_tmp_flag_c::UNK_0440);
|
|
}
|
|
|
|
if (iVar1 != 0) {
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
|
|
mStopBars.calcMtx(this);
|
|
break;
|
|
|
|
case 1:
|
|
if (mStopBars.openProc(this)) {
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
}
|
|
mStopBars.calcMtx(this);
|
|
break;
|
|
|
|
case 0x13:
|
|
if (dComIfGp_event_chkEventFlag(dEvtFlag_NOPARTNER_e)) {
|
|
setAction(1);
|
|
dComIfGp_event_reset();
|
|
shape_angle.y = current.angle.y;
|
|
dComIfGp_event_offEventFlag(dEvtFlag_NOPARTNER_e);
|
|
if (dComIfGp_evmng_checkStartDemo()) {
|
|
dComIfGp_evmng_cancelStartDemo();
|
|
}
|
|
}
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
break;
|
|
|
|
default:
|
|
dComIfGp_evmng_cutEnd(mStaffId);
|
|
break;
|
|
}
|
|
}
|
|
|
|
/* 0000171C-00001868 .text daDoor12_actionWait__FP10daDoor12_c */
|
|
BOOL daDoor12_actionWait(daDoor12_c* i_this) {
|
|
if (i_this->eventInfo.checkCommandDoor()) {
|
|
i_this->initOpenDemo(1);
|
|
i_this->setAction(3);
|
|
i_this->demoProc();
|
|
} else if (i_this->mStopBars.m8 != 0) {
|
|
if (i_this->eventInfo.checkCommandDemoAccrpt()) {
|
|
i_this->mStaffId = dComIfGp_evmng_getMyStaffId("SHUTTER_DOOR");
|
|
i_this->shape_angle.y = i_this->current.angle.y;
|
|
if (i_this->mFrontCheck == 1) {
|
|
i_this->shape_angle.y += 0x7FFF;
|
|
}
|
|
i_this->setAction(3);
|
|
i_this->demoProc();
|
|
} else if (i_this->chkStopOpen()) {
|
|
i_this->setStopDemo();
|
|
fopAcM_orderOtherEventId(i_this, i_this->mEventIdx[i_this->m2C6], i_this->mToolId[i_this->m2C6]);
|
|
}
|
|
} else if (i_this->chkStopClose()) {
|
|
i_this->mStopBars.m8 = 1;
|
|
i_this->mStopBars.closeInit(i_this);
|
|
i_this->mStopBars.calcMtx(i_this);
|
|
i_this->setAction(2);
|
|
} else {
|
|
i_this->setEventPrm();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001868-000018EC .text daDoor12_actionDemo__FP10daDoor12_c */
|
|
BOOL daDoor12_actionDemo(daDoor12_c* i_this) {
|
|
if (dComIfGp_evmng_endCheck(i_this->mEventIdx[i_this->m2C6])) {
|
|
i_this->setAction(1);
|
|
dComIfGp_event_reset();
|
|
i_this->shape_angle.y = i_this->current.angle.y;
|
|
} else {
|
|
i_this->demoProc();
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000018EC-00001940 .text daDoor12_actionStopClose__FP10daDoor12_c */
|
|
BOOL daDoor12_actionStopClose(daDoor12_c* i_this) {
|
|
if (i_this->mStopBars.closeProc(i_this)) {
|
|
i_this->setAction(1);
|
|
}
|
|
i_this->mStopBars.calcMtx(i_this);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001940-000019A0 .text daDoor12_actionInit__FP10daDoor12_c */
|
|
BOOL daDoor12_actionInit(daDoor12_c* i_this) {
|
|
i_this->setKey();
|
|
i_this->mKeyLock.calcMtx(i_this);
|
|
i_this->setStop();
|
|
i_this->mStopBars.calcMtx(i_this);
|
|
daDoor12_actionWait(i_this);
|
|
i_this->setAction(1);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000019A0-00001AD0 .text draw__10daDoor12_cFv */
|
|
BOOL daDoor12_c::draw() {
|
|
if (!drawCheck(getType() == 3)) {
|
|
return TRUE;
|
|
}
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
if (l_HIO.m0C != 0) {
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
|
|
g_env_light.settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
dComIfGd_setListBG();
|
|
|
|
g_env_light.setLightTevColorType(mpLeftModel, &tevStr);
|
|
mDoExt_modelUpdateDL(mpLeftModel);
|
|
|
|
g_env_light.setLightTevColorType(mpRightModel, &tevStr);
|
|
mDoExt_modelUpdateDL(mpRightModel);
|
|
|
|
dComIfGd_setList();
|
|
|
|
if (mKeyLock.mbEnabled) {
|
|
mKeyLock.draw(this);
|
|
}
|
|
|
|
if (mStopBars.m8 != 0 && mStopBars.mpModel != NULL) {
|
|
g_env_light.setLightTevColorType(mStopBars.mpModel, &tevStr);
|
|
mDoExt_modelUpdateDL(mStopBars.mpModel);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001AD0-00001AF0 .text daDoor12_Draw__FP10daDoor12_c */
|
|
static BOOL daDoor12_Draw(daDoor12_c* i_this) {
|
|
return i_this->draw();
|
|
}
|
|
|
|
BOOL daDoor12_c::execute() {
|
|
typedef BOOL (*ActionFunc)(daDoor12_c*);
|
|
static ActionFunc l_action[] = {
|
|
daDoor12_actionInit,
|
|
daDoor12_actionWait,
|
|
daDoor12_actionStopClose,
|
|
daDoor12_actionDemo,
|
|
};
|
|
|
|
s32 tmp = checkExecute();
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
m318 = tmp;
|
|
#endif
|
|
|
|
switch (tmp) {
|
|
case 0:
|
|
setAction(0);
|
|
break;
|
|
|
|
case 2:
|
|
l_action[m314](this);
|
|
break;
|
|
|
|
case 1:
|
|
startDemoProc();
|
|
demoProc();
|
|
break;
|
|
|
|
default:
|
|
JUT_ASSERT(DEMO_SELECT(1054, 1078), FALSE);
|
|
break;
|
|
}
|
|
|
|
mRoomNo2 = dComIfGp_roomControl_getStayNo();
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001AF0-00001BC8 .text daDoor12_Execute__FP10daDoor12_c */
|
|
static BOOL daDoor12_Execute(daDoor12_c* i_this) {
|
|
return i_this->execute();
|
|
}
|
|
|
|
/* 00001BC8-00001BD0 .text daDoor12_IsDelete__FP10daDoor12_c */
|
|
static BOOL daDoor12_IsDelete(daDoor12_c*) {
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001BD0-00001CC4 .text daDoor12_Delete__FP10daDoor12_c */
|
|
static BOOL daDoor12_Delete(daDoor12_c* i_this) {
|
|
#if VERSION > VERSION_DEMO
|
|
if (i_this->heap != NULL)
|
|
#endif
|
|
{
|
|
if (i_this->mpBgw != NULL) {
|
|
if (i_this->mpBgw->ChkUsed()) {
|
|
dComIfG_Bgsp()->Release(i_this->mpBgw);
|
|
}
|
|
}
|
|
}
|
|
|
|
dComIfG_resDelete(&i_this->mPhase, i_this->getArcName());
|
|
|
|
if (i_this->chkMakeKey()) {
|
|
i_this->mKeyLock.keyResDelete();
|
|
}
|
|
|
|
i_this->~daDoor12_c();
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
if (l_HIO.mNo >= 0) {
|
|
mDoHIO_deleteChild(l_HIO.mNo);
|
|
l_HIO.mNo = -1;
|
|
}
|
|
#endif
|
|
return TRUE;
|
|
}
|
|
|
|
/* 00001CC4-00001D3C .text daDoor12_Create__FP10fopAc_ac_c */
|
|
static cPhs_State daDoor12_Create(fopAc_ac_c* a_this) {
|
|
fopAcM_SetupActor(a_this, daDoor12_c);
|
|
|
|
return ((daDoor12_c*)a_this)->create();
|
|
}
|
|
|
|
static actor_method_class l_daDoor12_Method = {
|
|
(process_method_func)daDoor12_Create,
|
|
(process_method_func)daDoor12_Delete,
|
|
(process_method_func)daDoor12_Execute,
|
|
(process_method_func)daDoor12_IsDelete,
|
|
(process_method_func)daDoor12_Draw,
|
|
};
|
|
|
|
actor_process_profile_definition g_profile_DOOR12 = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0007,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_DOOR12,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daDoor12_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_DOOR12,
|
|
/* Actor SubMtd */ &l_daDoor12_Method,
|
|
/* Status */ fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_6_e,
|
|
};
|