summaryrefslogtreecommitdiff
path: root/src/KingSystem/Physics/System/physSystem.cpp
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-01-21 12:39:01 +0100
committerLéo Lam <leo@leolam.fr>2022-01-21 12:43:24 +0100
commitc29267564614d1421bbb2e4aab52743f2d71de98 (patch)
treecfe754db629bbe654818205dc22283410651fe97 /src/KingSystem/Physics/System/physSystem.cpp
parent98c69ebaef70dd81d8479f227c33559e0100ff58 (diff)
ksys/phys: Rename MemSystem to System
It was called MemSystem in the IDB because of a string in ksys::InitializeApp that referred to MemSystem initialisation as "Physics Memory System"; however that string actually referred to an initialisation step for the physics system, not to the name of the subsystem itself.
Diffstat (limited to 'src/KingSystem/Physics/System/physSystem.cpp')
-rw-r--r--src/KingSystem/Physics/System/physSystem.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/KingSystem/Physics/System/physSystem.cpp b/src/KingSystem/Physics/System/physSystem.cpp
new file mode 100644
index 00000000..df841497
--- /dev/null
+++ b/src/KingSystem/Physics/System/physSystem.cpp
@@ -0,0 +1,71 @@
+#include "KingSystem/Physics/System/physSystem.h"
+#include "KingSystem/Physics/Cloth/physClothResource.h"
+#include "KingSystem/Physics/Ragdoll/physRagdollControllerKeyList.h"
+#include "KingSystem/Physics/Ragdoll/physRagdollResource.h"
+#include "KingSystem/Physics/RigidBody/TeraMesh/physTeraMeshRigidBodyResource.h"
+#include "KingSystem/Physics/RigidBody/physRigidBodyResource.h"
+#include "KingSystem/Physics/StaticCompound/physStaticCompound.h"
+#include "KingSystem/Physics/SupportBone/physSupportBoneResource.h"
+#include "KingSystem/Physics/System/physContactMgr.h"
+#include "KingSystem/Physics/System/physEntityGroupFilter.h"
+#include "KingSystem/Physics/System/physMaterialTable.h"
+#include "KingSystem/Physics/System/physRigidContactPoints.h"
+#include "KingSystem/Physics/System/physSensorGroupFilter.h"
+#include "KingSystem/Physics/System/physSystemData.h"
+#include "KingSystem/Resource/resEntryFactory.h"
+#include "KingSystem/Resource/resSystem.h"
+
+namespace ksys::phys {
+
+SEAD_SINGLETON_DISPOSER_IMPL(System)
+
+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");
+ res::registerEntryFactory(new (heap) res::EntryFactory<SupportBoneResource>(1.0, 0x100000),
+ "bphyssb");
+ res::registerEntryFactory(new (heap) res::EntryFactory<ClothResource>(2.0, 0x2800), "hkcl");
+ res::registerEntryFactory(new (heap) res::EntryFactory<StaticCompound>(1.3, 0x40000), "hksc");
+ res::registerEntryFactory(new (heap) res::EntryFactory<TeraMeshRigidBodyResource>(1.0, 0x800),
+ "hktmrb");
+ res::registerEntryFactory(new (heap) res::EntryFactory<RagdollControllerKeyList>(1.0, 0x4000),
+ "brgcon");
+
+ mEntityGroupFilter = EntityGroupFilter::make(ContactLayer::EntityObject,
+ ContactLayer::EntityMeshVisualizer, heap);
+ mSensorGroupFilter = SensorGroupFilter::make(ContactLayer::SensorCustomReceiver, heap);
+ mGroupFilters.pushBack(mEntityGroupFilter);
+ mGroupFilters.pushBack(mSensorGroupFilter);
+
+ mContactMgr = new (heap) ContactMgr;
+ if (mContactMgr)
+ mContactMgr->init(heap);
+
+ mMaterialTable = new (heap) MaterialTable;
+
+ mSystemData = new (heap) SystemData;
+ mSystemData->load(mPhysicsSystemHeap, mEntityGroupFilter, mSensorGroupFilter, mMaterialTable,
+ mContactMgr);
+}
+
+RigidContactPoints* System::allocContactPoints(sead::Heap* heap, int num,
+ const sead::SafeString& name, int a, int b,
+ int c) const {
+ return mContactMgr->allocContactPoints(heap, num, name, a, b, c);
+}
+
+void System::freeContactPoints(RigidContactPoints* points) const {
+ mContactMgr->freeContactPoints(points);
+}
+
+RigidContactPointsEx* System::allocContactPointsEx(sead::Heap* heap, int num, int num2,
+ const sead::SafeString& name, int a, int b,
+ int c) const {
+ return mContactMgr->allocContactPointsEx(heap, num, num2, name, a, b, c);
+}
+
+void System::registerContactPoints(RigidContactPoints* points) const {
+ mContactMgr->registerContactPoints(points);
+}
+
+} // namespace ksys::phys