diff options
Diffstat (limited to 'src/KingSystem/Physics/System')
| -rw-r--r-- | src/KingSystem/Physics/System/physLayerContactPointInfo.h | 2 | ||||
| -rw-r--r-- | src/KingSystem/Physics/System/physSystem.cpp | 23 | ||||
| -rw-r--r-- | src/KingSystem/Physics/System/physSystem.h | 4 |
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 b320a04e..acc926fc 100644 --- a/src/KingSystem/Physics/System/physSystem.cpp +++ b/src/KingSystem/Physics/System/physSystem.cpp @@ -8,10 +8,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" @@ -56,6 +58,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 { @@ -103,10 +109,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 765f4ce4..9c48510d 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; @@ -154,8 +155,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; |
