Merge pull request #184 from RobbyV2/phys-system-contact-listeners

Match phys::System contact listener and group handler forwarders
This commit is contained in:
Michael Zhao
2026-07-30 17:04:47 -07:00
committed by GitHub
4 changed files with 31 additions and 6 deletions
+4 -4
View File
@@ -93992,7 +93992,7 @@ Address,Quality,Size,Name
0x0000007101215784,U,000048,_ZN4ksys4phys6System11unlockWorldENS0_16ContactLayerTypeEPKciNS0_16OnlyLockIfNeededE
0x00000071012157b4,U,000464,PhysicsMemSys::__auto0
0x0000007101215984,U,000484,PhysicsMemSys::initGroupFilterXs
0x0000007101215b68,U,000036,_ZN4ksys4phys6System24removeSystemGroupHandlerEPNS0_18SystemGroupHandlerE
0x0000007101215b68,O,000036,_ZN4ksys4phys6System24removeSystemGroupHandlerEPNS0_18SystemGroupHandlerE
0x0000007101215b8c,U,001728,ksys::phys::System::createWorld
0x000000710121624c,U,000220,PhysicsMemSys::__auto1
0x0000007101216328,U,000200,PhysicsMemSys::__auto5
@@ -94020,15 +94020,15 @@ Address,Quality,Size,Name
0x00000071012168fc,O,000008,_ZNK4ksys4phys6System21allocContactPointInfoEPN4sead4HeapEiRKNS2_14SafeStringBaseIcEEiii
0x0000007101216904,O,000008,_ZNK4ksys4phys6System20freeContactPointInfoEPNS0_16ContactPointInfoE
0x000000710121690c,O,000008,_ZNK4ksys4phys6System26allocLayerContactPointInfoEPN4sead4HeapEiiRKNS2_14SafeStringBaseIcEEiii
0x0000007101216914,U,000080,_ZNK4ksys4phys6System25freeLayerContactPointInfoEPNS0_21LayerContactPointInfoE
0x0000007101216914,O,000080,_ZNK4ksys4phys6System25freeLayerContactPointInfoEPNS0_21LayerContactPointInfoE
0x0000007101216964,O,000008,_ZNK4ksys4phys6System24registerContactPointInfoEPNS0_16ContactPointInfoE
0x000000710121696c,U,000008,PhysicsMemSys::x_3
0x0000007101216974,U,000048,_ZN4ksys4phys6System29registerContactPointLayerPairEPNS0_21LayerContactPointInfoENS0_12ContactLayerES4_b
0x0000007101216974,O,000048,_ZN4ksys4phys6System29registerContactPointLayerPairEPNS0_21LayerContactPointInfoENS0_12ContactLayerES4_b
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_
0x00000071012169c8,O,000088,_ZN4ksys4phys6System14trackLayerPairENS0_12ContactLayerES2_
0x0000007101216a20,U,000136,_ZN4ksys4phys6System32removeRigidBodyFromContactSystemEPNS0_9RigidBodyE
0x0000007101216aa8,U,000008,
0x0000007101216ab0,U,000008,
Can't render this file because it is too large.
@@ -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; }
@@ -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;
+2 -2
View File
@@ -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;