Files
ss/include/d/a/d_a_salbage_obj.h
T
robojumper f41e566a22 Cleanup
2025-09-15 22:20:57 +02:00

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