mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-22 00:19:13 +00:00
Big fixes and big memory leak refactor (linux only for now)
This commit is contained in:
@@ -35,4 +35,12 @@ void CEnvFxManager::AreaLoaded()
|
||||
grid.x0_24_ = true;
|
||||
}
|
||||
|
||||
void CEnvFxManager::Cleanup()
|
||||
{
|
||||
xb68_envRainSplashId = kInvalidUniqueId;
|
||||
xb6a_ = false;
|
||||
xb6c_ = 0;
|
||||
xb70_ = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -64,6 +64,10 @@ class CEnvFxManager
|
||||
float xb54_;
|
||||
TLockedToken<CGenDescription> xb58_envRainSplash;
|
||||
bool xb64_ = true;
|
||||
TUniqueId xb68_envRainSplashId = kInvalidUniqueId;
|
||||
bool xb6a_ = false;
|
||||
u32 xb6c_ = 0;
|
||||
u32 xb70_ = 0;
|
||||
|
||||
void SetupSnowTevs();
|
||||
void SetupRainTevs();
|
||||
@@ -80,6 +84,7 @@ public:
|
||||
void SetXB54(float f) { xb54_ = f; }
|
||||
bool GetX24() const { return x24_; }
|
||||
float GetRainMagnitude() const { return x30_rainMagnitude; }
|
||||
void Cleanup();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1230,7 +1230,7 @@ void CGameArea::FillInStaticGeometry(bool textures)
|
||||
++secIt;
|
||||
}
|
||||
|
||||
CGraphics::CommitResources([&](boo::IGraphicsDataFactory::Context& ctx) -> bool
|
||||
CGraphicsCommitResources([&](boo::IGraphicsDataFactory::Context& ctx)
|
||||
{
|
||||
/* Shared geometry uniform buffer - one for normal render, one for shadow render */
|
||||
for (int i=0 ; i<2 ; ++i)
|
||||
|
||||
@@ -60,7 +60,7 @@ void CScriptDock::Think(float dt, CStateManager& mgr)
|
||||
else if (x264_dockState == EDockState::EnterNextArea)
|
||||
{
|
||||
CPlayer& player = mgr.GetPlayer();
|
||||
if (HasPointCrossedDock(mgr, player.GetTransform().origin))
|
||||
if (HasPointCrossedDock(mgr, player.GetTranslation()))
|
||||
{
|
||||
IGameArea::Dock* dock = mgr.WorldNC()->GetArea(mgr.GetNextAreaId())->DockNC(x25c_dock);
|
||||
TAreaId aid = dock->GetConnectedAreaId(dock->GetReferenceCount());
|
||||
@@ -237,7 +237,7 @@ void CScriptDock::UpdateAreaActivateFlags(CStateManager& mgr)
|
||||
bool CScriptDock::HasPointCrossedDock(const CStateManager& mgr, const zeus::CVector3f& point) const
|
||||
{
|
||||
const zeus::CPlane plane = GetPlane(mgr);
|
||||
return (point.dot(plane.vec) < plane.d);
|
||||
return (point.dot(plane.vec) >= plane.d);
|
||||
}
|
||||
|
||||
void CScriptDock::AreaLoaded(CStateManager& mgr) { SetLoadConnected(mgr, x268_25_loadConnected); }
|
||||
|
||||
@@ -79,7 +79,14 @@ void CScriptDoor::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CStat
|
||||
{
|
||||
if (x27e_partner2 != kInvalidUniqueId)
|
||||
if (CEntity* ent = mgr.ObjectById(x27e_partner2))
|
||||
{
|
||||
static int RecDepth = 0;
|
||||
if (RecDepth > 9)
|
||||
printf("");
|
||||
++RecDepth;
|
||||
mgr.SendScriptMsg(ent, GetUniqueId(), EScriptObjectMessage::Close);
|
||||
--RecDepth;
|
||||
}
|
||||
x2a8_26_isOpen = false;
|
||||
SetDoorAnimation(EDoorAnimType::Close);
|
||||
mgr.GetCameraManager()->GetBallCamera()->DoorClosing(GetUniqueId());
|
||||
@@ -277,6 +284,8 @@ void CScriptDoor::OpenDoor(TUniqueId uid, CStateManager& mgr)
|
||||
x2a8_26_isOpen = true;
|
||||
x2a8_25_wasOpen = true;
|
||||
x2a8_27_conditionsMet = false;
|
||||
x27c_partner1 = kInvalidUniqueId;
|
||||
x27e_partner2 = kInvalidUniqueId;
|
||||
|
||||
if (const CScriptDoor* door = TCastToConstPtr<CScriptDoor>(mgr.GetObjectById(uid)))
|
||||
x27c_partner1 = door->GetUniqueId();
|
||||
@@ -292,12 +301,13 @@ void CScriptDoor::OpenDoor(TUniqueId uid, CStateManager& mgr)
|
||||
for (CEntity* ent : mgr.GetPlatformAndDoorObjectList())
|
||||
{
|
||||
TCastToConstPtr<CScriptDoor> door = ent;
|
||||
if (!door || door->GetUniqueId() == GetUniqueId())
|
||||
if (!door || door->GetUniqueId() == uid)
|
||||
continue;
|
||||
|
||||
if(TCastToConstPtr<CScriptDock> dock2 = mgr.GetObjectById(door->x282_dockId))
|
||||
if (TCastToConstPtr<CScriptDock> dock2 = mgr.GetObjectById(door->x282_dockId))
|
||||
{
|
||||
if (dock1->GetCurrentConnectedAreaId(mgr) == dock2->GetAreaId() && dock2->GetCurrentConnectedAreaId(mgr) == dock1->GetAreaId())
|
||||
if (dock1->GetCurrentConnectedAreaId(mgr) == dock2->GetAreaId() &&
|
||||
dock2->GetCurrentConnectedAreaId(mgr) == dock1->GetAreaId())
|
||||
{
|
||||
x27e_partner2 = door->GetUniqueId();
|
||||
mgr.SendScriptMsg(ent, GetUniqueId(), EScriptObjectMessage::Open);
|
||||
|
||||
@@ -176,9 +176,6 @@ void CScriptSound::AcceptScriptMsg(EScriptObjectMessage msg, TUniqueId uid, CSta
|
||||
break;
|
||||
case EScriptObjectMessage::Play:
|
||||
{
|
||||
if (xc_editorId.id == 0x00000223)
|
||||
printf("");
|
||||
|
||||
if (GetActive())
|
||||
PlaySound(mgr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user