Files
tww/src/d/actor/d_a_swhit0.cpp
T
2025-05-21 14:44:25 -04:00

497 lines
13 KiB
C++

//
// Generated by dtk
// Translation Unit: d_a_swhit0.cpp
//
#include "d/actor/d_a_swhit0.h"
#include "d/d_com_inf_game.h"
#include "d/d_procname.h"
#include "d/d_priority.h"
#include "f_op/f_op_actor_mng.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "m_Do/m_Do_mtx.h"
static dCcD_SrcSph l_sph_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ ~(AT_TYPE_LIGHT | AT_TYPE_UNK400000 | AT_TYPE_WIND | AT_TYPE_UNK20000 | AT_TYPE_WATER), // 0xFF1DFEFF
/* SrcObjTg SPrm */ cCcD_TgSPrm_Set_e | cCcD_TgSPrm_IsOther_e,
/* SrcObjCo SPrm */ 0,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt SPrm */ 0,
/* SrcGObjTg Se */ 0,
/* SrcGObjTg HitMark */ 0,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg SPrm */ 0,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGSphS
{
/* Center */ 0.0f, 0.0f, 0.0f,
/* Radius */ 35.0f,
},
};
static dCcD_SrcCyl l_cyl_src = {
// dCcD_SrcGObjInf
{
/* Flags */ 0,
/* SrcObjAt Type */ 0,
/* SrcObjAt Atp */ 0,
/* SrcObjAt SPrm */ 0,
/* SrcObjTg Type */ 0,
/* SrcObjTg SPrm */ 0,
/* SrcObjCo SPrm */ cCcD_CoSPrm_Set_e | cCcD_CoSPrm_IsPlayer_e | cCcD_CoSPrm_VsGrpAll_e,
/* SrcGObjAt Se */ 0,
/* SrcGObjAt HitMark */ 0,
/* SrcGObjAt Spl */ 0,
/* SrcGObjAt Mtrl */ 0,
/* SrcGObjAt SPrm */ 0,
/* SrcGObjTg Se */ 0,
/* SrcGObjTg HitMark */ 0,
/* SrcGObjTg Spl */ 0,
/* SrcGObjTg Mtrl */ 0,
/* SrcGObjTg SPrm */ 0,
/* SrcGObjCo SPrm */ 0,
},
// cM3dGCylS
{
/* Center */ 0.0f, 0.0f, 0.0f,
/* Radius */ 25.0f,
/* Height */ 100.0f,
},
};
/* 00000078-00000084 .text getSwNo__10daSwhit0_cFv */
s32 daSwhit0_c::getSwNo() {
return fopAcM_GetParam(this) & 0xFF;
}
/* 00000084-00000090 .text getEvNo__10daSwhit0_cFv */
u8 daSwhit0_c::getEvNo() {
return fopAcM_GetParam(this) >> 8;
}
/* 00000090-0000009C .text getType__10daSwhit0_cFv */
u8 daSwhit0_c::getType() {
return (fopAcM_GetParam(this) >> 0x10) & 0x0F;
}
/* 0000009C-000000B8 .text getTimer__10daSwhit0_cFv */
s32 daSwhit0_c::getTimer() {
u8 param = (fopAcM_GetParam(this) >> 0x14);
s32 timer = param;
if (param == 0xFF) {
timer = 0;
}
return timer;
}
/* 000000B8-000000C4 .text getSwNo2__10daSwhit0_cFv */
s32 daSwhit0_c::getSwNo2() {
return home.angle.z & 0xFF;
}
/* 000000C4-00000230 .text CreateHeap__10daSwhit0_cFv */
BOOL daSwhit0_c::CreateHeap() {
J3DModelData* modelData = (J3DModelData*)dComIfG_getObjectRes("Always", ALWAYS_BDL_OBM_SYOUGEKISW);
JUT_ASSERT(0xD5, modelData != NULL);
mpModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x11000202);
if (mpModel == NULL) {
return FALSE;
}
J3DAnmTransform* anm = (J3DAnmTransform*)dComIfG_getObjectRes("Always", ALWAYS_BCK_OBM_SYOUGEKISW);
if (mAnm.init(modelData, anm, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false) == 0) {
return FALSE;
}
J3DAnmTextureSRTKey* texAnm = (J3DAnmTextureSRTKey*)dComIfG_getObjectRes("Always", ALWAYS_BTK_OBM_SYOUGEKISW);
if (mTexAnm.init(modelData, texAnm, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, 0) == 0) {
return FALSE;
}
return TRUE;
}
/* 00000230-00000270 .text decisionRtType__10daSwhit0_cFv */
void daSwhit0_c::decisionRtType() {
if (home.angle.x == 0) {
mRetType = 0;
}
else if (home.angle.x < -0x4E20 || home.angle.x > 0x4E20) {
mRetType = 2;
return;
}
else {
mRetType = 1;
}
}
/* 00000270-000004E8 .text CreateInit__10daSwhit0_cFv */
BOOL daSwhit0_c::CreateInit() {
setDrawMtx();
fopAcM_SetMtx(this, mpModel->getBaseTRMtx());
decisionRtType();
mColStatus.Init(0xFF, 0xFF, this);
attention_info.position.x += cM_ssin(home.angle.x) * 65.0f * cM_ssin(home.angle.y);
attention_info.position.y += cM_scos(home.angle.x) * 65.0f;
attention_info.position.z += cM_ssin(home.angle.x) * 65.0f * cM_scos(home.angle.y);
eyePos = attention_info.position;
if (mRetType == 0) {
mColCyl.Set(l_cyl_src);
mColCyl.SetStts(&mColStatus);
mColCyl.SetC(current.pos);
onFlag(0x02);
}
mColSph.Set(l_sph_src);
mColSph.SetStts(&mColStatus);
mColSph.SetC(attention_info.position);
if (dComIfGs_isSwitch(getSwNo(), current.roomNo)) {
mState = 4;
onFlag(0x01);
}
else {
mState = 0;
offFlag(0x01);
}
if (getType() == 0x03) {
mEventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_SWITCH_NOSOUND", getEvNo());
}
else {
mEventIdx = dComIfGp_evmng_getEventIdx("DEFAULT_SWITCH", getEvNo());
}
return TRUE;
}
/* 000004E8-00000508 .text CheckCreateHeap__FP10fopAc_ac_c */
static BOOL CheckCreateHeap(fopAc_ac_c* i_actr) {
return static_cast<daSwhit0_c*>(i_actr)->CreateHeap();
}
/* 00000508-000006C0 .text create__10daSwhit0_cFv */
cPhs_State daSwhit0_c::create() {
fopAcM_SetupActor(this, daSwhit0_c);
shape_angle.z = 0;
current.angle.z = 0;
if (fopAcM_entrySolidHeap(this, CheckCreateHeap, 0x34A0) == 0) {
return cPhs_ERROR_e;
}
CreateInit();
return cPhs_COMPLEATE_e;
}
/* 00000AE8-00000B44 .text checkHit__10daSwhit0_cFv */
s32 daSwhit0_c::checkHit() {
if (cLib_calcTimer(&mHitTimer) == 0 && mColSph.ChkTgHit() != 0) {
mHitTimer = 8;
return TRUE;
}
return FALSE;
}
/* 00000B44-00000C48 .text DemoProc__10daSwhit0_cFv */
s32 daSwhit0_c::DemoProc() {
static char* action_table[] = {
"WAIT",
"CHANGE"
};
enum {
ACT_WAIT,
ACT_CHANGE,
};
if (dComIfGp_evmng_getIsAddvance(mStaffId))
{
switch(dComIfGp_evmng_getMyActIdx(mStaffId, action_table, ARRAY_SIZE(action_table), FALSE, 0)) {
case ACT_CHANGE:
dComIfGs_onSwitch(getSwNo(), fopAcM_GetRoomNo(this));
onFlag(0x01);
fopAcM_seStart(this, JA_SE_SHOCK_SW_ON, 0);
break;
}
}
dComIfGp_evmng_cutEnd(mStaffId);
return TRUE;
}
/* 00000C48-00000D8C .text actionOffWait__10daSwhit0_cFv */
s32 daSwhit0_c::actionOffWait() {
u32 type = getType();
if (checkHit() != 0) {
switch(type) {
case 1:
mState = 1;
mTimer = 5;
break;
case 3:
mState = 2;
fopAcM_orderOtherEventId(this, mEventIdx, getEvNo());
eventInfo.onCondition(dEvtCnd_UNK2_e);
break;
default:
mState = 4;
onFlag(0x01);
dComIfGs_onSwitch(getSwNo(), fopAcM_GetRoomNo(this));
break;
}
fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_NSTONE, 0);
}
return TRUE;
}
/* 00000D8C-00000E24 .text actionToOnReady__10daSwhit0_cFv */
s32 daSwhit0_c::actionToOnReady() {
if (dComIfGp_event_runCheck() != 0) {
return TRUE;
}
if (mTimer != 0) {
mTimer--;
}
else {
mState = 2;
fopAcM_orderOtherEventId(this, mEventIdx, getEvNo());
eventInfo.onCondition(dEvtCnd_UNK2_e);
}
return TRUE;
}
/* 00000E24-00000EC8 .text actionToOnOrder__10daSwhit0_cFv */
s32 daSwhit0_c::actionToOnOrder() {
if (eventInfo.checkCommandDemoAccrpt()) {
mState = 3;
mStaffId = dComIfGp_evmng_getMyStaffId("SWITCH");
DemoProc();
}
else {
fopAcM_orderOtherEventId(this, mEventIdx, getEvNo());
eventInfo.onCondition(dEvtCnd_UNK2_e);
}
return TRUE;
}
/* 00000EC8-00000F3C .text actionToOnDemo__10daSwhit0_cFv */
s32 daSwhit0_c::actionToOnDemo() {
if (dComIfGp_evmng_endCheck(mEventIdx)) {
mState = 4;
dComIfGp_event_reset();
return TRUE;
}
DemoProc();
return TRUE;
}
/* 00000F3C-0000104C .text actionOnWait__10daSwhit0_cFv */
s32 daSwhit0_c::actionOnWait() {
if (checkHit() != 0) {
fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_NSTONE, 0);
}
if (getType() == 0x02) {
if (!dComIfGs_isSwitch(getSwNo(), current.roomNo)) {
offFlag(0x01);
mState = 0;
return TRUE;
}
}
u8 timer = getTimer();
if (timer != 0) {
mOnTimer = (u8)getTimer() * 0x0F;
mState = 5;
}
return TRUE;
}
/* 0000104C-0000115C .text actionOnTimer__10daSwhit0_cFv */
s32 daSwhit0_c::actionOnTimer() {
if (checkHit() != 0) {
fopAcM_seStart(this, JA_SE_OBJ_COL_SWC_NSTONE, 0);
}
if (dComIfGs_isSwitch(getSwNo2(), current.roomNo)) {
mState = 4;
}
else if (mOnTimer > 0) {
mOnTimer--;
}
else {
offFlag(0x01);
mState = 0;
dComIfGs_offSwitch(getSwNo(), current.roomNo);
}
return TRUE;
}
/* 0000115C-000011E4 .text setDrawMtx__10daSwhit0_cFv */
void daSwhit0_c::setDrawMtx() {
mpModel->setBaseScale(scale);
mDoMtx_stack_c::transS(current.pos);
mDoMtx_stack_c::XYZrotM(current.angle);
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
}
s32 daSwhit0_c::draw() {
static GXColorS10 l_color[] = {
{ 0xF0, 0xF5, 0xFF, 0x6E },
{ 0xB4, 0xC8, 0xD2, 0x64 },
{ 0xE6, 0xC8, 0x00, 0x6E },
{ 0x78, 0x64, 0x32, 0x64 }
};
g_env_light.settingTevStruct(TEV_TYPE_BG0, &current.pos, &tevStr);
g_env_light.setLightTevColorType(mpModel, &tevStr);
J3DModelData* modelData = mpModel->getModelData();
s32 flag = checkFlag(0x01);
GXColorS10* colors = l_color;
if (flag) {
colors = l_color + 2;
}
for (u16 i = 0; i < modelData->getMaterialNum(); i++) {
J3DMaterial* mat = modelData->getMaterialNodePointer(i);
if (mat->getTevColor(1) != NULL) {
mat->setTevColor(1, (J3DGXColorS10*)&colors[0]);
}
if (mat->getTevColor(2) != NULL) {
mat->setTevColor(2, (J3DGXColorS10*)&colors[1]);
}
}
mAnm.entry(modelData);
mTexAnm.entry(modelData);
mDoExt_modelUpdateDL(mpModel);
return TRUE;
}
/* 000011E4-00001334 .text daSwhit0_Draw__FP10daSwhit0_c */
static s32 daSwhit0_Draw(daSwhit0_c* i_swhit) {
return i_swhit->draw();
}
/* 00001334-00001420 .text daSwhit0_Execute__FP10daSwhit0_c */
static s32 daSwhit0_Execute(daSwhit0_c* i_swhit) {
i_swhit->mAnm.play();
i_swhit->mTexAnm.play();
switch (i_swhit->mState) {
case 0:
i_swhit->actionOffWait();
break;
case 1:
i_swhit->actionToOnReady();
break;
case 2:
i_swhit->actionToOnOrder();
break;
case 3:
i_swhit->actionToOnDemo();
break;
case 4:
i_swhit->actionOnWait();
break;
case 5:
i_swhit->actionOnTimer();
break;
}
if (i_swhit->checkFlag(0x02)) {
dComIfG_Ccsp()->Set(&i_swhit->mColCyl);
}
dComIfG_Ccsp()->Set(&i_swhit->mColSph);
return TRUE;
}
/* 00001420-00001428 .text daSwhit0_IsDelete__FP10daSwhit0_c */
static s32 daSwhit0_IsDelete(daSwhit0_c* i_swhit) {
return TRUE;
}
/* 00001428-00001450 .text daSwhit0_Delete__FP10daSwhit0_c */
static s32 daSwhit0_Delete(daSwhit0_c* i_swhit) {
i_swhit->~daSwhit0_c();
return TRUE;
}
/* 00001450-00001470 .text daSwhit0_Create__FP10fopAc_ac_c */
static cPhs_State daSwhit0_Create(fopAc_ac_c* i_swhit) {
return static_cast<daSwhit0_c*>(i_swhit)->create();
}
static actor_method_class l_daSwhit0_Method = {
(process_method_func)daSwhit0_Create,
(process_method_func)daSwhit0_Delete,
(process_method_func)daSwhit0_Execute,
(process_method_func)daSwhit0_IsDelete,
(process_method_func)daSwhit0_Draw,
};
actor_process_profile_definition g_profile_SWHIT0 = {
/* LayerID */ fpcLy_CURRENT_e,
/* ListID */ 0x0008,
/* ListPrio */ fpcPi_CURRENT_e,
/* ProcName */ PROC_SWHIT0,
/* Proc SubMtd */ &g_fpcLf_Method.base,
/* Size */ sizeof(daSwhit0_c),
/* SizeOther */ 0,
/* Parameters */ 0,
/* Leaf SubMtd */ &g_fopAc_Method.base,
/* Priority */ PRIO_SWHIT0,
/* Actor SubMtd */ &l_daSwhit0_Method,
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK4000_e | fopAcStts_UNK40000_e,
/* Group */ fopAc_ACTOR_e,
/* CullType */ fopAc_CULLBOX_0_e,
};