summaryrefslogtreecommitdiff
path: root/src/KingSystem/Physics/System/physSystem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/KingSystem/Physics/System/physSystem.cpp')
-rw-r--r--src/KingSystem/Physics/System/physSystem.cpp23
1 files changed, 23 insertions, 0 deletions
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;