summaryrefslogtreecommitdiff
path: root/src/KingSystem/Physics/System
diff options
context:
space:
mode:
authorRobbyV2 <robby@robby.blue>2026-07-29 09:27:42 -0400
committerRobbyV2 <robby@robby.blue>2026-07-30 09:09:55 -0400
commit1e080b32ebdffedffcf2e7a5a3c002ce7bfe54f1 (patch)
treee870bfc521638e1d88372d312aebb175709d7f21 /src/KingSystem/Physics/System
parentcd3e7a9fbd5f76e23b4f4b837ee122659c60a4b3 (diff)
phys: match System contact listener and group handler functions
Diffstat (limited to 'src/KingSystem/Physics/System')
-rw-r--r--src/KingSystem/Physics/System/physLayerContactPointInfo.h2
-rw-r--r--src/KingSystem/Physics/System/physSystem.cpp23
-rw-r--r--src/KingSystem/Physics/System/physSystem.h4
3 files changed, 27 insertions, 2 deletions
diff --git a/src/KingSystem/Physics/System/physLayerContactPointInfo.h b/src/KingSystem/Physics/System/physLayerContactPointInfo.h
index 377adb07..2080cfb0 100644
--- a/src/KingSystem/Physics/System/physLayerContactPointInfo.h
+++ b/src/KingSystem/Physics/System/physLayerContactPointInfo.h
@@ -84,6 +84,8 @@ public:
bool registerLayerPair(ContactLayer layer1, ContactLayer layer2, bool enabled = true);
bool isPairUnknown(ContactLayer layer1, ContactLayer layer2) const;
+ ContactLayerType getLayerType() const { return mLayerType; }
+
ContactCallback* getCallback() const { return mCallback; }
void setCallback(ContactCallback* callback) { mCallback = callback; }
diff --git a/src/KingSystem/Physics/System/physSystem.cpp b/src/KingSystem/Physics/System/physSystem.cpp
index e9a1ffb5..ef55e1f1 100644
--- a/src/KingSystem/Physics/System/physSystem.cpp
+++ b/src/KingSystem/Physics/System/physSystem.cpp
@@ -6,10 +6,12 @@
#include "KingSystem/Physics/RigidBody/physRigidBodyResource.h"
#include "KingSystem/Physics/StaticCompound/physStaticCompound.h"
#include "KingSystem/Physics/SupportBone/physSupportBoneResource.h"
+#include "KingSystem/Physics/System/physContactListener.h"
#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/physLayerContactPointInfo.h"
#include "KingSystem/Physics/System/physMaterialTable.h"
#include "KingSystem/Physics/System/physRayCastRequestMgr.h"
#include "KingSystem/Physics/System/physSensorGroupFilter.h"
@@ -53,6 +55,10 @@ void System::initSystemData(sead::Heap* heap) {
mContactMgr);
}
+void System::removeSystemGroupHandler(SystemGroupHandler* handler) {
+ mGroupFilters[static_cast<s32>(handler->getLayerType())]->removeSystemGroupHandler(handler);
+}
+
ContactPointInfo* System::allocContactPointInfo(sead::Heap* heap, int num,
const sead::SafeString& name, int a, int b,
int c) const {
@@ -100,10 +106,27 @@ LayerContactPointInfo* System::allocLayerContactPointInfo(sead::Heap* heap, int
return mContactMgr->makeLayerContactPointInfo(heap, num, num2, name, a, b, c);
}
+void System::freeLayerContactPointInfo(LayerContactPointInfo* info) const {
+ mContactListeners[static_cast<s32>(info->getLayerType())]->removeLayerPairsForContactPointInfo(
+ info);
+ mContactMgr->freeContactPointInfo(info);
+}
+
void System::registerContactPointInfo(ContactPointInfo* info) const {
mContactMgr->registerContactPointInfo(info);
}
+void System::registerContactPointLayerPair(LayerContactPointInfo* info, ContactLayer layer1,
+ ContactLayer layer2, bool enabled) {
+ mContactListeners[static_cast<s32>(info->getLayerType())]->addLayerPairForContactPointInfo(
+ info, layer1, layer2, enabled);
+}
+
+ContactLayerCollisionInfo* System::trackLayerPair(ContactLayer layer_a, ContactLayer layer_b) {
+ return mContactListeners[static_cast<s32>(getContactLayerType(layer_a))]->trackLayerPair(
+ layer_a, layer_b);
+}
+
RagdollControllerKeyList* System::getRagdollCtrlKeyList() const {
if (!mSystemData)
return nullptr;
diff --git a/src/KingSystem/Physics/System/physSystem.h b/src/KingSystem/Physics/System/physSystem.h
index 1bd55360..67559001 100644
--- a/src/KingSystem/Physics/System/physSystem.h
+++ b/src/KingSystem/Physics/System/physSystem.h
@@ -14,6 +14,7 @@ namespace ksys::phys {
class CollisionInfo;
class ContactLayerCollisionInfo;
class ContactLayerCollisionInfoGroup;
+class ContactListener;
class ContactMgr;
class ContactPointInfo;
class GroupFilter;
@@ -151,8 +152,7 @@ private:
GroupFilter* mEntityGroupFilter{};
GroupFilter* mSensorGroupFilter{};
sead::FixedPtrArray<GroupFilter, 2> mGroupFilters;
- // FIXME: type
- sead::FixedPtrArray<void*, 2> _128;
+ sead::FixedPtrArray<ContactListener, 2> mContactListeners;
ContactMgr* mContactMgr;
void* _150;
StaticCompoundMgr* mStaticCompoundMgr;