mirror of
https://github.com/zeldaret/ss
synced 2026-06-04 02:46:25 -04:00
Fix mAng3_c copy assignment, clean up list node templates
This commit is contained in:
@@ -8,8 +8,8 @@ __dt__27sFState_c<14dAcTWoodArea_c>Fv = .text:0x000001C0; // type:function size:
|
||||
__dt__30sFStateFct_c<14dAcTWoodArea_c>Fv = .text:0x00000220; // type:function size:0x6C
|
||||
__dt__83sStateMgr_c<14dAcTWoodArea_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>Fv = .text:0x00000290; // type:function size:0xA0
|
||||
__dt__53sFStateMgr_c<14dAcTWoodArea_c,20sStateMethodUsr_FI_c>Fv = .text:0x00000330; // type:function size:0xA4
|
||||
__ct__14fLiNdBa_Wood_cFv = .text:0x000003E0; // type:function size:0x14
|
||||
__dt__14fLiNdBa_Wood_cFv = .text:0x00000400; // type:function size:0x58
|
||||
__ct__24dAcRef_c<12dAcObjBase_c>Fv = .text:0x000003E0; // type:function size:0x14
|
||||
__dt__24dAcRef_c<12dAcObjBase_c>Fv = .text:0x00000400; // type:function size:0x58
|
||||
actorCreate__14dAcTWoodArea_cFv = .text:0x00000460; // type:function size:0x9C
|
||||
changeState__83sStateMgr_c<14dAcTWoodArea_c,20sStateMethodUsr_FI_c,12sFStateFct_c,13sStateIDChk_c>FRC12sStateIDIf_c = .text:0x00000500; // type:function size:0x10
|
||||
actorPostCreate__14dAcTWoodArea_cFv = .text:0x00000510; // type:function size:0x64
|
||||
|
||||
@@ -14,8 +14,8 @@ checkAlg3__10dTgSndAr_cFRC7mVec3_c = .text:0x00000540; // type:function size:0x1
|
||||
__dt__10dTgSndAr_cFv = .text:0x00000690; // type:function size:0x70
|
||||
_ctors = .ctors:0x00000000; // type:label scope:global
|
||||
_dtors = .dtors:0x00000000; // type:label scope:global
|
||||
lbl_497_rodata_0 = .rodata:0x00000000; // type:object size:0x18 data:float
|
||||
lbl_497_rodata_18 = .rodata:0x00000018; // type:object size:0x10 data:float
|
||||
lbl_497_rodata_28 = .rodata:0x00000028; // type:object size:0x4 data:float
|
||||
lbl_497_rodata_0 = .rodata:0x00000000; // type:object size:0x18 scope:local data:float
|
||||
lbl_497_rodata_18 = .rodata:0x00000018; // type:object size:0x10 scope:local data:float
|
||||
lbl_497_rodata_28 = .rodata:0x00000028; // type:object size:0x4 scope:local data:float
|
||||
g_profile_TAG_SOUND_AREA = .data:0x00000000; // type:object size:0x10
|
||||
__vt__10dTgSndAr_c = .data:0x00000010; // type:object size:0x74
|
||||
|
||||
@@ -1063,7 +1063,7 @@ forEveryActor__9dAcBase_cFPFP9dAcBase_cP9dAcBase_c_PvP9dAcBase_c = .text:0x8002D
|
||||
getXZAngleToPlayer__9dAcBase_cFPs = .text:0x8002D190; // type:function size:0x3C
|
||||
getDistanceToActor__9dAcBase_cFP9dAcBase_cfPf = .text:0x8002D1D0; // type:function size:0xB8
|
||||
getDistanceAndAngleToActor__9dAcBase_cFP9dAcBase_cfssPfPsPs = .text:0x8002D290; // type:function size:0x148
|
||||
isWithinPlayerRadius__9dAcBase_cFf = .text:0x8002D3E0; // type:function size:0x5C
|
||||
isWithinPlayerRadius__9dAcBase_cCFf = .text:0x8002D3E0; // type:function size:0x5C
|
||||
getDistanceAndAngleToPlayer__9dAcBase_cFfssPfPsPs = .text:0x8002D440; // type:function size:0x2C
|
||||
getDistToPlayer__9dAcBase_cFv = .text:0x8002D470; // type:function size:0x30
|
||||
getSquareDistToPlayer__9dAcBase_cFv = .text:0x8002D4A0; // type:function size:0x10
|
||||
@@ -1086,7 +1086,7 @@ FUN_8002d830__9dAcBase_cFv = .text:0x8002D830; // type:function size:0x28
|
||||
FUN_8002d860__9dAcBase_cFv = .text:0x8002D860; // type:function size:0x20
|
||||
getSoundSource__9dAcBase_cFv = .text:0x8002D880; // type:function size:0x8
|
||||
FUN_8002d890__9dAcBase_cFv = .text:0x8002D890; // type:function size:0x88
|
||||
setActorRef__9dAcBase_cFP7dBase_c = .text:0x8002D920; // type:function size:0x8
|
||||
setActorRef__9dAcBase_cFP9dAcBase_c = .text:0x8002D920; // type:function size:0x8
|
||||
setEnemyDefeatFlag__9dAcBase_cFv = .text:0x8002D930; // type:function size:0x10
|
||||
changeLoadedEntitiesWithSet__9dAcBase_cFv = .text:0x8002D940; // type:function size:0x14
|
||||
changeLoadedEntitiesNoSet__9dAcBase_cFv = .text:0x8002D960; // type:function size:0x14
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
/* 0xC0 */ mVec3_c position;
|
||||
/* 0xCC */ mVec3_c scale;
|
||||
/* 0xD8 */ u32 actor_properties;
|
||||
/* 0xDC */ fLiNdBa_c actor_node;
|
||||
/* 0xDC */ dAcRef_c<dAcBase_c> actor_node;
|
||||
/* 0xE8 */ u32 field_0xe8;
|
||||
/* 0xEC */ s8 roomid;
|
||||
/* 0xED */ u8 actor_subtype;
|
||||
@@ -117,7 +117,7 @@ public:
|
||||
return position - other.position;
|
||||
}
|
||||
|
||||
f32 getSquareDistanceTo(const mVec3_c &point) {
|
||||
f32 getSquareDistanceTo(const mVec3_c &point) const {
|
||||
mVec3_c diff = position - point;
|
||||
return diff.x * diff.x + diff.z * diff.z;
|
||||
}
|
||||
@@ -155,7 +155,7 @@ public:
|
||||
// same concept as above
|
||||
/* 8002d290 */ bool getDistanceAndAngleToActor(dAcBase_c *actor, f32 distThresh, s16 yAngle, s16 xAngle,
|
||||
f32 *outDist, s16 *outDiffAngleY, s16 *outDiffAngleX);
|
||||
/* 8002d3e0 */ bool isWithinPlayerRadius(f32 radius);
|
||||
/* 8002d3e0 */ bool isWithinPlayerRadius(f32 radius) const;
|
||||
/* 8002d440 */ bool getDistanceAndAngleToPlayer(f32 distThresh, s16 yAngle, s16 xAngle, f32 *outDist,
|
||||
s16 *outDiffAngleY, s16 *outDiffAngleX);
|
||||
/* 8002d470 */ f32 getDistToPlayer();
|
||||
@@ -183,7 +183,7 @@ public:
|
||||
// End of SoundSource stuff
|
||||
|
||||
/* 8002d890 */ void FUN_8002d890();
|
||||
/* 8002d920 */ void setActorRef(dBase_c *);
|
||||
/* 8002d920 */ void setActorRef(dAcBase_c *);
|
||||
// next three funcs are related
|
||||
/* 8002d930 */ void setEnemyDefeatFlag();
|
||||
/* 8002d940 */ void changeLoadedEntitiesWithSet();
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ public:
|
||||
/* 800508f0 */ virtual void postExecute(MAIN_STATE_e state);
|
||||
/* 80050920 */ virtual int preDraw();
|
||||
/* 80050860 */ virtual void postDraw(MAIN_STATE_e state);
|
||||
/* 8002c530 */ virtual ~dBase_c();
|
||||
/* 8002c530 */ virtual ~dBase_c() {}
|
||||
|
||||
public:
|
||||
/* 80050980 */ static void resetFlags();
|
||||
|
||||
@@ -6,12 +6,6 @@
|
||||
#include <s/s_State.hpp>
|
||||
#include <s/s_StateMgr.hpp>
|
||||
|
||||
class fLiNdTumbleweed_c : public fLiNdBaAutoUnlink_c {
|
||||
public:
|
||||
fLiNdTumbleweed_c(fBase_c *owner) : fLiNdBaAutoUnlink_c(owner) {}
|
||||
u16 someField;
|
||||
};
|
||||
|
||||
class dTgTumbleWeed_c : public dTg_c {
|
||||
public:
|
||||
dTgTumbleWeed_c() : mStateMgr(*this, sStateID::null), childTumbleweed(nullptr) {}
|
||||
@@ -35,7 +29,9 @@ private:
|
||||
u16 tumbleweedTimer;
|
||||
u16 padding;
|
||||
u16 windTimer;
|
||||
fLiNdTumbleweed_c childTumbleweed;
|
||||
// TODO dAcObjTumbleWeed
|
||||
dAcRef_c<dAcBase_c> childTumbleweed;
|
||||
u16 someField;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+23
-2
@@ -28,10 +28,31 @@ public:
|
||||
fBase_c *p_owner;
|
||||
};
|
||||
|
||||
class fLiNdBaAutoUnlink_c : public fLiNdBa_c {
|
||||
// TODO unofficial, move these to a more appropriate place
|
||||
class fLiNdBaAutoUnlink_c : public fLiNdBa_c {
|
||||
public:
|
||||
fLiNdBaAutoUnlink_c(fBase_c *owner) : fLiNdBa_c(owner) {}
|
||||
~fLiNdBaAutoUnlink_c() { unlink(); }
|
||||
~fLiNdBaAutoUnlink_c() {
|
||||
unlink();
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
class dAcRef_c : fLiNdBaAutoUnlink_c {
|
||||
public:
|
||||
dAcRef_c(T *owner) : fLiNdBaAutoUnlink_c(owner) {}
|
||||
dAcRef_c() : fLiNdBaAutoUnlink_c(nullptr) {}
|
||||
~dAcRef_c() {}
|
||||
|
||||
void link(T *ref) {
|
||||
p_owner = ref;
|
||||
}
|
||||
void unlink() {
|
||||
fLiNdBa_c::unlink();
|
||||
}
|
||||
T *get() {
|
||||
return static_cast<T *>(p_owner);
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
+15
-1
@@ -6,7 +6,10 @@
|
||||
struct mAng {
|
||||
mAng() {}
|
||||
mAng(s16 s) : mVal(s) {}
|
||||
|
||||
mAng(const mAng &other) : mVal(other.mVal) {}
|
||||
operator s16() const {
|
||||
return mVal;
|
||||
}
|
||||
s32 step(s16 target, s32 steps, s16 max, s16 min);
|
||||
|
||||
s16 mVal;
|
||||
@@ -18,6 +21,17 @@ public:
|
||||
|
||||
mAng3_c(s16 fx, s16 fy, s16 fz) : x(fx), y(fy), z(fz) {}
|
||||
|
||||
mAng3_c(const mAng3_c &r) {
|
||||
*this = r;
|
||||
}
|
||||
|
||||
mAng3_c &operator=(const mAng3_c &r) {
|
||||
x = r.x;
|
||||
y = r.y;
|
||||
z = r.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void set(s16 fx, s16 fy, s16 fz) {
|
||||
x = fx;
|
||||
y = fy;
|
||||
|
||||
@@ -4,12 +4,6 @@
|
||||
#include <s/s_State.hpp>
|
||||
#include <s/s_StateMgr.hpp>
|
||||
|
||||
// Look I don't know why these levels of subclasses work
|
||||
class fLiNdBa_Wood_c : public fLiNdBaAutoUnlink_c {
|
||||
public:
|
||||
fLiNdBa_Wood_c() : fLiNdBaAutoUnlink_c(nullptr) {}
|
||||
};
|
||||
|
||||
class dAcTWoodArea_c : public dAcObjBase_c {
|
||||
public:
|
||||
dAcTWoodArea_c() : mStateMgr(*this, sStateID::null) {}
|
||||
@@ -44,7 +38,7 @@ public:
|
||||
private:
|
||||
STATE_MGR_DECLARE(dAcTWoodArea_c);
|
||||
|
||||
fLiNdBa_Wood_c mRefs[8];
|
||||
dAcRef_c<dAcObjBase_c> mRefs[8];
|
||||
};
|
||||
|
||||
const f32 dAcTWoodArea_c::scaleX = 100.0f;
|
||||
@@ -141,8 +135,8 @@ void dAcTWoodArea_c::attachCloseObjects(ProfileName profID) {
|
||||
|
||||
void dAcTWoodArea_c::dropItems() {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (mRefs[i].p_owner != nullptr) {
|
||||
if (static_cast<dAcObjBase_c *>(mRefs[i].p_owner)->drop()) {
|
||||
if (mRefs[i].get() != nullptr) {
|
||||
if (mRefs[i].get()->drop()) {
|
||||
mRefs[i].unlink();
|
||||
}
|
||||
}
|
||||
@@ -151,7 +145,7 @@ void dAcTWoodArea_c::dropItems() {
|
||||
|
||||
bool dAcTWoodArea_c::attachObject(dAcObjBase_c *obj) {
|
||||
for (int i = 0; i < 8; i++) {
|
||||
if (mRefs[i].p_owner == nullptr) {
|
||||
if (mRefs[i].get() == nullptr) {
|
||||
mRefs[i].link(obj);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -74,12 +74,12 @@ void dTgTumbleWeed_c::executeState_AreaIn() {
|
||||
}
|
||||
void dTgTumbleWeed_c::finalizeState_AreaIn() {}
|
||||
|
||||
extern "C" void fn_475_1B00(fBase_c *, mVec3_c&);
|
||||
extern "C" void fn_475_1B00(fBase_c *, mVec3_c &);
|
||||
void dTgTumbleWeed_c::initializeState_Wind() {
|
||||
mVec3_c vec;
|
||||
getWind(&vec);
|
||||
if (childTumbleweed.p_owner != nullptr) {
|
||||
fn_475_1B00(childTumbleweed.p_owner, vec);
|
||||
if (childTumbleweed.get() != nullptr) {
|
||||
fn_475_1B00(childTumbleweed.get(), vec);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,7 +94,7 @@ void dTgTumbleWeed_c::finalizeState_Wind() {}
|
||||
|
||||
bool dTgTumbleWeed_c::shouldSpawnTumbleweed() {
|
||||
bool spawnAllowed = false;
|
||||
if (childTumbleweed.p_owner == nullptr && cM::rnd() <= 0.8f) {
|
||||
if (childTumbleweed.get() == nullptr && cM::rnd() <= 0.8f) {
|
||||
spawnAllowed = true;
|
||||
}
|
||||
|
||||
@@ -105,10 +105,8 @@ bool dTgTumbleWeed_c::shouldSpawnTumbleweed() {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool dTgTumbleWeed_c::shouldDoWind() {
|
||||
return childTumbleweed.p_owner != nullptr && cM::rnd() <= 0.5f;
|
||||
return childTumbleweed.get() != nullptr && cM::rnd() <= 0.5f;
|
||||
}
|
||||
void dTgTumbleWeed_c::doSpawnTumbleweed() {
|
||||
}
|
||||
void dTgTumbleWeed_c::getWind(mVec3_c*) {}
|
||||
void dTgTumbleWeed_c::doSpawnTumbleweed() {}
|
||||
void dTgTumbleWeed_c::getWind(mVec3_c *) {}
|
||||
|
||||
@@ -72,7 +72,7 @@ dAcBase_c::dAcBase_c()
|
||||
}
|
||||
|
||||
// 8002c530
|
||||
dBase_c::~dBase_c() {}
|
||||
// dBase_c::~dBase_c() {}
|
||||
|
||||
dAcBase_c::~dAcBase_c() {}
|
||||
|
||||
@@ -392,7 +392,7 @@ bool dAcBase_c::getDistanceAndAngleToActor(dAcBase_c *actor, f32 distThresh, s16
|
||||
}
|
||||
|
||||
// 8002d3e0
|
||||
bool dAcBase_c::isWithinPlayerRadius(f32 radius) {
|
||||
bool dAcBase_c::isWithinPlayerRadius(f32 radius) const {
|
||||
f32 dist_diff = getSquareDistanceTo(dPlayer::LINK->position);
|
||||
return dist_diff < radius * radius;
|
||||
}
|
||||
@@ -462,7 +462,7 @@ SoundSource *dAcBase_c::getSoundSource() {
|
||||
void dAcBase_c::FUN_8002d890() {}
|
||||
|
||||
// current name is Global__setActorRef
|
||||
void dAcBase_c::setActorRef(dBase_c *ref) {
|
||||
void dAcBase_c::setActorRef(dAcBase_c *ref) {
|
||||
actor_node.link(ref);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user