summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Zhao <44533763+Pistonight@users.noreply.github.com>2026-07-29 20:46:17 -0700
committerGitHub <noreply@github.com>2026-07-29 20:46:17 -0700
commit157dcbc7e28046c4f2e40c13f143447c1533b900 (patch)
tree9a006804c91d93fa752b77810dca35122e4872c4
parent88da953350447728ecfdf58e0efdd413bc29e972 (diff)
parentc99e6cfe940eee2a6a27799688d47c483db47e52 (diff)
Merge pull request #180 from mairokaizo/pr/physsystem
ksys::phys::System: implement isPaused and collision/handler helpers
-rw-r--r--data/uking_functions.csv16
-rw-r--r--src/KingSystem/Physics/System/physSystem.cpp37
-rw-r--r--src/KingSystem/Physics/System/physSystem.h7
3 files changed, 50 insertions, 10 deletions
diff --git a/data/uking_functions.csv b/data/uking_functions.csv
index 9cc91871..314e2422 100644
--- a/data/uking_functions.csv
+++ b/data/uking_functions.csv
@@ -93556,7 +93556,7 @@ Address,Quality,Size,Name
0x00000071012166cc,U,000116,
0x0000007101216740,U,000060,PhysicsMemSys::calc
0x000000710121677c,U,000012,PhysicsMemSys::setPauseState
-0x0000007101216788,U,000008,_ZNK4ksys4phys6System8isPausedEv
+0x0000007101216788,O,000008,_ZNK4ksys4phys6System8isPausedEv
0x0000007101216790,U,000092,PhysicsMemSys::__auto17
0x00000071012167ec,U,000020,PhysicsMemSys::__auto11
0x0000007101216800,U,000020,PhysicsMemSys::setEntityContactListenerField91
@@ -93565,7 +93565,7 @@ Address,Quality,Size,Name
0x0000007101216828,U,000004,nullsub_4711
0x000000710121682c,U,000032,
0x000000710121684c,U,000032,
-0x000000710121686c,U,000040,_ZN4ksys4phys6System21addSystemGroupHandlerENS0_16ContactLayerTypeEi
+0x000000710121686c,O,000040,_ZN4ksys4phys6System21addSystemGroupHandlerENS0_16ContactLayerTypeEi
0x0000007101216894,U,000052,
0x00000071012168c8,U,000052,
0x00000071012168fc,O,000008,_ZNK4ksys4phys6System21allocContactPointInfoEPN4sead4HeapEiRKNS2_14SafeStringBaseIcEEiii
@@ -93575,18 +93575,18 @@ Address,Quality,Size,Name
0x0000007101216964,O,000008,_ZNK4ksys4phys6System24registerContactPointInfoEPNS0_16ContactPointInfoE
0x000000710121696c,U,000008,PhysicsMemSys::x_3
0x0000007101216974,U,000048,_ZN4ksys4phys6System29registerContactPointLayerPairEPNS0_21LayerContactPointInfoENS0_12ContactLayerES4_b
-0x00000071012169a4,U,000008,_ZNK4ksys4phys6System18allocCollisionInfoEPN4sead4HeapERKNS2_14SafeStringBaseIcEE
-0x00000071012169ac,U,000008,_ZNK4ksys4phys6System17freeCollisionInfoEPNS0_13CollisionInfoE
-0x00000071012169b4,U,000012,_ZN4ksys4phys6System34makeContactLayerCollisionInfoGroupEPN4sead4HeapENS0_12ContactLayerEiRKNS2_14SafeStringBaseIcEE
-0x00000071012169c0,U,000008,_ZN4ksys4phys6System34freeContactLayerCollisionInfoGroupEPNS0_30ContactLayerCollisionInfoGroupE
+0x00000071012169a4,O,000008,_ZNK4ksys4phys6System18allocCollisionInfoEPN4sead4HeapERKNS2_14SafeStringBaseIcEE
+0x00000071012169ac,O,000008,_ZNK4ksys4phys6System17freeCollisionInfoEPNS0_13CollisionInfoE
+0x00000071012169b4,O,000012,_ZN4ksys4phys6System34makeContactLayerCollisionInfoGroupEPN4sead4HeapENS0_12ContactLayerEiRKNS2_14SafeStringBaseIcEE
+0x00000071012169c0,O,000008,_ZN4ksys4phys6System34freeContactLayerCollisionInfoGroupEPNS0_30ContactLayerCollisionInfoGroupE
0x00000071012169c8,U,000088,_ZN4ksys4phys6System14trackLayerPairENS0_12ContactLayerES2_
0x0000007101216a20,U,000136,_ZN4ksys4phys6System32removeRigidBodyFromContactSystemEPNS0_9RigidBodyE
0x0000007101216aa8,U,000008,
0x0000007101216ab0,U,000008,
0x0000007101216ab8,U,000008,
0x0000007101216ac0,U,000008,
-0x0000007101216ac8,U,000032,_ZNK4ksys4phys6System14getGroupFilterENS0_16ContactLayerTypeE
-0x0000007101216ae8,U,000012,_ZN4ksys4phys6System19allocRayCastRequestEPNS0_18SystemGroupHandlerENS0_9GroundHitE
+0x0000007101216ac8,O,000032,_ZNK4ksys4phys6System14getGroupFilterENS0_16ContactLayerTypeE
+0x0000007101216ae8,O,000012,_ZN4ksys4phys6System19allocRayCastRequestEPNS0_18SystemGroupHandlerENS0_9GroundHitE
0x0000007101216af4,U,000276,
0x0000007101216c08,U,000080,PhysicsMemSys::isHavokMainHeapOom
0x0000007101216c58,U,000008,PhysicsMemSys::setRigidBodyDividedMeshShapeMgr
diff --git a/src/KingSystem/Physics/System/physSystem.cpp b/src/KingSystem/Physics/System/physSystem.cpp
index 0428a92a..e9a1ffb5 100644
--- a/src/KingSystem/Physics/System/physSystem.cpp
+++ b/src/KingSystem/Physics/System/physSystem.cpp
@@ -9,7 +9,9 @@
#include "KingSystem/Physics/System/physContactMgr.h"
#include "KingSystem/Physics/System/physContactPointInfo.h"
#include "KingSystem/Physics/System/physEntityGroupFilter.h"
+#include "KingSystem/Physics/System/physGroupFilter.h"
#include "KingSystem/Physics/System/physMaterialTable.h"
+#include "KingSystem/Physics/System/physRayCastRequestMgr.h"
#include "KingSystem/Physics/System/physSensorGroupFilter.h"
#include "KingSystem/Physics/System/physSystemData.h"
#include "KingSystem/Resource/resEntryFactory.h"
@@ -19,6 +21,10 @@ namespace ksys::phys {
SEAD_SINGLETON_DISPOSER_IMPL(System)
+bool System::isPaused() const {
+ return mPaused;
+}
+
void System::initSystemData(sead::Heap* heap) {
res::registerEntryFactory(new (heap) res::EntryFactory<RigidBodyResource>(1.0, 0x400), "hkrb");
res::registerEntryFactory(new (heap) res::EntryFactory<RagdollResource>(1.0, 0x400), "hkrg");
@@ -57,6 +63,37 @@ void System::freeContactPointInfo(ContactPointInfo* info) const {
mContactMgr->freeContactPointInfo(info);
}
+CollisionInfo* System::allocCollisionInfo(sead::Heap* heap, const sead::SafeString& name) const {
+ return mContactMgr->makeCollisionInfo(heap, name);
+}
+
+void System::freeCollisionInfo(CollisionInfo* info) const {
+ mContactMgr->freeCollisionInfo(info);
+}
+
+ContactLayerCollisionInfoGroup*
+System::makeContactLayerCollisionInfoGroup(sead::Heap* heap, ContactLayer layer, int capacity,
+ const sead::SafeString& name) {
+ return mContactMgr->makeContactLayerCollisionInfoGroup(heap, layer, capacity, name);
+}
+
+void System::freeContactLayerCollisionInfoGroup(ContactLayerCollisionInfoGroup* group) {
+ mContactMgr->freeContactLayerCollisionInfoGroup(group);
+}
+
+GroupFilter* System::getGroupFilter(ContactLayerType type) const {
+ return mGroupFilters[static_cast<s32>(type)];
+}
+
+RayCastForRequest* System::allocRayCastRequest(SystemGroupHandler* group_handler,
+ GroundHit ground_hit) {
+ return mRayCastRequestMgr->allocRequest(group_handler, ground_hit);
+}
+
+SystemGroupHandler* System::addSystemGroupHandler(ContactLayerType layer_type, int free_list_idx) {
+ return getGroupFilter(layer_type)->addSystemGroupHandler(free_list_idx);
+}
+
LayerContactPointInfo* System::allocLayerContactPointInfo(sead::Heap* heap, int num, int num2,
const sead::SafeString& name, int a,
int b, int c) const {
diff --git a/src/KingSystem/Physics/System/physSystem.h b/src/KingSystem/Physics/System/physSystem.h
index 07f6b501..1bd55360 100644
--- a/src/KingSystem/Physics/System/physSystem.h
+++ b/src/KingSystem/Physics/System/physSystem.h
@@ -20,6 +20,7 @@ class GroupFilter;
class LayerContactPointInfo;
class MaterialTable;
class RayCastForRequest;
+class RayCastRequestMgr;
class RagdollControllerKeyList;
class RagdollInstanceMgr;
class RigidBody;
@@ -135,7 +136,9 @@ public:
sead::Heap* getPhysicsTempHeap(LowPriority low_priority) const;
private:
- u8 _28[0x64 - 0x28];
+ u8 _28[0x60 - 0x28];
+ bool mPaused;
+ u8 _61[0x64 - 0x61];
float _64 = 1.0 / 30.0;
float _68 = 1.0 / 30.0;
float _6c = 1.0;
@@ -158,7 +161,7 @@ private:
void* mRigidBodyDividedMeshShapeMgr;
SystemData* mSystemData;
MaterialTable* mMaterialTable;
- void* _188{};
+ RayCastRequestMgr* mRayCastRequestMgr{};
void* _190{};
void* _198{};
void* _1a0{};