ksys/phys: Add RigidBodySet

This commit is contained in:
Léo Lam
2022-01-29 19:47:52 +01:00
parent 70d6ec2ae7
commit d9eeeb6ecc
8 changed files with 316 additions and 66 deletions
@@ -1,4 +1,5 @@
#include "KingSystem/Physics/System/physInstanceSet.h"
#include "KingSystem/Physics/RigidBody/physRigidBodySet.h"
namespace ksys::phys {
@@ -77,7 +78,7 @@ u32 InstanceSet::sub_7100FB9C2C() const {
void InstanceSet::sub_7100FBA9BC() {
for (auto& rb : mRigidBodySets) {
rb.sub_7100FA97FC();
rb.callRigidBody_x_0();
}
for (auto& body : mList) {
@@ -92,7 +93,7 @@ void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) {
bool sensor = phys::getContactLayerType(layer) != ContactLayerType::Entity;
for (auto& rb : mRigidBodySets) {
rb.disableCollisionMaybe(layer);
rb.disableContactLayer(layer);
}
if (sensor)
return;
@@ -106,7 +107,7 @@ void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) {
void InstanceSet::sub_7100FBAD74() {
for (auto& rb : mRigidBodySets) {
rb.disableAllContact();
rb.disableAllContactLayers();
}
if (mRagdollController != nullptr) {
mRagdollController->sub_71012217A8();
@@ -143,7 +144,7 @@ void InstanceSet::sub_7100FBB00C(phys::RigidBody* body, phys::RigidBodyParam* pa
void* InstanceSet::sub_7100FBBC28(const sead::SafeString& name) const {
for (auto& rb : mRigidBodySets) {
void* p = rb.findXByName(name);
void* p = rb.findBodyByHavokName(name);
if (p != nullptr)
return p;
}
@@ -18,6 +18,7 @@ public:
namespace ksys::phys {
class RigidBodySet;
class SystemGroupHandler;
class Ragdoll {};
@@ -46,21 +47,6 @@ struct ContactInfo {
sead::SafeString mName;
};
class RigidBodySet {
public:
void disableAllContact();
void sub_7100FA97FC();
void disableCollisionMaybe(ContactLayer);
void* findXByName(const sead::SafeString& name) const;
RigidBody* getRigidBody() const { return mBodies[0]; }
RigidBody* getRigidBody(s32 idx) const { return mBodies[idx]; }
private:
u8 _0[0x18];
sead::PtrArray<RigidBody> mBodies;
};
class InstanceSet : public sead::hostio::Node {
public:
enum class Flag : u32 {