mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 15:20:58 -04:00
185 lines
5.4 KiB
C++
185 lines
5.4 KiB
C++
#ifndef D_A_SALBAGE_OBJ_H
|
|
#define D_A_SALBAGE_OBJ_H
|
|
|
|
#include "common.h"
|
|
#include "d/a/d_a_salbage_if.h"
|
|
#include "d/a/obj/d_a_obj_base.h"
|
|
#include "d/col/bg/d_bg_s_acch.h"
|
|
#include "d/col/cc/d_cc_d.h"
|
|
#include "d/d_shadow.h"
|
|
#include "m/m3d/m_smdl.h"
|
|
#include "m/m_mtx.h"
|
|
#include "m/m_quat.h"
|
|
#include "m/m_vec.h"
|
|
#include "s/s_State.hpp"
|
|
#include "toBeSorted/dowsing_target.h"
|
|
|
|
class dAcSalbageObj_c;
|
|
|
|
enum SalvageObj_e {
|
|
SALVAGE_OBJ_PROPERA = 0,
|
|
SALVAGE_OBJ_ROULETTE = 1,
|
|
SALVAGE_OBJ_DIVINER_CRYSTAL = 2,
|
|
SALVAGE_OBJ_WATER_JAR = 5,
|
|
SALVAGE_OBJ_POT = 6,
|
|
};
|
|
|
|
class dSalvageIfObj_c : public dSalvageIf_c {
|
|
public:
|
|
dSalvageIfObj_c(dAcSalbageObj_c *obj, s32 id) : mpObj(obj), mCarried(false), mHidden(false), mSalvageObjId(id) {}
|
|
|
|
/* vt 0x08 */ virtual ~dSalvageIfObj_c() {}
|
|
/* vt 0x0C */ virtual void setCarried() override {
|
|
mCarried = true;
|
|
}
|
|
/* vt 0x10 */ virtual void setNotCarried() override {
|
|
mCarried = false;
|
|
}
|
|
/* vt 0x14 */ virtual bool isCarried() const override {
|
|
return mCarried;
|
|
}
|
|
/* vt 0x18 */ virtual void setHidden() override {
|
|
mHidden = true;
|
|
}
|
|
/* vt 0x1C */ virtual void setNotHidden() override {
|
|
mHidden = false;
|
|
}
|
|
/* vt 0x20 */ virtual bool isHidden() const override {
|
|
return mHidden;
|
|
}
|
|
/* vt 0x24 */ virtual s32 getSalvageObjId() const override {
|
|
return mSalvageObjId;
|
|
}
|
|
/* vt 0x28 */ virtual void doDemoThrow() override;
|
|
|
|
private:
|
|
/* 0x04 */ dAcSalbageObj_c *mpObj;
|
|
/* 0x08 */ bool mCarried;
|
|
/* 0x09 */ bool mHidden;
|
|
/* 0x0C */ s32 mSalvageObjId;
|
|
};
|
|
|
|
/**
|
|
* Actor - Object - Salvage
|
|
*
|
|
* Base class for objects that can be carried by
|
|
* the Salvage Robot NPC, AKA Scrapper.
|
|
*/
|
|
class dAcSalbageObj_c : public dAcObjBase_c {
|
|
friend class dSalvageIfObj_c;
|
|
|
|
enum Behavior_e {
|
|
/// The object is stationary and disappears when picked up
|
|
BEHAVIOR_STATIONARY,
|
|
/// The object is being carried and disappears when dropped
|
|
BEHAVIOR_CARRY,
|
|
/// The object is being carried in the Sky by the salvage robot
|
|
BEHAVIOR_FLY,
|
|
};
|
|
|
|
public:
|
|
dAcSalbageObj_c(m3d::smdl_c *mdl, s32 salvageObjId)
|
|
: field_0x330(0),
|
|
mpMdl(mdl),
|
|
mStateMgr(*this),
|
|
mSalvageIf(this, salvageObjId),
|
|
mDowsingTarget(this, DowsingTarget::SLOT_NONE),
|
|
mIsDemoState(false),
|
|
mpNextStateId(nullptr) {}
|
|
virtual ~dAcSalbageObj_c() {}
|
|
|
|
virtual int preExecute() override;
|
|
virtual int draw() override;
|
|
virtual int preDraw() override;
|
|
|
|
virtual int actorExecute() override;
|
|
virtual void doInteraction(s32) override;
|
|
|
|
/* vt 0x80 */ virtual bool vt_0x80() const {
|
|
return false;
|
|
}
|
|
|
|
/* vt 0x84-0x8C */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Wait);
|
|
/* vt 0x90-0x98 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Carried);
|
|
/* vt 0x9C-0xA4 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Demo);
|
|
/* vt 0xA8-0xB0 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, DemoThrow);
|
|
/* vt 0xB4-0xBC */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, Fly);
|
|
/* vt 0xC0-0xC8 */ STATE_VIRTUAL_FUNC_DECLARE(dAcSalbageObj_c, After);
|
|
STATE_FUNC_DECLARE(dAcSalbageObj_c, Kill);
|
|
|
|
protected:
|
|
bool shouldBeActiveDowsingTarget() const;
|
|
void initSalbageObj();
|
|
void loadBehaviorFromParams();
|
|
void calcMtxFromSalbageNpc(mMtx_c &ret);
|
|
void addAttentionTargetIfNeeded();
|
|
void addAttentionTarget();
|
|
|
|
void initCcAndBg();
|
|
|
|
void executeInternal();
|
|
void updateCc();
|
|
void updateBgAcchCir();
|
|
void updateMdl();
|
|
|
|
/* vt 0xCC */ virtual mMtx_c calcWorldMtx();
|
|
/* vt 0xD0 */ virtual void vt_0xD0() {}
|
|
|
|
/* vt 0xD4 */ virtual bool isInStateWait() const {
|
|
return mStateMgr.isState(StateID_Wait);
|
|
}
|
|
/* vt 0xD8 */ virtual bool isInStateWaitOrDemoThrow() const {
|
|
return mStateMgr.isState(StateID_Wait) || mStateMgr.isState(StateID_DemoThrow);
|
|
}
|
|
/* vt 0xDC */ virtual DowsingTarget::DowsingSlot getDowsingSlot() const {
|
|
return DowsingTarget::SLOT_QUEST;
|
|
}
|
|
/* vt 0xE0 */ virtual f32 getCcRadius() const {
|
|
return 0.0f;
|
|
}
|
|
/* vt 0xE4 */ virtual f32 getCcHeight() const {
|
|
return 0.0f;
|
|
}
|
|
/* vt 0xE8 */ virtual f32 getBgAcchCirRadius() const {
|
|
return 0.0f;
|
|
}
|
|
/* vt 0xEC */ virtual f32 getBgAcchCirHeight() const {
|
|
return 0.0f;
|
|
}
|
|
/* vt 0xF0 */ virtual f32 getPoscopy2YOffset() const {
|
|
return 0.0f;
|
|
}
|
|
/* vt 0xF4 */ virtual f32 getPoscopy3YOffset() const {
|
|
return 0.0f;
|
|
}
|
|
/* vt 0xF8 */ virtual f32 getDowsingUnusedF32() const {
|
|
return 1500.0f;
|
|
}
|
|
/* vt 0xFC */ virtual f32 getDowsingTargetYOffset() const {
|
|
return 50.0f;
|
|
}
|
|
|
|
/* 0x330 */ UNKWORD field_0x330;
|
|
|
|
/* 0x334 */ m3d::smdl_c *mpMdl;
|
|
/* 0x338 */ dShadowCircle_c mShadow;
|
|
/* 0x340 */ mQuat_c mShadowRot;
|
|
/* 0x350 */ dBgS_AcchCir mBgAcchCir;
|
|
/* 0x3AC */ dBgS_ObjAcch mBgObjAcch;
|
|
/* 0x75C */ dCcD_Cyl mCcCyl;
|
|
/* 0x8AC */ STATE_MGR_DECLARE(dAcSalbageObj_c);
|
|
/* 0x8E8 */ s32 mBehavior;
|
|
/* 0x8EC */ bool mIsDemoState;
|
|
/* 0x8F0 */ dSalvageIfObj_c mSalvageIf;
|
|
/* 0x900 */ f32 field_0x900;
|
|
/* 0x904 */ s16 field_0x904;
|
|
/* 0x908 */ mMtx_c mWorldSRMtx;
|
|
/* 0x938 */ f32 field_0x938;
|
|
/* 0x93C */ DowsingTarget mDowsingTarget;
|
|
/* 0x95C */ mVec3_c field_0x95C;
|
|
/* 0x968 */ bool mIsDowsingRegistered;
|
|
/* 0x96C */ const sStateID_c *mpNextStateId;
|
|
};
|
|
|
|
#endif
|