mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 15:20:58 -04:00
93 lines
2.6 KiB
C++
93 lines
2.6 KiB
C++
#ifndef D_A_OBJ_SWITCH_H
|
|
#define D_A_OBJ_SWITCH_H
|
|
|
|
#include "d/a/obj/d_a_obj_base.h"
|
|
#include "d/col/bg/d_bg_w.h"
|
|
#include "d/flag/sceneflag_manager.h"
|
|
#include "m/m3d/m_mdl.h"
|
|
#include "s/s_State.hpp"
|
|
#include "toBeSorted/time_area_mgr.h"
|
|
|
|
// OBJ_VSD?
|
|
class dAcOScatterSand_tmp : public dAcObjBase_c {
|
|
public:
|
|
/* 0x330 */ u8 field_0x330[0x6DC - 0x330];
|
|
/* 0x6DC */ u16 field_0x6DC;
|
|
/* 0x6DE */ u8 field_0x6DE[0x6E4 - 0x6DE];
|
|
/* 0x6E4 */ bool field_0x6E4;
|
|
|
|
inline f32 getSomeScale() {
|
|
return mScale.y * 41.65f / 100.0f;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* A callback implementation that controls the button node in the switch model.
|
|
*/
|
|
class dAcOswMdlCallback_c : public m3d::callback_c {
|
|
public:
|
|
dAcOswMdlCallback_c() {}
|
|
virtual ~dAcOswMdlCallback_c() {}
|
|
virtual void timingB(u32, nw4r::g3d::WorldMtxManip *, nw4r::g3d::ResMdl) override;
|
|
|
|
/* 0x04 */ f32 mElevation;
|
|
/* 0x08 */ u32 mNodeId;
|
|
|
|
void init(u32 nodeId) {
|
|
mNodeId = nodeId;
|
|
mElevation = 0.0f;
|
|
}
|
|
};
|
|
|
|
class dAcOsw_c : public dAcObjBase_c {
|
|
public:
|
|
dAcOsw_c() : mStateMgr(*this, sStateID::null), field_0x5A0(0.0f) {}
|
|
virtual ~dAcOsw_c() {}
|
|
|
|
virtual int actorCreate() override;
|
|
virtual int actorPostCreate() override;
|
|
|
|
virtual bool createHeap() override;
|
|
virtual int doDelete() override;
|
|
virtual int actorExecute() override;
|
|
virtual int actorExecuteInEvent() override;
|
|
virtual int draw() override;
|
|
|
|
bool someInteractCheck(bool);
|
|
|
|
STATE_FUNC_DECLARE(dAcOsw_c, OnWait);
|
|
STATE_FUNC_DECLARE(dAcOsw_c, On);
|
|
STATE_FUNC_DECLARE(dAcOsw_c, OffWait);
|
|
STATE_FUNC_DECLARE(dAcOsw_c, Off);
|
|
STATE_FUNC_DECLARE(dAcOsw_c, None);
|
|
|
|
static void rideCallback(dBgW *unknown, dAcObjBase_c *actor, dAcObjBase_c *interactor);
|
|
|
|
bool checkOnFlag() {
|
|
return mOnSceneFlag < 0xFF && !SceneflagManager::sInstance->checkBoolFlag(roomid, mOnSceneFlag);
|
|
}
|
|
|
|
private:
|
|
/* 0x330 */ m3d::mdl_c mModel;
|
|
/* 0x354 */ dBgW mCollision;
|
|
/* 0x564 */ STATE_MGR_DECLARE(dAcOsw_c);
|
|
/* 0x5A0 */ TimeAreaStruct field_0x5A0;
|
|
/* 0x5AC */ dAcRef_c<dAcOScatterSand_tmp> mObjRef;
|
|
/* 0x5B8 */ mMtx_c field_0x5B8;
|
|
/* 0x5E8 */ f32 field_0x5E8;
|
|
/* 0x5EC */ u16 field_0x5EC;
|
|
/* 0x5EE */ u8 mOffSceneFlag;
|
|
/* 0x5EF */ u8 mOnSceneFlag;
|
|
/* 0x5F0 */ u8 mSwitchType;
|
|
/* 0x5F1 */ u8 field_0x5F1;
|
|
/* 0x5F2 */ u8 field_0x5F2;
|
|
/* 0x5F3 */ u8 field_0x5F3;
|
|
/* 0x5F4 */ u8 mActivatedByPlayer;
|
|
/* 0x5F5 */ bool mCanBeSeen;
|
|
/* 0x5F6 */ bool mShown;
|
|
/* 0x5F7 */ bool mHidden;
|
|
/* 0x5F8 */ dAcOswMdlCallback_c mButtonCtrl;
|
|
};
|
|
|
|
#endif
|