From 4a1bb88bd565a54b71b95744f504d6de4ea7f6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Sat, 12 Feb 2022 10:51:02 +0100 Subject: [PATCH] ksys/phys: Declare factory functions for SphereShape/SphereRigidBody --- src/KingSystem/Physics/CMakeLists.txt | 2 ++ .../RigidBody/Shape/Sphere/physSphereRigidBody.cpp | 1 + .../RigidBody/Shape/Sphere/physSphereRigidBody.h | 13 +++++++++++++ .../RigidBody/Shape/Sphere/physSphereShape.cpp | 1 + .../RigidBody/Shape/Sphere/physSphereShape.h | 14 ++++++-------- .../Physics/RigidBody/physRigidBodyFactory.cpp | 9 ++------- .../Physics/RigidBody/physRigidBodyFactory.h | 3 ++- 7 files changed, 27 insertions(+), 16 deletions(-) create mode 100644 src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.cpp create mode 100644 src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.h diff --git a/src/KingSystem/Physics/CMakeLists.txt b/src/KingSystem/Physics/CMakeLists.txt index 0d559bea..65cbc4b5 100644 --- a/src/KingSystem/Physics/CMakeLists.txt +++ b/src/KingSystem/Physics/CMakeLists.txt @@ -68,6 +68,8 @@ target_sources(uking PRIVATE RigidBody/Shape/Polytope/physPolytopeRigidBody.h RigidBody/Shape/Polytope/physPolytopeShape.cpp RigidBody/Shape/Polytope/physPolytopeShape.h + RigidBody/Shape/Sphere/physSphereRigidBody.cpp + RigidBody/Shape/Sphere/physSphereRigidBody.h RigidBody/Shape/Sphere/physSphereShape.cpp RigidBody/Shape/Sphere/physSphereShape.h RigidBody/Shape/physShape.h diff --git a/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.cpp new file mode 100644 index 00000000..816b793a --- /dev/null +++ b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.cpp @@ -0,0 +1 @@ +#include "KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.h" diff --git a/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.h b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.h new file mode 100644 index 00000000..63deed17 --- /dev/null +++ b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereRigidBody.h @@ -0,0 +1,13 @@ +#pragma once + +#include "KingSystem/Physics/RigidBody/physRigidBodyFromShape.h" + +namespace ksys::phys { + +class SphereRigidBody : public RigidBodyFromShape { + SEAD_RTTI_OVERRIDE(SphereRigidBody, RigidBodyFromShape) +public: + static SphereRigidBody* make(RigidBodyInstanceParam* param, sead::Heap* heap); +}; + +} // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.cpp b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.cpp index e69de29b..ff497871 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.cpp +++ b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.cpp @@ -0,0 +1 @@ +#include "KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h" diff --git a/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h index 497f4a3f..1c24a50f 100644 --- a/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h +++ b/src/KingSystem/Physics/RigidBody/Shape/Sphere/physSphereShape.h @@ -9,20 +9,18 @@ namespace ksys::phys { class SphereParam; -struct SphereShape { - virtual ~SphereShape(); - - RigidBody* createBody(bool flag, const RigidBodyInstanceParam& params, sead::Heap* heap); -}; - struct SphereShapeParam { - SphereShape* createShape(sead::Heap* heap); - sead::Vector3f translate; float radius; CommonShapeParam common; }; +class SphereShape : public Shape { + SEAD_RTTI_OVERRIDE(SphereShape, Shape) +public: + static SphereShape* make(const SphereShapeParam& param, sead::Heap* heap); +}; + class SphereParam : public RigidBodyInstanceParam { SEAD_RTTI_OVERRIDE(SphereParam, RigidBodyInstanceParam) public: diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp index 77f758da..f66707dd 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp @@ -23,13 +23,8 @@ static RigidBodyType* createRigidBody(RigidBodyInstanceParam* param, sead::Heap* return RigidBodyFromShape::make(*shape, true, *param, heap); } -RigidBody* RigidBodyFactory::createSphere(RigidBodyInstanceParam* params, sead::Heap* heap) { - if (params->isDynamicSensor()) - params->motion_type = MotionType::Keyframed; - - auto* v = sead::DynamicCast(params); - auto* shape = v->shape.createShape(heap); - return shape->createBody(true, *params, heap); +SphereRigidBody* RigidBodyFactory::createSphere(RigidBodyInstanceParam* params, sead::Heap* heap) { + return createRigidBody(params, heap); } CapsuleRigidBody* RigidBodyFactory::createCapsule(RigidBodyInstanceParam* params, diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h index c435218f..246bed89 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h @@ -16,10 +16,11 @@ class CylinderWaterRigidBody; class PolytopeRigidBody; class RigidBody; struct RigidBodyInstanceParam; +class SphereRigidBody; class RigidBodyFactory { public: - static RigidBody* createSphere(RigidBodyInstanceParam* params, sead::Heap* heap); + 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,