summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-02-13 18:58:34 +0100
committerLéo Lam <leo@leolam.fr>2022-02-13 18:59:03 +0100
commit3512b78627490b952db0dc4b4a8fc58d49e8d55b (patch)
treeed4b83f833665178e6bb7ae319fa5b5e97c03292 /src
parentdb72086c68a0c21be855b5c21769d9607b2b20d2 (diff)
ksys/phys: Finish RigidBodyParam (add createEntityShapeBody)
Diffstat (limited to 'src')
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp22
-rw-r--r--src/KingSystem/Physics/RigidBody/physRigidBodyParam.h5
2 files changed, 25 insertions, 2 deletions
diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp b/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp
index 0ae79515..9339f5d7 100644
--- a/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp
+++ b/src/KingSystem/Physics/RigidBody/physRigidBodyParam.cpp
@@ -302,6 +302,28 @@ RigidBodyParam::createRigidBody(SystemGroupHandler* group_handler, sead::Heap* h
return list_body;
}
+RigidBody* RigidBodyParam::createEntityShapeBody(RigidBody* linked_body,
+ SystemGroupHandler* group_handler,
+ sead::Heap* heap) const {
+ auto* linked_shape_body = sead::DynamicCast<RigidBodyFromShape>(linked_body);
+ if (!linked_shape_body)
+ return nullptr;
+
+ auto* body = RigidBodyFromShape::createEntityShapeBody(*info.rigid_body_name, getContactLayer(),
+ linked_shape_body, heap, group_handler);
+ if (!body)
+ return nullptr;
+
+ body->setUpdateRequestedFlag();
+ body->setMaxLinearVelocity(*info.max_linear_velocity);
+ body->setMaxAngularVelocity(*info.max_angular_velocity_rad);
+ body->setCenterOfMassInLocal(*info.center_of_mass);
+ body->updateCollidableQualityType(*info.toi);
+ body->processUpdateRequests();
+
+ return body;
+}
+
ContactLayer RigidBodyParam::getContactLayer() const {
return contactLayerFromText(*info.layer);
}
diff --git a/src/KingSystem/Physics/RigidBody/physRigidBodyParam.h b/src/KingSystem/Physics/RigidBody/physRigidBodyParam.h
index a1d893ad..b367c1bf 100644
--- a/src/KingSystem/Physics/RigidBody/physRigidBodyParam.h
+++ b/src/KingSystem/Physics/RigidBody/physRigidBodyParam.h
@@ -168,8 +168,9 @@ struct RigidBodyParam : agl::utl::ParameterList {
SystemGroupHandler* group_handler, sead::Heap* heap,
CreateFixedBoxWithNoCollision no_collision = CreateFixedBoxWithNoCollision::No) const;
- // TODO: types and names
- void* createEntityShape(void* x, void* y, sead::Heap* heap);
+ /// @param linked_body Must be a RigidBodyFromShape.
+ RigidBody* createEntityShapeBody(RigidBody* linked_body, SystemGroupHandler* group_handler,
+ sead::Heap* heap) const;
ContactLayer getContactLayer() const;
GroundHit getGroundHit() const;