mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
748 lines
23 KiB
C++
748 lines
23 KiB
C++
//
|
|
// Generated by dtk
|
|
// Translation Unit: d_a_obj_hha.cpp
|
|
//
|
|
|
|
#include "d/actor/d_a_obj_hha.h"
|
|
#include "d/actor/d_a_tag_waterlevel.h"
|
|
#include "d/d_bg_s_func.h"
|
|
#include "d/d_bg_s_wtr_chk.h"
|
|
#include "d/d_com_inf_game.h"
|
|
#include "d/d_procname.h"
|
|
#include "d/d_priority.h"
|
|
#include "d/res/res_hha.h"
|
|
|
|
#if VERSION == VERSION_DEMO
|
|
dCcD_SrcCyl l_daObjHha_cyl_data =
|
|
#else
|
|
const dCcD_SrcCyl daObjHha_c::M_cyl_data =
|
|
#endif
|
|
{
|
|
// 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_IsOther_e | cCcD_CoSPrm_VsEnemy_e | cCcD_CoSPrm_VsOther_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 */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGCylS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 570.0f,
|
|
/* Height */ 100.0f,
|
|
},
|
|
};
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
const dCcD_SrcSph daObjHha_c::M_sph_data = {
|
|
// 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_IsOther_e | cCcD_CoSPrm_VsEnemy_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 */ dCcG_TgSPrm_NoHitMark_e,
|
|
/* SrcGObjCo SPrm */ 0,
|
|
},
|
|
// cM3dGSphS
|
|
{
|
|
/* Center */ 0.0f, 0.0f, 0.0f,
|
|
/* Radius */ 220.0f,
|
|
},
|
|
};
|
|
#endif
|
|
|
|
const HHA_RES_FILE_ID l_daObjHha_bdl_idx_table[2] = {HHA_BDL_HHA1, HHA_BDL_HHA2};
|
|
const HHA_RES_FILE_ID l_daObjHha_dzb_idx_table[2] = {HHA_DZB_HHA1, HHA_DZB_HHA2};
|
|
const HHA_RES_FILE_ID l_daObjHha_btk_idx_table[2] = {HHA_BTK_YSWTR00_01, HHA_BTK_YSWTR00_02};
|
|
const J3DFrameCtrl::Attribute_e l_daObjHha_btk_mode_table[2] = {J3DFrameCtrl::EMode_LOOP, J3DFrameCtrl::EMode_NONE};
|
|
const u16 l_daObjHha_splash_id_table[] = {
|
|
dPa_name::ID_SCENE_810D,
|
|
dPa_name::ID_SCENE_810E,
|
|
};
|
|
|
|
/* 00000078-00000170 .text init_data__14daObjHhaPart_cFffUsUcUc */
|
|
void daObjHhaPart_c::init_data(float yPos, float yTar, u16 speed, u8 i, u8 isMiddle) {
|
|
mPos.set(0.0f, yPos, 0.0f);
|
|
mPosTarget.set(0.0f, yTar, 0.0f);
|
|
mPartIdx = i;
|
|
mDeltaY = (yTar - yPos) / speed;
|
|
mPosDeltaDir = mPosTarget - mPos;
|
|
mPosDeltaDir.normalizeRS();
|
|
mCbExec = &daObjHhaPart_c::exe_normal;
|
|
mCbDraw = &daObjHhaPart_c::draw_normal;
|
|
mbMid = isMiddle;
|
|
}
|
|
|
|
/* 00000170-00000224 .text set_mdl_area__14daObjHhaPart_cFPCci */
|
|
BOOL daObjHhaPart_c::set_mdl_area(const char* arcname, int index) {
|
|
J3DModelData* mdl_data;
|
|
BOOL ret;
|
|
ret = FALSE;
|
|
mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(arcname, index));
|
|
JUT_ASSERT(VERSION_SELECT(410, 473, 473, 473), mdl_data != NULL);
|
|
if(mdl_data != NULL){
|
|
mpModel = mDoExt_J3DModel__create(mdl_data, 0, 0x11020203);
|
|
ret = TRUE;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 00000224-000002A4 .text set_bgw__14daObjHhaPart_cFPCci */
|
|
BOOL daObjHhaPart_c::set_bgw(const char* arcname, int index) {
|
|
BOOL ret = TRUE;
|
|
mpBgw = dBgW_NewSet(
|
|
static_cast<cBgD_t*>(dComIfG_getObjectRes(arcname, index)),
|
|
1,
|
|
&mpModel->getBaseTRMtx()
|
|
);
|
|
|
|
if(mpBgw == NULL){
|
|
ret = FALSE;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 000002A4-0000035C .text init_mtx__14daObjHhaPart_cF4cXyz5csXyz4cXyz */
|
|
void daObjHhaPart_c::init_mtx(cXyz currentPos, csXyz shapeAngle, cXyz scale) {
|
|
mpModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS(currentPos);
|
|
mDoMtx_stack_c::ZXYrotM(shapeAngle);
|
|
mDoMtx_stack_c::transM(mPos);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mpModel->calc();
|
|
}
|
|
|
|
/* 0000035C-0000040C .text exe_normal__14daObjHhaPart_cFP10daObjHha_c */
|
|
void daObjHhaPart_c::exe_normal(daObjHha_c* parent) {
|
|
init_mtx(parent->current.pos, parent->shape_angle, parent->scale);
|
|
|
|
bool doMove;
|
|
if(mpBgw != NULL){
|
|
if(0 <= mpBgw->GetId() && mpBgw->GetId() < 0x100){
|
|
doMove = true;
|
|
}
|
|
else {
|
|
doMove = false;
|
|
}
|
|
|
|
if(doMove){
|
|
mpBgw->Move();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/* 0000040C-00000524 .text exe_move__14daObjHhaPart_cFP10daObjHha_c */
|
|
void daObjHhaPart_c::exe_move(daObjHha_c* parent) {
|
|
mPos.y += mDeltaY;
|
|
cXyz positionDelta = mPosTarget - mPos;
|
|
if(mPosDeltaDir.getDotProduct(positionDelta) <= 0.0f){
|
|
mPos = mPosTarget;
|
|
setExeProc(&daObjHhaPart_c::exe_normal);
|
|
if(mbMid == 0 && mPartIdx == 0){
|
|
dComIfGp_getVibration().StartShock(4, -0x21, cXyz(0.0f, 1.0f, 0.0f));
|
|
}
|
|
}
|
|
exe_normal(parent);
|
|
}
|
|
|
|
/* 00000524-0000056C .text draw_normal__14daObjHhaPart_cFP10daObjHha_c */
|
|
void daObjHhaPart_c::draw_normal(daObjHha_c* parent) {
|
|
dKy_getEnvlight().setLightTevColorType(mpModel, &parent->tevStr);
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
}
|
|
|
|
/* 0000056C-00000698 .text create_s__16daObjHhaSplash_cFUsP4cXyzffP5csXyz */
|
|
void daObjHhaSplash_c::create_s(u16 particleID, cXyz* pPos, float offsetY, float offsetZ, csXyz* pAngle) {
|
|
cXyz calcVec;
|
|
|
|
mPos.set(pPos->x, pPos->y + offsetY, pPos->z);
|
|
mDoMtx_stack_c::YrotS(pAngle->y);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
|
|
calcVec *= offsetZ;
|
|
mPos += calcVec;
|
|
mBasePos = mPos;
|
|
mAngle = *pAngle;
|
|
#if VERSION == VERSION_DEMO
|
|
mpEmitter =
|
|
#endif
|
|
dComIfGp_particle_set(particleID, &mPos, &mAngle, NULL, 255, &mSplashCb);
|
|
mbIsActive = true;
|
|
}
|
|
|
|
/* 00000698-000008AC .text create_area__15daObjHhaYgush_cFPCc */
|
|
BOOL daObjHhaYgush_c::create_area(const char* arcname) {
|
|
BOOL ret = FALSE;
|
|
|
|
J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(arcname, HHA_BDL_YGSTP00));
|
|
JUT_ASSERT(VERSION_SELECT(577, 640, 640, 640), mdl_data != NULL);
|
|
|
|
if(mdl_data != NULL){
|
|
M_mdl = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000222);
|
|
JUT_ASSERT(VERSION_SELECT(586, 649, 649, 649), M_mdl != NULL);
|
|
|
|
if(M_mdl != NULL){
|
|
J3DAnmTextureSRTKey* btk_data = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes(arcname, HHA_BTK_YGSTP00));
|
|
JUT_ASSERT(VERSION_SELECT(593, 656, 656, 656), btk_data != NULL);
|
|
|
|
if(mBtk.init(M_mdl->getModelData(), btk_data, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false, false) != false){
|
|
J3DAnmTransform* bck_data = static_cast<J3DAnmTransform*>(dComIfG_getObjectRes(arcname, HHA_BCK_YGSTP00));
|
|
JUT_ASSERT(VERSION_SELECT(598, 661, 661, 661), bck_data != NULL);
|
|
|
|
if(mBck.init(M_mdl->getModelData(), bck_data, true, J3DFrameCtrl::EMode_LOOP, 1.0f, 0, -1, false) != false){
|
|
ret = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 000008AC-00000AD8 .text init_data__15daObjHhaYgush_cFP4cXyzfP5csXyzP4cXyzP12dKy_tevstr_cUc */
|
|
void daObjHhaYgush_c::init_data(cXyz* pPos, f32 zScale, csXyz* pAngle, cXyz* pScale, dKy_tevstr_c* tev, u8 isVisible) {
|
|
cXyz calcVec;
|
|
mDoMtx_stack_c::YrotS(pAngle->y);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
|
|
calcVec *= zScale;
|
|
mBasePos = *pPos + calcVec;
|
|
mPos = mBasePos;
|
|
mRot = *pAngle;
|
|
mScale = *pScale;
|
|
mTev = *tev;
|
|
mbVisible = isVisible;
|
|
}
|
|
|
|
/* 00000AD8-00000B88 .text init_mtx__15daObjHhaYgush_cFv */
|
|
void daObjHhaYgush_c::init_mtx() {
|
|
J3DModel* pModel = M_mdl;
|
|
if(pModel != NULL){
|
|
pModel->setBaseScale(mScale);
|
|
mDoMtx_stack_c::transS(mPos);
|
|
mDoMtx_stack_c::ZXYrotM(mRot);
|
|
mDoMtx_stack_c::scaleM(13.0f, 1.0f, 11.0f);
|
|
M_mdl->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
}
|
|
}
|
|
|
|
/* 00000B88-00000C2C .text draw__15daObjHhaYgush_cFv */
|
|
void daObjHhaYgush_c::draw() {
|
|
if(mbVisible != false && M_mdl != NULL){
|
|
dKy_getEnvlight().settingTevStruct(TEV_TYPE_BG1, &mPos, &mTev);
|
|
dKy_getEnvlight().setLightTevColorType(M_mdl, &mTev);
|
|
mBtk.entry(M_mdl->getModelData());
|
|
mBck.entry(M_mdl->getModelData());
|
|
mDoExt_modelUpdateDL(M_mdl);
|
|
}
|
|
}
|
|
|
|
const char daObjHha_c::M_arcname[] = "Hha";
|
|
|
|
/* 00000C2C-00000C4C .text solidHeapCB__10daObjHha_cFP10fopAc_ac_c */
|
|
int daObjHha_c::solidHeapCB(fopAc_ac_c* i_this) {
|
|
return static_cast<daObjHha_c*>(i_this)->create_heap();
|
|
}
|
|
|
|
/* 00000C4C-00000E48 .text create_heap__10daObjHha_cFv */
|
|
BOOL daObjHha_c::create_heap() {
|
|
int i;
|
|
BOOL ret = TRUE;
|
|
|
|
for(i = 0; i < 2; i++){
|
|
if( (mPartA[i].set_mdl_area(M_arcname, l_daObjHha_bdl_idx_table[i]) == FALSE) || (mPartA[i].set_bgw(M_arcname, l_daObjHha_dzb_idx_table[i]) == FALSE) ){
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(ret != FALSE){
|
|
J3DModelData* mdl_data = static_cast<J3DModelData*>(dComIfG_getObjectRes(M_arcname, HHA_BDL_YSWTR00));
|
|
JUT_ASSERT(0x324, mdl_data != NULL);
|
|
if(mdl_data != NULL){
|
|
mpModel = mDoExt_J3DModel__create(mdl_data, 0x80000, 0x11000222);
|
|
for(i = 0; i < 2; i++){
|
|
J3DAnmTextureSRTKey* btk_data = static_cast<J3DAnmTextureSRTKey*>(dComIfG_getObjectRes(M_arcname, l_daObjHha_btk_idx_table[i]));
|
|
JUT_ASSERT(0x32f, btk_data != NULL);
|
|
if(mBtkA[i].init(mdl_data, btk_data, true, l_daObjHha_btk_mode_table[i], 1.0f, 0, -1, false, false) == FALSE){
|
|
ret = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if(ret != FALSE){
|
|
ret = mYgush.create_area(M_arcname);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 00000E48-000011AC .text _create__10daObjHha_cFv */
|
|
cPhs_State daObjHha_c::_create() {
|
|
static const float pos_y[4] = {150.0f, -150.0f, 0.0f, 0.0f};
|
|
static const float tar_y[4] = {0.0f, 0.0f, 150.0f, -150.0f};
|
|
static const u16 move_frame[2] = {55, 30};
|
|
static const float splash_y[2] = {-1400.0f, -1450.0f};
|
|
static const float splash_z[2] = {0.0f, 100.0f};
|
|
|
|
|
|
fopAcM_SetupActor(this, daObjHha_c);
|
|
cPhs_State ret = dComIfG_resLoad(&mPhs, M_arcname);
|
|
if(ret == cPhs_COMPLEATE_e){
|
|
ret = cPhs_ERROR_e;
|
|
if(fopAcM_entrySolidHeap(this, &solidHeapCB, 0x3C80) != false){
|
|
mSwitchNo = fpcM_GetParam(this) & 0xFF;
|
|
mIsMiddle = fpcM_GetParam(this) >> 8;
|
|
mEventIdx = dComIfGp_evmng_getEventIdx("hha_close");
|
|
|
|
if(mIsMiddle == 0xf)
|
|
mIsMiddle = 0;
|
|
|
|
if(check_sw() != FALSE){
|
|
mIsMiddle = (mIsMiddle + 1) & 1; // Negate and make sure that mIsMiddle is just 0 or 1
|
|
mState = State_CLOSED;
|
|
}
|
|
mPartTimer = -1;
|
|
|
|
int posIdx = 2 * (mIsMiddle & 1);
|
|
for(int i = 0; i < 2; i++){
|
|
mPartA[i].init_data(pos_y[posIdx], tar_y[posIdx], move_frame[mIsMiddle], i, mIsMiddle);
|
|
dComIfG_Bgsp()->Regist(mPartA[i].mpBgw, this);
|
|
mPartA[i].init_mtx(current.pos, shape_angle, scale);
|
|
posIdx++;
|
|
}
|
|
|
|
mPosOffset.set(0.0f, -1400.0f, 50.0f);
|
|
mWtrScale = 1.0f;
|
|
|
|
for(int i = 0; i < 2; i++){
|
|
mSplashA[i].create_s(l_daObjHha_splash_id_table[i], ¤t.pos, splash_y[i], splash_z[i], ¤t.angle);
|
|
}
|
|
|
|
if(mIsMiddle == 0){
|
|
set_tex(36.0f, 0.0f, 1);
|
|
mHitboxActive = true;
|
|
mYgush.init_data(¤t.pos, 600.0f, ¤t.angle, &scale, &tevStr, true);
|
|
mWaterSound = true;
|
|
}
|
|
else {
|
|
set_tex(0.0f, 0.0f, 1);
|
|
mSplashA[0].stop_particle();
|
|
mSplashA[1].stop_particle();
|
|
mYgush.init_data(¤t.pos, 600.0f, ¤t.angle, &scale, &tevStr, false);
|
|
mWaterSound = false;
|
|
}
|
|
mYgush.init_mtx();
|
|
init_mtx();
|
|
init_co();
|
|
fopAcM_SetMtx(this, mPartA[0].mpModel->getBaseTRMtx());
|
|
fopAcM_setCullSizeBox(this, -700.0f, -1600.0f, -400.0f, 700.0f, 120.0f, 1000.0f);
|
|
ret = cPhs_COMPLEATE_e;
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
/* 000018EC-000019EC .text _delete__10daObjHha_cFv */
|
|
bool daObjHha_c::_delete() {
|
|
int i;
|
|
#if VERSION > VERSION_DEMO
|
|
if(heap != NULL){
|
|
#endif
|
|
for(i = 0; i < 2; i++){
|
|
cBgW* bgw = mPartA[i].mpBgw;
|
|
if(bgw != NULL){
|
|
bool toErase;
|
|
if(bgw->GetId() >= 0 && bgw->GetId() < 0x100){
|
|
toErase = true;
|
|
}
|
|
else {
|
|
toErase = false;
|
|
}
|
|
|
|
if(toErase){
|
|
dComIfG_Bgsp()->Release(bgw);
|
|
#if VERSION > VERSION_DEMO
|
|
mPartA[i].mpBgw = NULL;
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
#if VERSION > VERSION_DEMO
|
|
}
|
|
#endif
|
|
|
|
for(i = 0; i < 2; i++){
|
|
mSplashA[i].delete_s();
|
|
}
|
|
|
|
dComIfG_resDelete(&mPhs, M_arcname);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000019EC-00001A24 .text check_sw__10daObjHha_cFv */
|
|
inline BOOL daObjHha_c::check_sw() {
|
|
return fopAcM_isSwitch(this, mSwitchNo);
|
|
}
|
|
|
|
/* 00001A24-00001A40 .text set_tex__10daObjHha_cFffi */
|
|
void daObjHha_c::set_tex(float frame, float speed, int idx) {
|
|
mBtkA[idx].setFrame(frame);
|
|
mBtkA[idx].setPlaySpeed(speed);
|
|
}
|
|
|
|
/* 00001A40-00001B00 .text init_mtx__10daObjHha_cFv */
|
|
void daObjHha_c::init_mtx() {
|
|
mpModel->setBaseScale(scale);
|
|
mDoMtx_stack_c::transS( current.pos);
|
|
mDoMtx_stack_c::ZXYrotM(shape_angle);
|
|
mDoMtx_stack_c::transM(mPosOffset);
|
|
mDoMtx_stack_c::scaleM(1.0f, 1.0f, mWtrScale);
|
|
mpModel->setBaseTRMtx(mDoMtx_stack_c::get());
|
|
mpModel->calc();
|
|
}
|
|
|
|
/* 00001B00-00001C64 .text init_co__10daObjHha_cFv */
|
|
void daObjHha_c::init_co() {
|
|
const float yOffset = -400.0f, zOffset = -110.0f;
|
|
cXyz center;
|
|
|
|
mDoMtx_stack_c::YrotS(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseZ, ¢er);
|
|
center *= 460.0f;
|
|
center.y = get_water_h();
|
|
center += current.pos;
|
|
|
|
mCylStts.Init(0xff, 0xff, this);
|
|
mCyl.SetStts(&mCylStts);
|
|
#if VERSION == VERSION_DEMO
|
|
mCyl.Set(l_daObjHha_cyl_data);
|
|
#else
|
|
mCyl.Set(M_cyl_data);
|
|
#endif
|
|
mCyl.SetC(center);
|
|
|
|
#if VERSION > VERSION_DEMO
|
|
bool doSphInit = false;
|
|
if(!check_sw() && mIsMiddle == 0){
|
|
doSphInit = true;
|
|
}
|
|
|
|
if(doSphInit){
|
|
mSphStts.Init(0xff, 0xff, this);
|
|
mSph.SetStts(&mSphStts);
|
|
mSph.Set(M_sph_data);
|
|
center.set(current.pos.x, current.pos.y + yOffset, current.pos.z + zOffset);
|
|
mSph.SetC(center);
|
|
mSph.SetR(220.0f);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
/* 00001C64-00001E14 .text get_water_h__10daObjHha_cFv */
|
|
float daObjHha_c::get_water_h() {
|
|
dBgS_WtrChk waterChk;
|
|
cXyz chkPos = current.pos;
|
|
float ret = current.pos.y;
|
|
|
|
cXyz offVec = cXyz::BaseZ;
|
|
mDoMtx_stack_c::YrotS(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseZ, &offVec);
|
|
offVec *= 400.0f;
|
|
chkPos += offVec;
|
|
if(dBgS_SplGrpChk_In_ObjGnd(chkPos, &waterChk, 1.0f) != false){
|
|
ret = waterChk.GetHeight();
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
/* 00001F38-00001F68 .text set_splash_bottom_h__10daObjHha_cFv */
|
|
void daObjHha_c::set_splash_bottom_h() {
|
|
mSplashA[0].set_pos_y(get_water_h());
|
|
}
|
|
|
|
/* 00001F68-0000201C .text daObjHha_get_r__Fs */
|
|
cXyz daObjHha_get_r(short yAngle) {
|
|
cXyz calcVec = cXyz::BaseZ;
|
|
float waterLevel = daTagWaterlevel::Act_c::get_now() * -190.0f;
|
|
mDoMtx_stack_c::YrotS(yAngle);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
|
|
calcVec *= waterLevel;
|
|
return calcVec;
|
|
}
|
|
|
|
/* 0000201C-000020C0 .text set_splash_bottom_r__10daObjHha_cFv */
|
|
void daObjHha_c::set_splash_bottom_r() {
|
|
cXyz pos = cXyz::BaseZ;
|
|
pos = daObjHha_get_r(current.angle.y);
|
|
pos += mSplashA[0].get_base_pos();
|
|
pos.y = mSplashA[0].get_pos_y();
|
|
mSplashA[0].set_pos(pos);
|
|
}
|
|
|
|
/* 000020C0-000021CC .text set_splash_bottom_stop_r__10daObjHha_cFv */
|
|
void daObjHha_c::set_splash_bottom_stop_r() {
|
|
cXyz calcVec = cXyz::BaseZ;
|
|
float scaling = (1.0f - (mWtrTimer - 15) / 75.0f) * -300.0f;
|
|
mDoMtx_stack_c::YrotS(current.angle.y);
|
|
mDoMtx_stack_c::multVec(&cXyz::BaseZ, &calcVec);
|
|
calcVec *= scaling;
|
|
calcVec += mSplashA[0].get_pos();
|
|
calcVec.y = mSplashA[0].get_pos_y();
|
|
mSplashA[0].set_pos(calcVec);
|
|
}
|
|
|
|
/* 000021CC-00002470 .text water_manager__10daObjHha_cFv */
|
|
void daObjHha_c::water_manager() {
|
|
set_splash_bottom_h();
|
|
set_splash_bottom_r();
|
|
switch(mWtrState){
|
|
case 0:
|
|
break;
|
|
|
|
case 1:
|
|
mWtrScale -= 11.0f/1800;
|
|
if(mWtrScale < mWtrScaleMin){
|
|
mWtrScale = mWtrScaleMin;
|
|
}
|
|
if(mWtrTimer == 34){
|
|
set_tex(37.0f,1.0f,1);
|
|
}
|
|
if(mWtrTimer == 15){
|
|
mSplashA[1].stop_particle();
|
|
mSplashA[1].delete_s();
|
|
}
|
|
else if(mWtrTimer > 15){
|
|
set_splash_bottom_stop_r();
|
|
}
|
|
mWtrTimer--;
|
|
if(mWtrTimer == 0){
|
|
mWtrState = 0;
|
|
mSplashA[0].stop_particle();
|
|
mSplashA[0].delete_s();
|
|
mHitboxActive = false;
|
|
mYgush.disp_off();
|
|
mWaterSound = false;
|
|
}
|
|
break;
|
|
|
|
case 2:
|
|
if(mWtrTimer == 35){
|
|
mSplashA[1].play_particle();
|
|
set_tex(0.0f,1.0f,1);
|
|
}
|
|
mWtrTimer--;
|
|
if( mSplashA[0].chk_stop() && mWtrTimer <= daTagWaterlevel::Act_c::get_now() * 5.0f + 10.0f){
|
|
mSplashA[0].play_particle();
|
|
mYgush.disp_on();
|
|
mWaterSound = true;
|
|
}
|
|
if(mWtrTimer == 0){
|
|
set_tex(36.0f, 0.0f, 1);
|
|
mWtrState = 0;
|
|
mHitboxActive = true;
|
|
}
|
|
break;
|
|
}
|
|
|
|
for(int i = 0; i < 2; i++){
|
|
mBtkA[i].play();
|
|
}
|
|
init_mtx();
|
|
}
|
|
|
|
/* 00002470-0000259C .text part_manager__10daObjHha_cFv */
|
|
void daObjHha_c::part_manager() {
|
|
if(mPartTimer == 0){
|
|
mPartA[0].start_move();
|
|
mPartA[1].start_move();
|
|
mPartTimer = -1;
|
|
if(mIsMiddle == 0){
|
|
fopAcM_seStartCurrent(this, JA_SE_OBJ_F_WATERGATE_CL, 0);
|
|
}
|
|
}
|
|
else if(mPartTimer > 0)
|
|
mPartTimer -= 1;
|
|
|
|
for(int i = 0; i < 2; i++){
|
|
mPartA[i].execute(this);
|
|
}
|
|
}
|
|
|
|
/* 0000259C-00002658 .text ygush_manager__10daObjHha_cFv */
|
|
void daObjHha_c::ygush_manager() {
|
|
cXyz ygushPos;
|
|
if(mYgush.check_draw()){
|
|
ygushPos = daObjHha_get_r(current.angle.y);
|
|
ygushPos += mYgush.get_base_pos();
|
|
ygushPos.y = get_water_h();
|
|
mYgush.anm_play(ygushPos);
|
|
}
|
|
}
|
|
|
|
/* 00002658-000028E4 .text _execute__10daObjHha_cFv */
|
|
bool daObjHha_c::_execute() {
|
|
switch(mState){
|
|
case State_OPEN: if(check_sw()){
|
|
if(mIsMiddle == 0){
|
|
if(eventInfo.mCommand != dEvtCmd_INDEMO_e){
|
|
fopAcM_orderOtherEventId(this, mEventIdx);
|
|
eventInfo.onCondition(2);
|
|
}
|
|
else {
|
|
mDoAud_seStart(JA_SE_READ_RIDDLE_1);
|
|
mWtrState = 1;
|
|
mWtrTimer = 90;
|
|
mPartTimer = 65;
|
|
mState = State_SWITCHING;
|
|
}
|
|
}
|
|
else {
|
|
if(dComIfGp_evmng_startCheck(mEventIdx) != FALSE){
|
|
mWtrState = 2;
|
|
mWtrTimer = 35;
|
|
mPartTimer = 0;
|
|
mState = State_CLOSED;
|
|
}
|
|
}
|
|
} break;
|
|
|
|
|
|
case State_SWITCHING: if(dComIfGp_evmng_endCheck(mEventIdx)){
|
|
dComIfGp_event_reset();
|
|
mState = State_CLOSED;
|
|
}
|
|
break;
|
|
|
|
case State_CLOSED:
|
|
break;
|
|
}
|
|
|
|
part_manager();
|
|
water_manager();
|
|
ygush_manager();
|
|
|
|
if(mWaterSound != false)
|
|
fopAcM_seStartCurrent(this, JA_SE_ATM_WATER_GATE,0);
|
|
|
|
if(mHitboxActive != false){
|
|
cXyz calcVec = mCyl.GetC();
|
|
calcVec.y = get_water_h();
|
|
mCyl.SetC(calcVec);
|
|
dComIfG_Ccsp()->Set(&mCyl);
|
|
#if VERSION > VERSION_DEMO
|
|
bool isSphActive = (!check_sw() && mIsMiddle == 0);
|
|
if(isSphActive){
|
|
dComIfG_Ccsp()->Set(&mSph);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/* 000028E4-000029F4 .text _draw__10daObjHha_cFv */
|
|
bool daObjHha_c::_draw() {
|
|
int i;
|
|
|
|
dKy_getEnvlight().settingTevStruct(TEV_TYPE_BG0, ¤t.pos, &tevStr);
|
|
for(i = 0; i < 2; i++){
|
|
mPartA[i].draw(this);
|
|
}
|
|
|
|
if(mpModel != NULL){
|
|
dKy_getEnvlight().settingTevStruct(TEV_TYPE_ACTOR, ¤t.pos, &tevStr);
|
|
dKy_getEnvlight().setLightTevColorType(mpModel, &tevStr);
|
|
for(i = 0; i < 2; i++){
|
|
mBtkA[i].entry(mpModel->getModelData());
|
|
}
|
|
mDoExt_modelUpdateDL(mpModel);
|
|
}
|
|
mYgush.draw();
|
|
return TRUE;
|
|
}
|
|
|
|
namespace {
|
|
/* 000029F4-00002A14 .text Mthd_Create__25@unnamed@d_a_obj_hha_cpp@FPv */
|
|
cPhs_State Mthd_Create(void* i_this) {
|
|
return static_cast<daObjHha_c*>(i_this)->_create();
|
|
}
|
|
|
|
/* 00002A14-00002A38 .text Mthd_Delete__25@unnamed@d_a_obj_hha_cpp@FPv */
|
|
BOOL Mthd_Delete(void* i_this) {
|
|
return static_cast<daObjHha_c*>(i_this)->_delete();
|
|
}
|
|
|
|
/* 00002A38-00002A5C .text Mthd_Execute__25@unnamed@d_a_obj_hha_cpp@FPv */
|
|
BOOL Mthd_Execute(void* i_this) {
|
|
return static_cast<daObjHha_c*>(i_this)->_execute();
|
|
}
|
|
|
|
/* 00002A5C-00002A80 .text Mthd_Draw__25@unnamed@d_a_obj_hha_cpp@FPv */
|
|
BOOL Mthd_Draw(void* i_this) {
|
|
return static_cast<daObjHha_c*>(i_this)->_draw();
|
|
}
|
|
|
|
/* 00002A80-00002A88 .text Mthd_IsDelete__25@unnamed@d_a_obj_hha_cpp@FPv */
|
|
BOOL Mthd_IsDelete(void* i_this) {
|
|
return TRUE;
|
|
}
|
|
|
|
static actor_method_class Hha_Mthd_Table = {
|
|
(process_method_func)Mthd_Create,
|
|
(process_method_func)Mthd_Delete,
|
|
(process_method_func)Mthd_Execute,
|
|
(process_method_func)Mthd_IsDelete,
|
|
(process_method_func)Mthd_Draw,
|
|
};
|
|
}; // namespace
|
|
|
|
actor_process_profile_definition g_profile_Obj_Hha = {
|
|
/* LayerID */ fpcLy_CURRENT_e,
|
|
/* ListID */ 0x0003,
|
|
/* ListPrio */ fpcPi_CURRENT_e,
|
|
/* ProcName */ PROC_Obj_Hha,
|
|
/* Proc SubMtd */ &g_fpcLf_Method.base,
|
|
/* Size */ sizeof(daObjHha_c),
|
|
/* SizeOther */ 0,
|
|
/* Parameters */ 0,
|
|
/* Leaf SubMtd */ &g_fopAc_Method.base,
|
|
/* Priority */ PRIO_Obj_Hha,
|
|
/* Actor SubMtd */ &Hha_Mthd_Table,
|
|
/* Status */ fopAcStts_CULL_e | fopAcStts_UNK40000_e,
|
|
/* Group */ fopAc_ACTOR_e,
|
|
/* CullType */ fopAc_CULLBOX_CUSTOM_e,
|
|
};
|