mirror of
https://github.com/zeldaret/ss
synced 2026-10-07 21:30:59 -04:00
d_a_obj_girahimu_floor
This commit is contained in:
@@ -8,17 +8,17 @@ __dt__32sFState_c<19dAcOGirahimuFloor_c>Fv = .text:0x00000240; // type:function
|
||||
__dt__35sFStateFct_c<19dAcOGirahimuFloor_c>Fv = .text:0x000002A0; // type:function size:0x6C
|
||||
__dt__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000310; // type:function size:0xA0
|
||||
__dt__58sFStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c>Fv = .text:0x000003B0; // type:function size:0xA4
|
||||
fn_604_460 = .text:0x00000460; // type:function size:0x64
|
||||
AcOGirahimuFloor__initModels = .text:0x000004D0; // type:function size:0x28C
|
||||
AcOGirahimuFloor__init1 = .text:0x00000760; // type:function size:0x1D4
|
||||
__ct__Q23m3d11anmMatClr_cFv = .text:0x00000460; // type:function size:0x64
|
||||
createHeap__19dAcOGirahimuFloor_cFv = .text:0x000004D0; // type:function size:0x28C
|
||||
actorCreate__19dAcOGirahimuFloor_cFv = .text:0x00000760; // type:function size:0x1D4
|
||||
changeState__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000940; // type:function size:0x10
|
||||
AcOGirahimuFloor__init2 = .text:0x00000950; // type:function size:0x12C
|
||||
fn_604_A80 = .text:0x00000A80; // type:function size:0x8
|
||||
AcOGirahimuFloor__update = .text:0x00000A90; // type:function size:0x39C
|
||||
actorPostCreate__19dAcOGirahimuFloor_cFv = .text:0x00000950; // type:function size:0x12C
|
||||
doDelete__19dAcOGirahimuFloor_cFv = .text:0x00000A80; // type:function size:0x8
|
||||
actorExecute__19dAcOGirahimuFloor_cFv = .text:0x00000A90; // type:function size:0x39C
|
||||
getStateID__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>CFv = .text:0x00000E30; // type:function size:0x10
|
||||
executeState__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000E40; // type:function size:0x10
|
||||
cLib_calcTimer<u8> = .text:0x00000E50; // type:function size:0x1C
|
||||
AcOGirahimuFloor__draw = .text:0x00000E70; // type:function size:0x28
|
||||
calcTimer<Uc>__4sLibFPUc_Uc = .text:0x00000E50; // type:function size:0x1C
|
||||
draw__19dAcOGirahimuFloor_cFv = .text:0x00000E70; // type:function size:0x28
|
||||
initializeState_Wait__19dAcOGirahimuFloor_cFv = .text:0x00000EA0; // type:function size:0x60
|
||||
executeState_Wait__19dAcOGirahimuFloor_cFv = .text:0x00000F00; // type:function size:0x78
|
||||
finalizeState_Wait__19dAcOGirahimuFloor_cFv = .text:0x00000F80; // type:function size:0x4
|
||||
@@ -34,11 +34,11 @@ finalizeState_Broken__19dAcOGirahimuFloor_cFv = .text:0x000013A0; // type:functi
|
||||
initializeState_Move__19dAcOGirahimuFloor_cFv = .text:0x000013B0; // type:function size:0x4
|
||||
executeState_Move__19dAcOGirahimuFloor_cFv = .text:0x000013C0; // type:function size:0xA0
|
||||
finalizeState_Move__19dAcOGirahimuFloor_cFv = .text:0x00001460; // type:function size:0x4
|
||||
fn_604_1470 = .text:0x00001470; // type:function size:0x1A0
|
||||
AcOGirahimuFloor__checkNoOtherFloor = .text:0x00001610; // type:function size:0x28
|
||||
checksToSeeIfLinkIsInFinalBlow = .text:0x00001640; // type:function size:0xF0
|
||||
AcOGirahimuFloor__movePlatform = .text:0x00001730; // type:function size:0x54
|
||||
fn_604_1790 = .text:0x00001790; // type:function size:0x98
|
||||
isPlayerAndGhirahimOffFloor__19dAcOGirahimuFloor_cFv = .text:0x00001470; // type:function size:0x1A0
|
||||
isGenerateNoChild__19dAcOGirahimuFloor_cFv = .text:0x00001610; // type:function size:0x28
|
||||
isSuccessfulFinalBlow__19dAcOGirahimuFloor_cFv = .text:0x00001640; // type:function size:0xF0
|
||||
movePosition__19dAcOGirahimuFloor_cFv = .text:0x00001730; // type:function size:0x54
|
||||
doShatter__19dAcOGirahimuFloor_cFv = .text:0x00001790; // type:function size:0x98
|
||||
__dt__19dAcOGirahimuFloor_cFv = .text:0x00001830; // type:function size:0x128
|
||||
build__35sFStateFct_c<19dAcOGirahimuFloor_c>FRC12sStateIDIf_c = .text:0x00001960; // type:function size:0x60
|
||||
dispose__35sFStateFct_c<19dAcOGirahimuFloor_c>FRP10sStateIf_c = .text:0x000019C0; // type:function size:0xC
|
||||
@@ -72,14 +72,16 @@ lbl_604_data_10 = .data:0x00000010; // type:object size:0xA data:string
|
||||
lbl_604_data_20 = .data:0x00000020; // type:object size:0x10 data:string
|
||||
lbl_604_data_30 = .data:0x00000030; // type:object size:0x40
|
||||
lbl_604_data_70 = .data:0x00000070; // type:object size:0x21 data:string
|
||||
AcOGirahimuFloor__vtable = .data:0x00000098; // type:object size:0x80
|
||||
lbl_604_data_118 = .data:0x00000118; // type:object size:0x30
|
||||
lbl_604_data_148 = .data:0x00000148; // type:object size:0x30
|
||||
lbl_604_data_178 = .data:0x00000178; // type:object size:0x18
|
||||
lbl_604_data_190 = .data:0x00000190; // type:object size:0x184
|
||||
__vt__19dAcOGirahimuFloor_c = .data:0x00000098; // type:object size:0x80
|
||||
__vt__58sFStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c> = .data:0x00000118; // type:object size:0x30
|
||||
__vt__88sStateMgr_c<19dAcOGirahimuFloor_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c> = .data:0x00000148; // type:object size:0x30
|
||||
__vt__35sFStateFct_c<19dAcOGirahimuFloor_c> = .data:0x00000178; // type:object size:0x18
|
||||
__vt__32sFState_c<19dAcOGirahimuFloor_c> = .data:0x00000190; // type:object size:0x184
|
||||
lbl_604_data_314 = .data:0x00000314; // type:object size:0x34
|
||||
__global_destructor_chain = .bss:0x00000000; // type:object size:0x4 scope:global
|
||||
lbl_604_bss_8 = .bss:0x00000008; // type:object size:0x10 data:4byte
|
||||
AcOGirahimuFloor__StateID_Wait = .bss:0x00000018; // type:object size:0x40 data:4byte
|
||||
AcOGirahimuFloor__StateID_Return = .bss:0x00000058; // type:object size:0x40 data:4byte
|
||||
AcOGirahimuFloor__StateID_Generate = .bss:0x00000098; // type:object size:0xB0 data:4byte
|
||||
StateID_Wait__19dAcOGirahimuFloor_c = .bss:0x00000018; // type:object size:0x30 data:4byte
|
||||
StateID_Return__19dAcOGirahimuFloor_c = .bss:0x00000058; // type:object size:0x30 data:4byte
|
||||
StateID_Generate__19dAcOGirahimuFloor_c = .bss:0x00000098; // type:object size:0x30 data:4byte
|
||||
StateID_Broken__19dAcOGirahimuFloor_c = .bss:0x000000D8; // type:object size:0x30 data:4byte
|
||||
StateID_Move__19dAcOGirahimuFloor_c = .bss:0x00000118; // type:object size:0x30 data:4byte
|
||||
|
||||
+1
-1
@@ -2521,7 +2521,7 @@ config.libs = [
|
||||
Rel(NonMatching, "d_a_obj_fruit_tree", "REL/d/a/obj/d_a_obj_fruit_tree.cpp"),
|
||||
Rel(NonMatching, "d_a_obj_gear", "REL/d/a/obj/d_a_obj_gear.cpp"),
|
||||
Rel(
|
||||
NonMatching, "d_a_obj_girahimu_floor", "REL/d/a/obj/d_a_obj_girahimu_floor.cpp"
|
||||
Matching, "d_a_obj_girahimu_floor", "REL/d/a/obj/d_a_obj_girahimu_floor.cpp"
|
||||
),
|
||||
Rel(
|
||||
NonMatching, "d_a_obj_girahimu_knife", "REL/d/a/obj/d_a_obj_girahimu_knife.cpp"
|
||||
|
||||
@@ -1,22 +1,85 @@
|
||||
#ifndef D_A_OBJ_GIRAHIMU_FLOOR_H
|
||||
#define D_A_OBJ_GIRAHIMU_FLOOR_H
|
||||
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "m/m3d/m_anmmatclr.h"
|
||||
#include "m/m3d/m_anmtexsrt.h"
|
||||
#include "m/m3d/m_smdl.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "s/s_State.hpp"
|
||||
|
||||
class dAcGirahimu3First_c;
|
||||
class dAcOGirahimuFloor_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcOGirahimuFloor_c() : mStateMgr(*this) {}
|
||||
virtual ~dAcOGirahimuFloor_c() {}
|
||||
|
||||
enum Type_e {
|
||||
TYPE_Normal,
|
||||
TYPE_Generate,
|
||||
TYPE_Max
|
||||
};
|
||||
|
||||
virtual int doDelete() override;
|
||||
virtual int draw() override;
|
||||
virtual bool createHeap() override;
|
||||
virtual int actorCreate() override;
|
||||
virtual int actorPostCreate() override;
|
||||
virtual int actorExecute() override;
|
||||
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Wait);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Return);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Generate);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Broken);
|
||||
STATE_FUNC_DECLARE(dAcOGirahimuFloor_c, Move);
|
||||
|
||||
STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcOGirahimuFloor_c);
|
||||
STATE_MGR_DEFINE_UTIL_EXECUTESTATE(dAcOGirahimuFloor_c);
|
||||
STATE_MGR_DEFINE_UTIL_ISSTATE(dAcOGirahimuFloor_c);
|
||||
STATE_MGR_DEFINE_UTIL_GETSTATEID(dAcOGirahimuFloor_c);
|
||||
|
||||
// Used to request deletion upon both Player and Boss off the platform
|
||||
bool isPlayerAndGhirahimOffFloor();
|
||||
|
||||
// If it is the generate type and there is no linked child
|
||||
bool isGenerateNoChild();
|
||||
|
||||
// Checks if Link is in a final blow state and has connected
|
||||
// with something other than the platform (like ghirahim)
|
||||
bool isSuccessfulFinalBlow();
|
||||
|
||||
// Moves the position to the target destinaton
|
||||
void movePosition();
|
||||
|
||||
// Breaks the platform, releases mBg and requests deletion
|
||||
void doShatter();
|
||||
|
||||
private:
|
||||
/* 0x??? */ STATE_MGR_DECLARE(dAcOGirahimuFloor_c);
|
||||
/* 0x330 */ nw4r::g3d::ResFile mRes;
|
||||
/* 0x334 */ m3d::smdl_c mMdl;
|
||||
/* 0x350 */ dBgW mBg[3];
|
||||
/* 0x980 */ STATE_MGR_DECLARE(dAcOGirahimuFloor_c);
|
||||
/* 0x9BC */ m3d::anmTexSrt_c mAnmTexSrt;
|
||||
/* 0x9E8 */ m3d::anmMatClr_c mAnmMatClr[3];
|
||||
/* 0xA6C */ dAcRef_c<dAcGirahimu3First_c> mGhirahimRef;
|
||||
/* 0xA78 */ dAcRef_c<dAcOGirahimuFloor_c> mChild;
|
||||
/* 0xA64 */ mVec3_c mHomePos;
|
||||
/* 0xA90 */ mVec3_c mTargetPos;
|
||||
/* 0xA9C */ mVec3_c mScaleBg0;
|
||||
/* 0xAA8 */ mVec3_c mScaleBg1;
|
||||
/* 0xAB4 */ f32 mMoveRate;
|
||||
/* 0xAB4 */ f32 mGndHeight;
|
||||
/* 0xABC */ u8 mType;
|
||||
/* 0xABD */ u8 field_0xABD;
|
||||
/* 0xABE */ u8 field_0xABE;
|
||||
/* 0xAC0 */ s32 field_0xAC0;
|
||||
/* 0xAC4 */ bool mbIsHome;
|
||||
/* 0xAC5 */ bool mbMediumSize;
|
||||
/* 0xAC6 */ bool mbRequestShatter;
|
||||
/* 0xAC7 */ bool mbRequestMove;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,28 @@
|
||||
#include "d/a/obj/d_a_obj_girahimu_floor.h"
|
||||
|
||||
#include "c/c_lib.h"
|
||||
#include "common.h"
|
||||
#include "d/a/b/d_a_b_girahimu3_first.h"
|
||||
#include "d/a/d_a_base.h"
|
||||
#include "d/a/d_a_player.h"
|
||||
#include "d/a/obj/d_a_obj_base.h"
|
||||
#include "d/col/bg/d_bg_plc.h"
|
||||
#include "d/col/bg/d_bg_s.h"
|
||||
#include "d/col/bg/d_bg_s_gnd_chk.h"
|
||||
#include "d/col/bg/d_bg_w.h"
|
||||
#include "d/snd/d_snd_wzsound.h"
|
||||
#include "f/f_base.h"
|
||||
#include "f/f_manager.h"
|
||||
#include "f/f_profile_name.h"
|
||||
#include "m/m3d/m_fanm.h"
|
||||
#include "m/m_vec.h"
|
||||
#include "nw4r/g3d/res/g3d_resanmclr.h"
|
||||
#include "nw4r/g3d/res/g3d_resanmtexsrt.h"
|
||||
#include "nw4r/g3d/res/g3d_resfile.h"
|
||||
#include "nw4r/g3d/res/g3d_resmdl.h"
|
||||
#include "s/s_Math.h"
|
||||
#include "toBeSorted/d_emitter.h"
|
||||
|
||||
SPECIAL_ACTOR_PROFILE(OBJ_GIRAHIMU_FLOOR, dAcOGirahimuFloor_c, fProfile::OBJ_GIRAHIMU_FLOOR, 0x25F, 0, 2);
|
||||
|
||||
STATE_DEFINE(dAcOGirahimuFloor_c, Wait);
|
||||
@@ -8,18 +31,363 @@ STATE_DEFINE(dAcOGirahimuFloor_c, Generate);
|
||||
STATE_DEFINE(dAcOGirahimuFloor_c, Broken);
|
||||
STATE_DEFINE(dAcOGirahimuFloor_c, Move);
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Wait() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Wait() {}
|
||||
static const char *sResAnmNames[3] = {
|
||||
"F403Floor",
|
||||
"F403FloorSpread",
|
||||
"F403FloorSpread2",
|
||||
};
|
||||
|
||||
struct dAcOGirahimuFloor_HIO_c {
|
||||
const f32 field_0x00;
|
||||
const f32 field_0x04;
|
||||
const f32 field_0x08;
|
||||
static const dAcOGirahimuFloor_HIO_c sHio;
|
||||
};
|
||||
const dAcOGirahimuFloor_HIO_c dAcOGirahimuFloor_HIO_c::sHio = {
|
||||
1.0f,
|
||||
10.0f,
|
||||
0.4f,
|
||||
};
|
||||
|
||||
bool dAcOGirahimuFloor_c::createHeap() {
|
||||
mRes = nw4r::g3d::ResFile(getOarcFile("F403Floor", "g3d/model.brres"));
|
||||
nw4r::g3d::ResMdl resMdl = mRes.GetResMdl("F403Floor");
|
||||
TRY_CREATE(mMdl.create(resMdl, &mAllocator, 0x324));
|
||||
|
||||
nw4r::g3d::ResAnmTexSrt resTexSrt = mRes.GetResAnmTexSrt(sResAnmNames[0]);
|
||||
TRY_CREATE(mAnmTexSrt.create(resMdl, resTexSrt, &mAllocator, nullptr, 1));
|
||||
mMdl.setAnm(mAnmTexSrt);
|
||||
mAnmTexSrt.setRate(1.0f, 0);
|
||||
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
nw4r::g3d::ResAnmClr resAnmClr = mRes.GetResAnmClr(sResAnmNames[i]);
|
||||
TRY_CREATE(mAnmMatClr[i].create(resMdl, resAnmClr, &mAllocator, nullptr, 1));
|
||||
|
||||
mAnmMatClr[i].setAnm(mMdl, resAnmClr, 0, m3d::PLAY_MODE_4);
|
||||
mAnmMatClr[i].setRate(0.0f, 0);
|
||||
mAnmMatClr[i].setFrame(mAnmTexSrt.getFrameMax(i) - 1.0f, 0);
|
||||
mAnmMatClr[i].setPlayMode(m3d::PLAY_MODE_1, 0);
|
||||
}
|
||||
|
||||
cBgD_t *dzb = static_cast<cBgD_t *>(getOarcDZB("F403Floor", "F403Floor"));
|
||||
PLC *plc = static_cast<PLC *>(getOarcPLC("F403Floor", "F403Floor"));
|
||||
updateMatrix();
|
||||
|
||||
mScaleBg0.set(0.5f, 0.5f, 0.5f);
|
||||
mScaleBg1.set(0.735f, 0.735f, 0.735f);
|
||||
TRY_CREATE(!mBg[0].Set(dzb, plc, 1, &mWorldMtx, &mScaleBg0));
|
||||
TRY_CREATE(!mBg[1].Set(dzb, plc, 1, &mWorldMtx, &mScaleBg1));
|
||||
TRY_CREATE(!mBg[2].Set(dzb, plc, 1, &mWorldMtx, &mScale));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::actorCreate() {
|
||||
mType = getFromParams(0, 0x3);
|
||||
if (mType >= TYPE_Max) {
|
||||
mType = TYPE_Normal;
|
||||
}
|
||||
|
||||
CREATE_ALLOCATOR(dAcOGirahimuFloor_c);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].SetCrrFunc(dBgS_MoveBGProc_Typical);
|
||||
}
|
||||
dBgS::GetInstance()->Regist(&mBg[1], this);
|
||||
|
||||
mAnmMatClr[2].setFrame(0.0f, 0);
|
||||
|
||||
mAcceleration = 0.0f;
|
||||
mMaxSpeed = -40.0f;
|
||||
mMdl.setPriorityDraw(0x22, 9);
|
||||
if (mType == TYPE_Generate) {
|
||||
mMdl.setAnm(mAnmMatClr[0]);
|
||||
changeState(StateID_Generate);
|
||||
} else {
|
||||
mMdl.setAnm(mAnmMatClr[1]);
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
|
||||
mBoundingBox.Set(mVec3_c(-2900.0f, -120.0f, -2900.0f), mVec3_c(3100.0f, 100.0f, 2900.0f));
|
||||
return true;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::actorPostCreate() {
|
||||
fBase_c *pActor = nullptr;
|
||||
dAcGirahimu3First_c *pGirahim;
|
||||
while (
|
||||
(pGirahim =
|
||||
static_cast<dAcGirahimu3First_c *>(fManager_c::searchBaseByProfName(fProfile::B_GIRAHIMU3_FIRST, pActor)),
|
||||
pActor = pGirahim)
|
||||
) {
|
||||
if (mPosition.squareDistanceToXZ(pGirahim->getPosition()) < 9000000.0f) {
|
||||
mGhirahimRef.link(pGirahim);
|
||||
}
|
||||
}
|
||||
|
||||
if (mType == TYPE_Generate) {
|
||||
while ((pActor = fManager_c::searchBaseByProfName(fProfile::OBJ_GIRAHIMU_FLOOR, pActor))) {
|
||||
dAcOGirahimuFloor_c *pChild = static_cast<dAcOGirahimuFloor_c *>(pActor);
|
||||
if (pChild != this) {
|
||||
mChild.link(pChild);
|
||||
mHomePos = pChild->mHomePos;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
mHomePos = mPosition;
|
||||
}
|
||||
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::doDelete() {
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::actorExecute() {
|
||||
if (!isState(StateID_Broken)) {
|
||||
if (isSuccessfulFinalBlow()) {
|
||||
changeState(StateID_Broken);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (0 == sLib::calcTimer(&field_0xABE)) {
|
||||
field_0xABE = 15;
|
||||
if (isPlayerAndGhirahimOffFloor()) {
|
||||
changeState(StateID_Broken);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
}
|
||||
|
||||
if (mbRequestShatter) {
|
||||
doShatter();
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
if (mbMediumSize) {
|
||||
mAnmMatClr[1].setRate(1.0f, 0);
|
||||
dBgS::GetInstance()->Regist(&mBg[1], this);
|
||||
dBgS::GetInstance()->Release(&mBg[0]);
|
||||
|
||||
if (field_0xAC0 == 1 && mAnmMatClr[1].getFrame(0) == mAnmMatClr[1].getFrameMax(0) - 1.0f) {
|
||||
mMdl.setAnm(mAnmMatClr[2]);
|
||||
mAnmMatClr[2].setRate(1.0f, 0);
|
||||
|
||||
dBgS::GetInstance()->Regist(&mBg[2], this);
|
||||
dBgS::GetInstance()->Release(&mBg[1]);
|
||||
} else {
|
||||
mMdl.setAnm(mAnmMatClr[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (!isState(StateID_Move) && mbRequestMove) {
|
||||
changeState(StateID_Move);
|
||||
movePosition();
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
}
|
||||
|
||||
executeState();
|
||||
mAnmTexSrt.play();
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mAnmMatClr[i].play();
|
||||
}
|
||||
if (!isState(StateID_Wait)) {
|
||||
updateMatrix();
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
} else {
|
||||
updateMatrix();
|
||||
mMdl.setScale(mScale);
|
||||
mMdl.setLocalMtx(mWorldMtx);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mBg[i].Move();
|
||||
}
|
||||
}
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
int dAcOGirahimuFloor_c::draw() {
|
||||
drawModelType1(&mMdl);
|
||||
return SUCCEEDED;
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Wait() {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mAnmMatClr[i].setRate(0.0f, 0);
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::executeState_Wait() {
|
||||
if (!mbIsHome && 0 == sLib::calcTimer(&field_0xABD)) {
|
||||
field_0xABD = 15;
|
||||
if (isGenerateNoChild()) {
|
||||
changeState(StateID_Return);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Wait() {}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Return() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Return() {}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Return() {}
|
||||
void dAcOGirahimuFloor_c::initializeState_Generate() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Generate() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Return() {
|
||||
if (!mbRequestMove && cLib::chasePos(mPosition, mHomePos, 10.0f)) {
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Return() {
|
||||
mbIsHome = true;
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Generate() {
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
mAnmMatClr[i].setFrame(0.0f, 0);
|
||||
if (i != 0) {
|
||||
mAnmMatClr[i].setRate(0.0f, 0);
|
||||
}
|
||||
}
|
||||
mAnmMatClr[0].setRate(1.0f, 0);
|
||||
mMdl.setAnm(mAnmMatClr[0]);
|
||||
}
|
||||
void dAcOGirahimuFloor_c::executeState_Generate() {
|
||||
if (mAnmMatClr[0].getFrame(0) == mAnmMatClr[0].getFrameMax(0) - 1.0f) {
|
||||
mAnmMatClr[0].setRate(0.0f, 0);
|
||||
}
|
||||
if (!mbMediumSize) {
|
||||
dBgS::GetInstance()->Regist(&mBg[0], this);
|
||||
dBgS::GetInstance()->Release(&mBg[1]);
|
||||
dBgS::GetInstance()->Release(&mBg[2]);
|
||||
}
|
||||
if (mAnmMatClr[2].isStop(0)) {
|
||||
if (mAnmMatClr[2].getFrame(0) == mAnmMatClr[2].getFrameMax(0) - 1.0f) {
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Generate() {}
|
||||
void dAcOGirahimuFloor_c::initializeState_Broken() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Broken() {}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Broken() {
|
||||
mAnmMatClr[2].setRate(-1.0f, 0);
|
||||
mScaleBg0.set(0.0f, 0.0f, 0.0f);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
dBgS::GetInstance()->Release(&mBg[i]);
|
||||
}
|
||||
mMdl.setAnm(mAnmMatClr[2]);
|
||||
}
|
||||
void dAcOGirahimuFloor_c::executeState_Broken() {
|
||||
if (mAnmMatClr[2].getFrame(0) == 0.0f) {
|
||||
mAnmMatClr[1].setRate(-1.0f, 0);
|
||||
mAnmMatClr[2].setRate(0.0f, 0);
|
||||
if (mAnmMatClr[1].getFrame(0) == 0.0f) {
|
||||
mAnmMatClr[0].setRate(-1.0f, 0);
|
||||
mAnmMatClr[1].setRate(0.0f, 0);
|
||||
mMdl.setAnm(mAnmMatClr[0]);
|
||||
} else {
|
||||
mMdl.setAnm(mAnmMatClr[1]);
|
||||
}
|
||||
}
|
||||
|
||||
if (mAnmMatClr[0].getFrame(0) == 0.0f) {
|
||||
deleteRequest();
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Broken() {}
|
||||
|
||||
void dAcOGirahimuFloor_c::initializeState_Move() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Move() {}
|
||||
void dAcOGirahimuFloor_c::executeState_Move() {
|
||||
movePosition();
|
||||
|
||||
if (dBgS_ObjGndChk::CheckPos(mPosition)) {
|
||||
mGndHeight = dBgS_ObjGndChk::GetGroundHeight();
|
||||
if (mPosition.y <= mGndHeight) {
|
||||
doShatter();
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
mPosition.y = mGndHeight;
|
||||
doShatter();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mbRequestMove) {
|
||||
changeState(StateID_Wait);
|
||||
}
|
||||
}
|
||||
void dAcOGirahimuFloor_c::finalizeState_Move() {}
|
||||
|
||||
bool dAcOGirahimuFloor_c::isPlayerAndGhirahimOffFloor() {
|
||||
const dAcObjBase_c *pObj = nullptr;
|
||||
|
||||
if (dBgS_ObjGndChk::CheckPos(dAcPy_c::GetLink()->mPosition + mVec3_c::Ey * 50.0f)) {
|
||||
pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
|
||||
}
|
||||
if (pObj == this || !(pObj != nullptr && pObj->mProfileName == fProfile::OBJ_GIRAHIMU_FLOOR)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pObj = nullptr;
|
||||
bool bGetObj = mGhirahimRef.isLinked();
|
||||
if (bGetObj) {
|
||||
bGetObj = dBgS_ObjGndChk::CheckPos(mGhirahimRef.get()->mPosition + mVec3_c::Ey * 50.0f);
|
||||
}
|
||||
if (bGetObj) {
|
||||
pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
|
||||
}
|
||||
|
||||
if (pObj == this || !(pObj != nullptr && pObj->mProfileName == fProfile::OBJ_GIRAHIMU_FLOOR)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool dAcOGirahimuFloor_c::isGenerateNoChild() {
|
||||
return mType == TYPE_Generate && !mChild.isLinked();
|
||||
}
|
||||
|
||||
bool dAcOGirahimuFloor_c::isSuccessfulFinalBlow() {
|
||||
if (dAcPy_c::GetLink()->checkCurrentAction(96 /* FINAL_BLOW */)) {
|
||||
const dAcObjBase_c *pObj = nullptr;
|
||||
bool bGetObj = mGhirahimRef.isLinked();
|
||||
if (bGetObj) {
|
||||
bGetObj = dBgS_ObjGndChk::CheckPos(mGhirahimRef.get()->mPosition + mVec3_c::Ey * 50.0f);
|
||||
}
|
||||
if (bGetObj) {
|
||||
pObj = dBgS::GetInstance()->GetActorPointer(dBgS_ObjGndChk::GetInstance());
|
||||
}
|
||||
|
||||
if (pObj != this) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::movePosition() {
|
||||
if (mbRequestMove && cLib::chasePos(mPosition, mTargetPos, mMoveRate)) {
|
||||
mbRequestMove = false;
|
||||
}
|
||||
}
|
||||
|
||||
void dAcOGirahimuFloor_c::doShatter() {
|
||||
dJEffManager_c::spawnEffect(PARTICLE_RESOURCE_ID_MAPPING_876_, mPosition, nullptr, nullptr, nullptr, nullptr, 0, 0);
|
||||
startSound(SE_BGh3_GIRAHIM_STAGE_BREAK);
|
||||
for (int i = 0; i < 3; ++i) {
|
||||
dBgS::GetInstance()->Release(&mBg[i]);
|
||||
}
|
||||
deleteRequest();
|
||||
}
|
||||
|
||||
void something() {
|
||||
static const f32 f = 9000000.0f;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user