From 5d3fd32988b3137f0a7325e2545a2cf82347acf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Wed, 2 Feb 2022 15:52:26 +0100 Subject: [PATCH] ksys/phys: Add BoxWaterRigidBody::make --- data/uking_functions.csv | 6 ++--- .../RigidBody/Shape/physBoxWaterRigidBody.cpp | 5 ++++ .../RigidBody/physRigidBodyFactory.cpp | 25 +++++++++++++------ .../Physics/RigidBody/physRigidBodyFactory.h | 3 ++- .../RigidBody/physRigidBodyFromShape.h | 5 ++++ 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/data/uking_functions.csv b/data/uking_functions.csv index 8107f359..c4f1217e 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -83166,7 +83166,7 @@ Address,Quality,Size,Name 0x0000007100f97428,O,000068,_ZN4ksys4phys12BoxRigidBody17getCollisionMasksEPNS0_9RigidBody14CollisionMasksE 0x0000007100f9746c,O,000288,_ZNK4ksys4phys12BoxRigidBody27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE 0x0000007100f9758c,O,000092,_ZNK4ksys4phys12BoxRigidBody18getRuntimeTypeInfoEv -0x0000007100f975e8,U,000004, +0x0000007100f975e8,O,000004,_ZN4ksys4phys17BoxWaterRigidBody4makeEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE 0x0000007100f975ec,O,000088,_ZN4ksys4phys17BoxWaterRigidBodyC1EP12hkpRigidBodyPNS0_13BoxWaterShapeENS0_16ContactLayerTypeERKN4sead14SafeStringBaseIcEEbPNS7_4HeapE 0x0000007100f97644,O,000076,_ZN4ksys4phys17BoxWaterRigidBodyD1Ev 0x0000007100f97690,O,000076,_ZThn32_N4ksys4phys17BoxWaterRigidBodyD1Ev @@ -83277,7 +83277,7 @@ Address,Quality,Size,Name 0x0000007100f992f8,O,000188,_ZN4ksys4phys16RigidBodyFactory14createCylinderEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE 0x0000007100f993b4,O,000188,_ZN4ksys4phys16RigidBodyFactory19createCylinderWaterEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE 0x0000007100f99470,O,000188,_ZN4ksys4phys16RigidBodyFactory9createBoxEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE -0x0000007100f9952c,U,000188, +0x0000007100f9952c,O,000188,_ZN4ksys4phys16RigidBodyFactory14createBoxWaterEPNS0_22RigidBodyInstanceParamEPN4sead4HeapE 0x0000007100f995e8,U,000188, 0x0000007100f996a4,U,000188, 0x0000007100f99760,U,000264, @@ -83547,7 +83547,7 @@ Address,Quality,Size,Name 0x0000007100fa9fac,O,000120,_ZNK4ksys4phys17RigidBodyAccessor16getPointVelocityEPN4sead7Vector3IfEERKS4_ 0x0000007100faa024,O,000020,_ZNK4ksys4phys17RigidBodyAccessor13getTimeFactorEv 0x0000007100faa038,O,000064,_ZNK4ksys4phys17RigidBodyAccessor20getDeltaCenterOfMassEPN4sead7Vector3IfEES5_ -0x0000007100faa078,O,000564,_ZNK4ksys4phys13BoxShapeParam11createShapeEPN4sead4HeapE +0x0000007100faa078,O,000564,_ZN4ksys4phys8BoxShape4makeERKNS0_13BoxShapeParamEPN4sead4HeapE 0x0000007100faa2ac,O,000224,_ZNK4ksys4phys8BoxShape5cloneEPN4sead4HeapE 0x0000007100faa38c,O,000048,_ZN4ksys4phys8BoxShape15setMaterialMaskERKNS0_12MaterialMaskE 0x0000007100faa3bc,O,000364,_ZN4ksys4phys8BoxShapeC1ERKNS0_13BoxShapeParamEP11hkpBoxShapeP23hkpConvexTransformShape diff --git a/src/KingSystem/Physics/RigidBody/Shape/physBoxWaterRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/physBoxWaterRigidBody.cpp index 13ab6a92..d11f7d10 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/physBoxWaterRigidBody.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/physBoxWaterRigidBody.cpp @@ -1,8 +1,13 @@ #include "KingSystem/Physics/RigidBody/Shape/physBoxWaterRigidBody.h" #include "KingSystem/Physics/RigidBody/Shape/physBoxWaterShape.h" +#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" namespace ksys::phys { +BoxWaterRigidBody* BoxWaterRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) { + return RigidBodyFactory::createBoxWater(param, heap); +} + BoxWaterRigidBody::BoxWaterRigidBody(hkpRigidBody* hk_body, BoxWaterShape* shape, ContactLayerType layer_type, const sead::SafeString& name, bool unused, sead::Heap* heap) diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp index 03825ea8..9c43ae19 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp @@ -1,10 +1,11 @@ #include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h" - #include "KingSystem/Physics/RigidBody/Shape/physBoxShape.h" +#include "KingSystem/Physics/RigidBody/Shape/physBoxWaterShape.h" #include "KingSystem/Physics/RigidBody/Shape/physCapsuleShape.h" #include "KingSystem/Physics/RigidBody/Shape/physCylinderShape.h" #include "KingSystem/Physics/RigidBody/Shape/physCylinderWaterShape.h" #include "KingSystem/Physics/RigidBody/Shape/physSphereShape.h" +#include "KingSystem/Physics/RigidBody/physRigidBodyFromShape.h" namespace ksys::phys { @@ -44,13 +45,23 @@ RigidBody* RigidBodyFactory::createCylinderWater(RigidBodyInstanceParam* params, return shape->createBody(true, *params, heap); } -BoxRigidBody* RigidBodyFactory::createBox(RigidBodyInstanceParam* params, sead::Heap* heap) { - if (params->isDynamicSensor()) - params->motion_type = MotionType::Keyframed; +template +static RigidBodyType* createRigidBody(RigidBodyInstanceParam* param, sead::Heap* heap) { + if (param->isDynamicSensor()) + param->motion_type = MotionType::Keyframed; - auto* v = sead::DynamicCast(params); - auto* shape = BoxShape::make(v->shape, heap); - return shape->createBody(true, *params, heap); + auto* v = sead::DynamicCast(param); + auto* shape = ShapeType::make(v->shape, heap); + return RigidBodyFromShape::make(*shape, true, *param, 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); } } // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h index 75f563db..c9ddcc7c 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h @@ -9,6 +9,7 @@ class Heap; namespace ksys::phys { class BoxRigidBody; +class BoxWaterRigidBody; class RigidBody; struct RigidBodyInstanceParam; @@ -19,7 +20,7 @@ public: static RigidBody* createCylinder(RigidBodyInstanceParam* params, sead::Heap* heap); static RigidBody* createCylinderWater(RigidBodyInstanceParam* params, sead::Heap* heap); static BoxRigidBody* createBox(RigidBodyInstanceParam* params, sead::Heap* heap); - static RigidBody* createWaterBox(RigidBodyInstanceParam* params, sead::Heap* heap); + static BoxWaterRigidBody* createBoxWater(RigidBodyInstanceParam* params, sead::Heap* heap); static RigidBody* createPolytope(RigidBodyInstanceParam* params, sead::Heap* heap); static RigidBody* createCollection(RigidBodyInstanceParam* params, sead::Heap* heap); }; diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h b/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h index afaa5b90..2d3cacb1 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFromShape.h @@ -10,6 +10,11 @@ class Shape; class RigidBodyFromShape : public RigidBody { SEAD_RTTI_OVERRIDE(RigidBodyFromShape, RigidBody) public: + // TODO + template + static RigidBodyType* make(const ShapeType& shape, bool set_flag_10, + const RigidBodyInstanceParam& param, sead::Heap* heap); + RigidBodyFromShape(hkpRigidBody* hkp_rigid_body, ContactLayerType layer_type, const sead::SafeString& name, bool set_flag_10, sead::Heap* heap); ~RigidBodyFromShape() override;