From 67273762913ec6843a57c406e7ccb293cb9b9b1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sun, 13 Feb 2022 12:33:23 +0100 Subject: [PATCH] ksys/phys: Merge RigidBodyFactory into RigidBodyFromShape RigidBodyFactory is right between RigidBodyFromResource and RigidBodyFromShape functions, and some Factory functions are known to be in the same TU as RigidBodyFromShape functions. Some factory functions also use FromShape non-static member functions. --- data/uking_functions.csv | 16 ++-- src/KingSystem/Physics/CMakeLists.txt | 2 - .../RigidBody/Shape/Box/physBoxRigidBody.cpp | 3 +- .../Shape/BoxWater/physBoxWaterRigidBody.cpp | 3 +- .../Shape/Capsule/physCapsuleRigidBody.cpp | 3 +- .../Shape/Cylinder/physCylinderRigidBody.cpp | 3 +- .../physCylinderWaterRigidBody.cpp | 3 +- .../Shape/List/physListShapeRigidBody.cpp | 3 +- .../Shape/Polytope/physPolytopeRigidBody.cpp | 3 +- .../RigidBody/physRigidBodyFactory.cpp | 64 --------------- .../Physics/RigidBody/physRigidBodyFactory.h | 35 -------- .../RigidBody/physRigidBodyFromShape.cpp | 81 +++++++++++-------- .../RigidBody/physRigidBodyFromShape.h | 36 +++++++-- .../Physics/RigidBody/physRigidBodyParam.cpp | 1 - 14 files changed, 94 insertions(+), 162 deletions(-) delete mode 100644 src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp delete mode 100644 src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h diff --git a/data/uking_functions.csv b/data/uking_functions.csv index f9d61187..86da07e6 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -83272,14 +83272,14 @@ Address,Quality,Size,Name 0x0000007100f99050,O,000008,_ZN4ksys4phys21RigidBodyFromResource9getVolumeEv 0x0000007100f99058,O,000204,_ZNK4ksys4phys21RigidBodyFromResource27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x0000007100f99124,O,000092,_ZNK4ksys4phys21RigidBodyFromResource18getRuntimeTypeInfoEv -0x0000007100f99180,O,000188,_ZN4ksys4phys16RigidBodyFactory12createSphereEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f9923c,O,000188,_ZN4ksys4phys16RigidBodyFactory13createCapsuleEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f992f8,O,000188,_ZN4ksys4phys16RigidBodyFactory14createCylinderEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f993b4,O,000188,_ZN4ksys4phys16RigidBodyFactory19createCylinderWaterEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f99470,O,000188,_ZN4ksys4phys16RigidBodyFactory9createBoxEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f9952c,O,000188,_ZN4ksys4phys16RigidBodyFactory14createBoxWaterEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f995e8,O,000188,_ZN4ksys4phys16RigidBodyFactory14createPolytopeEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f996a4,O,000188,_ZN4ksys4phys16RigidBodyFactory10createListEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f99180,O,000188,_ZN4ksys4phys18RigidBodyFromShape12createSphereEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f9923c,O,000188,_ZN4ksys4phys18RigidBodyFromShape13createCapsuleEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f992f8,O,000188,_ZN4ksys4phys18RigidBodyFromShape14createCylinderEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f993b4,O,000188,_ZN4ksys4phys18RigidBodyFromShape19createCylinderWaterEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f99470,O,000188,_ZN4ksys4phys18RigidBodyFromShape9createBoxEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f9952c,O,000188,_ZN4ksys4phys18RigidBodyFromShape14createBoxWaterEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f995e8,O,000188,_ZN4ksys4phys18RigidBodyFromShape14createPolytopeEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE +0x0000007100f996a4,O,000188,_ZN4ksys4phys18RigidBodyFromShape10createListEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE 0x0000007100f99760,U,000264, 0x0000007100f99868,U,000036, 0x0000007100f9988c,U,000652, diff --git a/src/KingSystem/Physics/CMakeLists.txt b/src/KingSystem/Physics/CMakeLists.txt index 268622b4..68940afd 100644 --- a/src/KingSystem/Physics/CMakeLists.txt +++ b/src/KingSystem/Physics/CMakeLists.txt @@ -21,8 +21,6 @@ target_sources(uking PRIVATE RigidBody/physRigidBody.h RigidBody/physRigidBodyAccessor.cpp RigidBody/physRigidBodyAccessor.h - RigidBody/physRigidBodyFactory.cpp - RigidBody/physRigidBodyFactory.h RigidBody/physRigidBodyFromResource.cpp RigidBody/physRigidBodyFromResource.h RigidBody/physRigidBodyFromShape.cpp diff --git a/src/KingSystem/Physics/RigidBody/Shape/Box/physBoxRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/Box/physBoxRigidBody.cpp index e3ab57f5..e4a611c9 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/Box/physBoxRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/Box/physBoxRigidBody.cpp @@ -1,12 +1,11 @@ #include "KingSystem/Physics/RigidBody/Shape/Box/physBoxRigidBody.h" #include #include "KingSystem/Physics/RigidBody/Shape/Box/physBoxShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" namespace ksys::phys { BoxRigidBody* BoxRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createBox(param, heap); + return createBox(param, heap); } BoxRigidBody::BoxRigidBody(hkpRigidBody* hk_body, BoxShape* shape, ContactLayerType layer_type, diff --git a/src/KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterRigidBody.cpp index 78039a0b..9c7385f3 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterRigidBody.cpp @@ -1,11 +1,10 @@ #include "KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterRigidBody.h" #include "KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" namespace ksys::phys { BoxWaterRigidBody* BoxWaterRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createBoxWater(param, heap); + return createBoxWater(param, heap); } BoxWaterRigidBody::BoxWaterRigidBody(hkpRigidBody* hk_body, BoxWaterShape* shape, diff --git a/src/KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleRigidBody.cpp index 5c392da8..afc1528a 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleRigidBody.cpp @@ -1,13 +1,12 @@ #include "KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleRigidBody.h" #include #include "KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" #include "KingSystem/Utils/SafeDelete.h" namespace ksys::phys { CapsuleRigidBody* CapsuleRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createCapsule(param, heap); + return createCapsule(param, heap); } CapsuleRigidBody::CapsuleRigidBody(hkpRigidBody* hk_body, CapsuleShape* shape, diff --git a/src/KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderRigidBody.cpp index 17def21e..b5ea8f40 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderRigidBody.cpp @@ -1,13 +1,12 @@ #include "KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderRigidBody.h" #include #include "KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" #include "KingSystem/Utils/SafeDelete.h" namespace ksys::phys { CylinderRigidBody* CylinderRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createCylinder(param, heap); + return createCylinder(param, heap); } CylinderRigidBody::CylinderRigidBody(hkpRigidBody* hk_body, CylinderShape* shape, diff --git a/src/KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterRigidBody.cpp index e33a0c83..4b315d42 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterRigidBody.cpp @@ -1,13 +1,12 @@ #include "KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterRigidBody.h" #include "KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" #include "KingSystem/Utils/SafeDelete.h" namespace ksys::phys { CylinderWaterRigidBody* CylinderWaterRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createCylinderWater(param, heap); + return createCylinderWater(param, heap); } CylinderWaterRigidBody::CylinderWaterRigidBody(hkpRigidBody* hk_body, CylinderWaterShape* shape, diff --git a/src/KingSystem/Physics/RigidBody/Shape/List/physListShapeRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/List/physListShapeRigidBody.cpp index 6e9a5969..ad4d64fd 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/List/physListShapeRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/List/physListShapeRigidBody.cpp @@ -1,12 +1,11 @@ #include "KingSystem/Physics/RigidBody/Shape/List/physListShapeRigidBody.h" #include "KingSystem/Physics/RigidBody/Shape/List/physListShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" #include "KingSystem/Utils/SafeDelete.h" namespace ksys::phys { ListShapeRigidBody* ListShapeRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createList(param, heap); + return createList(param, heap); } ListShapeRigidBody::ListShapeRigidBody(hkpRigidBody* hk_body, ListShape* shape, diff --git a/src/KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeRigidBody.cpp index b0b608c9..010c612d 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeRigidBody.cpp @@ -1,12 +1,11 @@ #include "KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeRigidBody.h" #include "KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" #include "KingSystem/Utils/SafeDelete.h" namespace ksys::phys { PolytopeRigidBody* PolytopeRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { - return RigidBodyFactory::createPolytope(param, heap); + return createPolytope(param, heap); } PolytopeRigidBody::PolytopeRigidBody(hkpRigidBody* hk_body, PolytopeShape* shape, diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp deleted file mode 100644 index 9e7cf5bf..00000000 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" -#include "KingSystem/Physics/RigidBody/Shape/Box/physBoxShape.h" -#include "KingSystem/Physics/RigidBody/Shape/BoxWater/physBoxWaterShape.h" -#include "KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleRigidBody.h" -#include "KingSystem/Physics/RigidBody/Shape/Capsule/physCapsuleShape.h" -#include "KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderRigidBody.h" -#include "KingSystem/Physics/RigidBody/Shape/Cylinder/physCylinderShape.h" -#include "KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterRigidBody.h" -#include "KingSystem/Physics/RigidBody/Shape/CylinderWater/physCylinderWaterShape.h" -#include "KingSystem/Physics/RigidBody/Shape/List/physListShape.h" -#include "KingSystem/Physics/RigidBody/Shape/Polytope/physPolytopeShape.h" -#include "KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFromShape.h" - -namespace ksys::phys { - -template -static RigidBodyType* createRigidBody(RigidBodyInstanceParam* param, sead::Heap* heap) { - if (param->isDynamicSensor()) - param->motion_type = MotionType::Keyframed; - - auto* v = sead::DynamicCast(param); - auto* shape = ShapeType::make(*v, heap); - return RigidBodyFromShape::make(shape, true, *param, heap); -} - -SphereRigidBody* RigidBodyFactory::createSphere(RigidBodyInstanceParam* params, sead::Heap* heap) { - return createRigidBody(params, heap); -} - -CapsuleRigidBody* RigidBodyFactory::createCapsule(RigidBodyInstanceParam* params, - sead::Heap* heap) { - return createRigidBody(params, heap); -} - -CylinderRigidBody* RigidBodyFactory::createCylinder(RigidBodyInstanceParam* params, - sead::Heap* heap) { - return createRigidBody(params, heap); -} - -CylinderWaterRigidBody* RigidBodyFactory::createCylinderWater(RigidBodyInstanceParam* params, - sead::Heap* heap) { - return createRigidBody(params, heap); -} - -BoxRigidBody* RigidBodyFactory::createBox(RigidBodyInstanceParam* params, sead::Heap* heap) { - return createRigidBody(params, heap); -} - -BoxWaterRigidBody* RigidBodyFactory::createBoxWater(RigidBodyInstanceParam* params, - sead::Heap* heap) { - return createRigidBody(params, heap); -} - -PolytopeRigidBody* RigidBodyFactory::createPolytope(RigidBodyInstanceParam* params, - sead::Heap* heap) { - return createRigidBody(params, heap); -} - -ListShapeRigidBody* RigidBodyFactory::createList(RigidBodyInstanceParam* params, sead::Heap* heap) { - return createRigidBody(params, heap); -} - -} // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h deleted file mode 100644 index d8207ec7..00000000 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include - -namespace sead { -class Heap; -} // namespace sead - -namespace ksys::phys { - -class BoxRigidBody; -class BoxWaterRigidBody; -class CapsuleRigidBody; -class CylinderRigidBody; -class CylinderWaterRigidBody; -class ListShapeRigidBody; -class PolytopeRigidBody; -class RigidBody; -struct RigidBodyInstanceParam; -class SphereRigidBody; - -class RigidBodyFactory { -public: - static SphereRigidBody* createSphere(RigidBodyInstanceParam* params, sead::Heap* heap); - static CapsuleRigidBody* createCapsule(RigidBodyInstanceParam* params, sead::Heap* heap); - static CylinderRigidBody* createCylinder(RigidBodyInstanceParam* params, sead::Heap* heap); - static CylinderWaterRigidBody* createCylinderWater(RigidBodyInstanceParam* params, - sead::Heap* heap); - static BoxRigidBody* createBox(RigidBodyInstanceParam* params, sead::Heap* heap); - static BoxWaterRigidBody* createBoxWater(RigidBodyInstanceParam* params, sead::Heap* heap); - static PolytopeRigidBody* createPolytope(RigidBodyInstanceParam* params, sead::Heap* heap); - static ListShapeRigidBody* createList(RigidBodyInstanceParam* params, sead::Heap* heap); -}; - -} // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.cpp index 4e387eaf..d1df815c 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.cpp @@ -25,6 +25,44 @@ namespace ksys::phys { +SphereRigidBody* RigidBodyFromShape::createSphere(RigidBodyInstanceParam* param, sead::Heap* heap) { + return make(param, heap); +} + +CapsuleRigidBody* RigidBodyFromShape::createCapsule(RigidBodyInstanceParam* param, + sead::Heap* heap) { + return make(param, heap); +} + +CylinderRigidBody* RigidBodyFromShape::createCylinder(RigidBodyInstanceParam* param, + sead::Heap* heap) { + return make(param, heap); +} + +CylinderWaterRigidBody* RigidBodyFromShape::createCylinderWater(RigidBodyInstanceParam* param, + sead::Heap* heap) { + return make(param, heap); +} + +BoxRigidBody* RigidBodyFromShape::createBox(RigidBodyInstanceParam* param, sead::Heap* heap) { + return make(param, heap); +} + +BoxWaterRigidBody* RigidBodyFromShape::createBoxWater(RigidBodyInstanceParam* param, + sead::Heap* heap) { + return make(param, heap); +} + +PolytopeRigidBody* RigidBodyFromShape::createPolytope(RigidBodyInstanceParam* param, + sead::Heap* heap) { + return make(param, heap); +} + +ListShapeRigidBody* RigidBodyFromShape::createList(RigidBodyInstanceParam* param, + sead::Heap* heap) { + return make(param, heap); +} + RigidBodyFromShape::RigidBodyFromShape(hkpRigidBody* hkp_rigid_body, ContactLayerType layer_type, const sead::SafeString& name, bool set_flag_10, sead::Heap* heap) @@ -92,6 +130,16 @@ float RigidBodyFromShape::updateScale_(float scale, float old_scale) { return scale; } +template +RigidBodyT* RigidBodyFromShape::make(RigidBodyInstanceParam* param, sead::Heap* heap) { + if (param->isDynamicSensor()) + param->motion_type = MotionType::Keyframed; + + auto* v = sead::DynamicCast(param); + auto* shape = ShapeT::make(*v, heap); + return make(shape, true, *param, heap); +} + template RigidBodyT* RigidBodyFromShape::make(ShapeT* shape, bool set_flag_10, const RigidBodyInstanceParam& param, sead::Heap* heap) { @@ -179,37 +227,4 @@ RigidBodyT* RigidBodyFromShape::make(ShapeT* shape, bool set_flag_10, return static_cast(body); } -template SphereRigidBody* RigidBodyFromShape::make(SphereShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template CapsuleRigidBody* RigidBodyFromShape::make(CapsuleShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template CylinderRigidBody* RigidBodyFromShape::make(CylinderShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template CylinderWaterRigidBody* RigidBodyFromShape::make(CylinderWaterShape* shape, - bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template BoxRigidBody* RigidBodyFromShape::make(BoxShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template BoxWaterRigidBody* RigidBodyFromShape::make(BoxWaterShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template PolytopeRigidBody* RigidBodyFromShape::make(PolytopeShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - -template ListShapeRigidBody* RigidBodyFromShape::make(ListShape* shape, bool set_flag_10, - const RigidBodyInstanceParam& param, - sead::Heap* heap); - } // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h b/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h index 2ea94cbd..30cec9cb 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h @@ -6,15 +6,29 @@ namespace ksys::phys { class MaterialMask; class Shape; +struct RigidBodyInstanceParam; + +class BoxRigidBody; +class BoxWaterRigidBody; +class CapsuleRigidBody; +class CylinderRigidBody; +class CylinderWaterRigidBody; +class ListShapeRigidBody; +class PolytopeRigidBody; +class SphereRigidBody; class RigidBodyFromShape : public RigidBody { SEAD_RTTI_OVERRIDE(RigidBodyFromShape, RigidBody) public: - /// Create a RigidBodyFromShape with the specified shape and rigid body parameters. - /// @param shape Must not be null. - template - static RigidBodyT* make(ShapeT* shape, bool set_flag_10, const RigidBodyInstanceParam& param, - sead::Heap* heap); + static SphereRigidBody* createSphere(RigidBodyInstanceParam* param, sead::Heap* heap); + static CapsuleRigidBody* createCapsule(RigidBodyInstanceParam* param, sead::Heap* heap); + static CylinderRigidBody* createCylinder(RigidBodyInstanceParam* param, sead::Heap* heap); + static CylinderWaterRigidBody* createCylinderWater(RigidBodyInstanceParam* param, + sead::Heap* heap); + static BoxRigidBody* createBox(RigidBodyInstanceParam* param, sead::Heap* heap); + static BoxWaterRigidBody* createBoxWater(RigidBodyInstanceParam* param, sead::Heap* heap); + static PolytopeRigidBody* createPolytope(RigidBodyInstanceParam* param, sead::Heap* heap); + static ListShapeRigidBody* createList(RigidBodyInstanceParam* param, sead::Heap* heap); RigidBodyFromShape(hkpRigidBody* hkp_rigid_body, ContactLayerType layer_type, const sead::SafeString& name, bool set_flag_10, sead::Heap* heap); @@ -28,6 +42,18 @@ protected: virtual Shape* getShape_() = 0; virtual const Shape* getShape_() const = 0; + +private: + /// Create a RigidBodyFromShape with the specified rigid body parameters. + /// @param param Must be an instance of ParamT. + template + static inline RigidBodyT* make(RigidBodyInstanceParam* param, sead::Heap* heap); + + /// Create a RigidBodyFromShape with the specified shape and rigid body parameters. + /// @param shape Must not be null. + template + static RigidBodyT* make(ShapeT* shape, bool set_flag_10, const RigidBodyInstanceParam& param, + sead::Heap* heap); }; } // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp index 45aca215..0ae79515 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp @@ -18,7 +18,6 @@ #include "KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.h" #include "KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h" #include "KingSystem/Physics/RigidBody/Shape/physShapeParamObj.h" -#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" #include "KingSystem/Physics/System/physEntityGroupFilter.h" #include "KingSystem/Utils/SafeDelete.h"