summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-01-30 18:39:00 +0100
committerLéo Lam <leo@leolam.fr>2022-01-30 19:28:36 +0100
commitff2e2f9ff7a8b52b2f098bcda36f353ab9faa595 (patch)
treeecce476675c795570c508b3efd8631d0a79c3719 /src
parent716916d863024064d16666eefe306d78d00408a3 (diff)
ksys/phys: Start adding BoxRigidBody
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/Physics/CMakeLists.txt2
-rw-r--r--src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.cpp34
-rw-r--r--src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.h29
-rw-r--r--src/KingSystem/Physics/RigidBody/Shape/physBoxShape.h7
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBody.cpp2
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBody.h2
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp2
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h3
8 files changed, 74 insertions, 7 deletions
diff --git a/src/KingSystem/Physics/CMakeLists.txt b/src/KingSystem/Physics/CMakeLists.txt
index 4db8ebb6..77ab1141 100644
--- a/src/KingSystem/Physics/CMakeLists.txt
+++ b/src/KingSystem/Physics/CMakeLists.txt
@@ -42,6 +42,8 @@ target_sources(uking PRIVATE
RigidBody/Shape/physBoxShape.cpp
RigidBody/Shape/physBoxShape.h
+ RigidBody/Shape/physBoxRigidBody.cpp
+ RigidBody/Shape/physBoxRigidBody.h
RigidBody/Shape/physCapsuleShape.cpp
RigidBody/Shape/physCapsuleShape.h
RigidBody/Shape/physCharacterPrismShape.cpp
diff --git a/src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.cpp b/src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.cpp
new file mode 100644
index 00000000..934f7c8c
--- /dev/null
+++ b/src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.cpp
@@ -0,0 +1,34 @@
+#include "KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.h"
+#include "KingSystem/Physics/RigidBody/Shape/physBoxShape.h"
+#include "KingSystem/Physics/RigidBody/physRigidBodyFactory.h"
+
+namespace ksys::phys {
+
+BoxRigidBody* BoxRigidBody::make(RigidBodyInstanceParam* param, sead::Heap* heap) {
+ return RigidBodyFactory::createBox(param, heap);
+}
+
+BoxRigidBody::BoxRigidBody(hkpRigidBody* hk_body, BoxShape* shape, ContactLayerType layer_type,
+ const sead::SafeString& name, bool set_flag_10, sead::Heap* heap)
+ : RigidBodyFromShape(hk_body, layer_type, name, set_flag_10, heap), mShape(shape) {}
+
+BoxRigidBody::~BoxRigidBody() {
+ if (hasFlag(RigidBody::Flag::_10) && mShape) {
+ delete mShape;
+ mShape = nullptr;
+ }
+}
+
+float BoxRigidBody::getVolume() {
+ return mShape->getVolume();
+}
+
+Shape* BoxRigidBody::getShape_() {
+ return mShape;
+}
+
+const Shape* BoxRigidBody::getShape_() const {
+ return mShape;
+}
+
+} // namespace ksys::phys
diff --git a/src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.h b/src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.h
new file mode 100644
index 00000000..bf023334
--- /dev/null
+++ b/src/KingSystem/Physics/RigidBody/Shape/physBoxRigidBody.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#include "KingSystem/Physics/RigidBody/physRigidBodyFromShape.h"
+
+namespace ksys::phys {
+
+struct BoxShape;
+struct RigidBodyInstanceParam;
+
+class BoxRigidBody : public RigidBodyFromShape {
+ SEAD_RTTI_OVERRIDE(BoxRigidBody, RigidBodyFromShape)
+public:
+ static BoxRigidBody* make(RigidBodyInstanceParam* param, sead::Heap* heap);
+
+ BoxRigidBody(hkpRigidBody* hk_body, BoxShape* shape, ContactLayerType layer_type,
+ const sead::SafeString& name, bool set_flag_10, sead::Heap* heap);
+ ~BoxRigidBody() override;
+
+ float getVolume() override;
+
+protected:
+ Shape* getShape_() override;
+ const Shape* getShape_() const override;
+ void m9() override;
+
+ BoxShape* mShape;
+};
+
+} // namespace ksys::phys
diff --git a/src/KingSystem/Physics/RigidBody/Shape/physBoxShape.h b/src/KingSystem/Physics/RigidBody/Shape/physBoxShape.h
index fbaa11e4..9da4a2e6 100644
--- a/src/KingSystem/Physics/RigidBody/Shape/physBoxShape.h
+++ b/src/KingSystem/Physics/RigidBody/Shape/physBoxShape.h
@@ -8,11 +8,12 @@
namespace ksys::phys {
class BoxParam;
+class BoxRigidBody;
-struct BoxShape {
- virtual ~BoxShape();
+struct BoxShape : Shape {
+ ~BoxShape() override;
- RigidBody* createBody(bool flag, const RigidBodyInstanceParam& params, sead::Heap* heap);
+ BoxRigidBody* createBody(bool flag, const RigidBodyInstanceParam& params, sead::Heap* heap);
};
struct BoxShapeParam {
diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp
index c84473d1..e459b478 100644
--- a/src/KingSystem/Physics/RigidBody/physRigidBody.cpp
+++ b/src/KingSystem/Physics/RigidBody/physRigidBody.cpp
@@ -1486,7 +1486,7 @@ float RigidBody::updateScale_(float scale, float old_scale) {
return old_scale;
}
-float RigidBody::m4() {
+float RigidBody::getVolume() {
return 0.0;
}
diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.h b/src/KingSystem/Physics/RigidBody/physRigidBody.h
index 4e852722..95bf0e86 100644
--- a/src/KingSystem/Physics/RigidBody/physRigidBody.h
+++ b/src/KingSystem/Physics/RigidBody/physRigidBody.h
@@ -128,7 +128,7 @@ public:
const sead::SafeString& name, sead::Heap* heap, bool set_flag_10);
~RigidBody() override;
- virtual float m4();
+ virtual float getVolume();
bool initMotionAccessorForDynamicMotion(sead::Heap* heap);
bool initMotionAccessor(const RigidBodyInstanceParam& param, sead::Heap* heap,
diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp
index 13d552cb..7fbdcc32 100644
--- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp
+++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.cpp
@@ -44,7 +44,7 @@ RigidBody* RigidBodyFactory::createCylinderWater(RigidBodyInstanceParam* params,
return shape->createBody(true, *params, heap);
}
-RigidBody* RigidBodyFactory::createBox(RigidBodyInstanceParam* params, sead::Heap* heap) {
+BoxRigidBody* RigidBodyFactory::createBox(RigidBodyInstanceParam* params, sead::Heap* heap) {
if (params->isDynamicSensor())
params->motion_type = MotionType::Keyframed;
diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h
index d4e61915..75f563db 100644
--- a/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h
+++ b/src/KingSystem/Physics/RigidBody/physRigidBodyFactory.h
@@ -8,6 +8,7 @@ class Heap;
namespace ksys::phys {
+class BoxRigidBody;
class RigidBody;
struct RigidBodyInstanceParam;
@@ -17,7 +18,7 @@ public:
static RigidBody* createCapsule(RigidBodyInstanceParam* params, sead::Heap* heap);
static RigidBody* createCylinder(RigidBodyInstanceParam* params, sead::Heap* heap);
static RigidBody* createCylinderWater(RigidBodyInstanceParam* params, sead::Heap* heap);
- static RigidBody* createBox(RigidBodyInstanceParam* params, sead::Heap* heap);
+ static BoxRigidBody* createBox(RigidBodyInstanceParam* params, sead::Heap* heap);
static RigidBody* createWaterBox(RigidBodyInstanceParam* params, sead::Heap* heap);
static RigidBody* createPolytope(RigidBodyInstanceParam* params, sead::Heap* heap);
static RigidBody* createCollection(RigidBodyInstanceParam* params, sead::Heap* heap);