summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Zhao <44533763+Pistonight@users.noreply.github.com>2026-07-30 17:06:14 -0700
committerGitHub <noreply@github.com>2026-07-30 17:06:14 -0700
commit7c65472576f5857bbcca71697f5e71aa93af6f8c (patch)
treedc415e01bcc296d7312aaf6cd6c94367b6cac394 /src
parent4f1f92f132249b67316565ff5cb2fb4370c5c725 (diff)
parentc6c8beaf58523d2bc045e4753ac6ad8736d317f3 (diff)
Merge pull request #185 from RobbyV2/phys-system-heap-accessorsHEADmaster
Match phys::System heap accessors
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/Physics/System/physSystem.cpp21
-rw-r--r--src/KingSystem/Physics/System/physSystem.h7
2 files changed, 26 insertions, 2 deletions
diff --git a/src/KingSystem/Physics/System/physSystem.cpp b/src/KingSystem/Physics/System/physSystem.cpp
index ef55e1f1..acc926fc 100644
--- a/src/KingSystem/Physics/System/physSystem.cpp
+++ b/src/KingSystem/Physics/System/physSystem.cpp
@@ -1,4 +1,6 @@
#include "KingSystem/Physics/System/physSystem.h"
+#include <heap/seadHeap.h>
+#include <thread/seadThread.h>
#include "KingSystem/Physics/Cloth/physClothResource.h"
#include "KingSystem/Physics/Ragdoll/physRagdollControllerKeyList.h"
#include "KingSystem/Physics/Ragdoll/physRagdollResource.h"
@@ -16,6 +18,7 @@
#include "KingSystem/Physics/System/physRayCastRequestMgr.h"
#include "KingSystem/Physics/System/physSensorGroupFilter.h"
#include "KingSystem/Physics/System/physSystemData.h"
+#include "KingSystem/Physics/physHavokMemoryAllocator.h"
#include "KingSystem/Resource/resEntryFactory.h"
#include "KingSystem/Resource/resSystem.h"
@@ -133,4 +136,22 @@ RagdollControllerKeyList* System::getRagdollCtrlKeyList() const {
return mSystemData->getRagdollCtrlKeyList();
}
+bool System::isHavokMainHeapOom() const {
+ return static_cast<f32>(mHavokAllocator->getHeapFreeSize()) /
+ static_cast<f32>(mHavokAllocator->getHeapSize()) <
+ 0.05f;
+}
+
+sead::Heap* System::getPhysicsTempHeap(LowPriority low_priority) const {
+ if (low_priority != LowPriority::No ||
+ sead::ThreadMgr::instance()->getCurrentThread()->getPriority() >
+ sead::Thread::cDefaultPriority)
+ return mPhysicsTempLowHeap;
+
+ if (mPhysicsTempDefaultHeap->getMaxAllocatableSize(8) <= 0x2800)
+ mPhysicsTempDefaultHeap->dump();
+
+ return mPhysicsTempDefaultHeap;
+}
+
} // namespace ksys::phys
diff --git a/src/KingSystem/Physics/System/physSystem.h b/src/KingSystem/Physics/System/physSystem.h
index 67559001..9c48510d 100644
--- a/src/KingSystem/Physics/System/physSystem.h
+++ b/src/KingSystem/Physics/System/physSystem.h
@@ -18,6 +18,7 @@ class ContactListener;
class ContactMgr;
class ContactPointInfo;
class GroupFilter;
+class HavokMemoryAllocator;
class LayerContactPointInfo;
class MaterialTable;
class RayCastForRequest;
@@ -133,7 +134,8 @@ public:
// 0x000000710121684c
void decrementWorldUnkCounter(ContactLayerType layer_type);
- // 0x0000007101216cec
+ bool isHavokMainHeapOom() const;
+
sead::Heap* getPhysicsTempHeap(LowPriority low_priority) const;
private:
@@ -145,7 +147,8 @@ private:
float _6c = 1.0;
float _70 = 1.0 / 30.0;
float mTimeFactor{};
- u8 _78[0xa8 - 0x78];
+ HavokMemoryAllocator* mHavokAllocator{};
+ u8 _80[0xa8 - 0x80];
sead::CriticalSection mCS;
void* _e8{};
void* _f0{};