Merge pull request #3 from robojumper/mAng_flindba

Fix mAng3_c copy assignment, clean up list node templates
This commit is contained in:
robojumper
2024-06-27 23:42:48 +02:00
committed by GitHub
11 changed files with 126 additions and 90 deletions
+5 -51
View File
@@ -1,51 +1,4 @@
#include <d/a/obj/d_a_obj_base.h>
#include <d/d_player.h>
#include <f/f_list_nd.h>
#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) {}
virtual ~dAcTWoodArea_c() {}
virtual int actorCreate() override;
virtual int actorPostCreate() override;
virtual int actorExecute() override;
virtual int draw() override;
virtual int doDelete() override;
void attachCloseObjects(ProfileName profID);
void dropItems();
bool attachObject(dAcObjBase_c *obj);
f32 getAttachRadius() {
return scale.x * scaleX;
}
f32 getAttachRadiusSquare() {
return getAttachRadius() * getAttachRadius();
}
f32 getAttachHeight() {
return scale.y * scaleY;
}
STATE_FUNC_DECLARE(dAcTWoodArea_c, Init);
STATE_FUNC_DECLARE(dAcTWoodArea_c, Wait);
static const f32 scaleX;
static const f32 scaleY;
private:
STATE_MGR_DECLARE(dAcTWoodArea_c);
fLiNdBa_Wood_c mRefs[8];
};
#include <d/a/d_a_t_wood_area.h>
const f32 dAcTWoodArea_c::scaleX = 100.0f;
const f32 dAcTWoodArea_c::scaleY = 100.0f;
@@ -101,6 +54,7 @@ extern "C" void fn_800298B0(u16, mVec3_c *, mAng3_c *, u32, u32, u32, u32, u32);
extern u16 PARTICLE_RESOURCE_ID_MAPPING[];
void dAcTWoodArea_c::initializeState_Wait() {}
void dAcTWoodArea_c::executeState_Wait() {
if (dPlayer::LINK != nullptr && (dPlayer::LINK->someFlags & 0x2000)) {
// This is a bit messed up
@@ -141,8 +95,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 +105,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;
}
+7 -9
View File
@@ -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 *) {}
+4 -4
View File
@@ -72,7 +72,7 @@ dAcBase_c::dAcBase_c()
}
// 8002c530
dBase_c::~dBase_c() {}
// dBase_c::~dBase_c() {}
dAcBase_c::~dAcBase_c() {}
@@ -327,7 +327,7 @@ void dAcBase_c::forEveryActor(void *func(dAcBase_c *, dAcBase_c *), dAcBase_c *p
}
// 8002d190
mAng dAcBase_c::getXZAngleToPlayer(s16 *angle) {
mAng dAcBase_c::getXZAngleToPlayer() {
return targetAngleY(&this->position, &dPlayer::LINK->position);
}
@@ -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);
}