Improve Act3Ammo

This commit is contained in:
disinvite 2025-04-17 21:49:09 -04:00
parent 451fd63eee
commit 120ffdaca6
3 changed files with 63 additions and 51 deletions

View File

@ -90,7 +90,7 @@ class Act3Ammo : public LegoPathActor {
// Act3Ammo::`scalar deleting destructor' // Act3Ammo::`scalar deleting destructor'
private: private:
MxResult FUN_10053db0(float p_param1, const Matrix4& p_param2); MxResult FUN_10053db0(float p_param1, Matrix4& p_param2);
static Mx3DPointFloat g_unk0x10104f08; static Mx3DPointFloat g_unk0x10104f08;

View File

@ -81,7 +81,7 @@ class LegoPathBoundary : public LegoWEGEdge {
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::erase // _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::erase
// TEMPLATE: LEGO1 0x1002c440 // TEMPLATE: LEGO1 0x1002c440
// TEMPLATE: BETA10 0x100b6480 // TEMPLATE: BETA10 0x10020480
// _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::find // _Tree<LegoPathActor *,LegoPathActor *,set<LegoPathActor *,LegoPathActorSetCompare,allocator<LegoPathActor *> >::_Kfn,LegoPathActorSetCompare,allocator<LegoPathActor *> >::find
// TEMPLATE: LEGO1 0x1002c4c0 // TEMPLATE: LEGO1 0x1002c4c0
@ -196,6 +196,12 @@ class LegoPathBoundary : public LegoWEGEdge {
// TEMPLATE: BETA10 0x10082b40 // TEMPLATE: BETA10 0x10082b40
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::const_iterator::operator* // _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::const_iterator::operator*
// TEMPLATE: BETA10 0x100b6440
// set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::find
// TEMPLATE: BETA10 0x100b6480
// _Tree<LegoAnimPresenter *,LegoAnimPresenter *,set<LegoAnimPresenter *,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::_Kfn,LegoAnimPresenterSetCompare,allocator<LegoAnimPresenter *> >::find
// TEMPLATE: BETA10 0x10021dc0 // TEMPLATE: BETA10 0x10021dc0
// Set<LegoPathActor *,LegoPathActorSetCompare>::Set<LegoPathActor *,LegoPathActorSetCompare> // Set<LegoPathActor *,LegoPathActorSetCompare>::Set<LegoPathActor *,LegoPathActorSetCompare>

View File

@ -198,7 +198,7 @@ MxResult Act3Ammo::FUN_10053d30(LegoPathController* p_p, MxFloat p_unk0x19c)
// FUNCTION: LEGO1 0x10053db0 // FUNCTION: LEGO1 0x10053db0
// FUNCTION: BETA10 0x1001e0f0 // FUNCTION: BETA10 0x1001e0f0
MxResult Act3Ammo::FUN_10053db0(float p_param1, const Matrix4& p_param2) MxResult Act3Ammo::FUN_10053db0(float p_param1, Matrix4& p_param2)
{ {
float local34 = p_param1 * p_param1; float local34 = p_param1 * p_param1;
@ -397,69 +397,75 @@ void Act3Ammo::Animate(float p_time)
LegoPathActorSet lpas(plpas); LegoPathActorSet lpas(plpas);
for (LegoPathActorSet::iterator itpa = lpas.begin(); itpa != lpas.end(); itpa++) { for (LegoPathActorSet::iterator itpa = lpas.begin(); itpa != lpas.end(); itpa++) {
if (plpas.find(*itpa) != plpas.end() && this != *itpa) { if (plpas.find(*itpa) == plpas.end()) {
LegoROI* r = (*itpa)->GetROI(); continue;
assert(r); }
if (!strncmp(r->GetName(), "pammo", 5)) { if (this == *itpa) {
Mx3DPointFloat local1c8; continue;
Mx3DPointFloat local1b4; }
local1c8 = r->GetLocal2World()[3]; LegoROI* r = (*itpa)->GetROI();
local1b4 = m_roi->GetLocal2World()[3]; assert(r);
local1b4 -= local1c8; if (!strncmp(r->GetName(), "pammo", 5)) {
Mx3DPointFloat local1c8;
Mx3DPointFloat local1b4;
float radius = r->GetWorldBoundingSphere().Radius(); local1c8 = r->GetLocal2World()[3];
if (local1b4.LenSquared() <= radius * radius) { local1b4 = m_roi->GetLocal2World()[3];
MxS32 index = -1;
if (sscanf(r->GetName(), "pammo%d", &index) != 1) {
assert(0);
}
assert(m_world); local1b4 -= local1c8;
if (m_world->m_pizzas[index].IsValid() && !m_world->m_pizzas[index].IsSharkFood()) { float radius = r->GetWorldBoundingSphere().Radius();
m_world->EatPizza(index); if (local1b4.LenSquared() <= radius * radius) {
m_world->m_brickster->FUN_100417c0(); MxS32 index = -1;
} if (sscanf(r->GetName(), "pammo%d", &index) != 1) {
assert(0);
}
if (IsDonut()) { assert(m_world);
assert(SoundManager()->GetCacheSoundManager());
SoundManager()->GetCacheSoundManager()->Play("dnhitpz", NULL, FALSE); if (m_world->m_pizzas[index].IsValid() && !m_world->m_pizzas[index].IsSharkFood()) {
m_world->RemoveDonut(*this); m_world->EatPizza(index);
local14 = TRUE; m_world->m_brickster->FUN_100417c0();
break; }
}
if (IsDonut()) {
assert(SoundManager()->GetCacheSoundManager());
SoundManager()->GetCacheSoundManager()->Play("dnhitpz", NULL, FALSE);
m_world->RemoveDonut(*this);
local14 = TRUE;
break;
} }
} }
else if (!strncmp(r->GetName(), "dammo", 5)) { }
Mx3DPointFloat local1f8; else if (!strncmp(r->GetName(), "dammo", 5)) {
Mx3DPointFloat local1e4; Mx3DPointFloat local1f8;
Mx3DPointFloat local1e4;
local1f8 = r->GetLocal2World()[3]; local1f8 = r->GetLocal2World()[3];
local1e4 = m_roi->GetLocal2World()[3]; local1e4 = m_roi->GetLocal2World()[3];
local1e4 -= local1f8; local1e4 -= local1f8;
float radius = r->GetWorldBoundingSphere().Radius(); float radius = r->GetWorldBoundingSphere().Radius();
if (local1e4.LenSquared() <= radius * radius) { if (local1e4.LenSquared() <= radius * radius) {
MxS32 index = -1; MxS32 index = -1;
if (sscanf(r->GetName(), "dammo%d", &index) != 1) { if (sscanf(r->GetName(), "dammo%d", &index) != 1) {
assert(0); assert(0);
} }
assert(m_world); assert(m_world);
m_world->EatDonut(index); m_world->EatDonut(index);
if (IsPizza()) { if (IsPizza()) {
assert(SoundManager()->GetCacheSoundManager()); assert(SoundManager()->GetCacheSoundManager());
SoundManager()->GetCacheSoundManager()->Play("pzhitdn", NULL, FALSE); SoundManager()->GetCacheSoundManager()->Play("pzhitdn", NULL, FALSE);
m_world->RemovePizza(*this); m_world->RemovePizza(*this);
local14 = TRUE; local14 = TRUE;
break; break;
}
} }
} }
} }