diff --git a/data/uking_functions.csv b/data/uking_functions.csv index e2e2ccef..a6d51271 100644 --- a/data/uking_functions.csv +++ b/data/uking_functions.csv @@ -95341,11 +95341,11 @@ Address,Quality,Size,Name 0x00000071012acc6c,O,000004,_ZN4ksys4phys15RagdollResourceD1Ev 0x00000071012acc70,O,000036,_ZN4ksys4phys15RagdollResourceD0Ev 0x00000071012acc94,O,000004,_ZN4ksys4phys15RagdollResource9doCreate_EPhjPN4sead4HeapE -0x00000071012acc98,U,000148,RigidBodyDerivedType1::ctor -0x00000071012acd2c,U,000076, -0x00000071012acd78,U,000076, -0x00000071012acdc4,U,000084, -0x00000071012ace18,U,000084, +0x00000071012acc98,O,000148,_ZN4ksys4phys16RagdollRigidBodyC1ERKN4sead14SafeStringBaseIcEEPNS0_17RagdollControllerEiP12hkpRigidBodyPNS2_4HeapE +0x00000071012acd2c,O,000076,_ZN4ksys4phys16RagdollRigidBodyD1Ev +0x00000071012acd78,O,000076,_ZThn32_N4ksys4phys16RagdollRigidBodyD1Ev +0x00000071012acdc4,O,000084,_ZN4ksys4phys16RagdollRigidBodyD0Ev +0x00000071012ace18,O,000084,_ZThn32_N4ksys4phys16RagdollRigidBodyD0Ev 0x00000071012ace6c,U,000376, 0x00000071012acfe4,U,000088, 0x00000071012ad03c,U,000076, @@ -95353,8 +95353,8 @@ Address,Quality,Size,Name 0x00000071012ad0d4,U,000036, 0x00000071012ad0f8,U,000032, 0x00000071012ad118,U,000228, -0x00000071012ad1fc,U,000204, -0x00000071012ad2c8,U,000092, +0x00000071012ad1fc,O,000204,_ZNK4ksys4phys16RagdollRigidBody27checkDerivedRuntimeTypeInfoEPKN4sead15RuntimeTypeInfo9InterfaceE +0x00000071012ad2c8,O,000092,_ZNK4ksys4phys16RagdollRigidBody18getRuntimeTypeInfoEv 0x00000071012ad324,U,000048, 0x00000071012ad354,U,000060, 0x00000071012ad390,U,000060, diff --git a/src/KingSystem/Physics/CMakeLists.txt b/src/KingSystem/Physics/CMakeLists.txt index aca9a911..46b3d815 100644 --- a/src/KingSystem/Physics/CMakeLists.txt +++ b/src/KingSystem/Physics/CMakeLists.txt @@ -19,6 +19,8 @@ target_sources(uking PRIVATE Ragdoll/physRagdollParam.h Ragdoll/physRagdollResource.cpp Ragdoll/physRagdollResource.h + Ragdoll/physRagdollRigidBody.cpp + Ragdoll/physRagdollRigidBody.h RigidBody/physEdgeRigidBodyParam.cpp RigidBody/physEdgeRigidBodyParam.h diff --git a/src/KingSystem/Physics/Ragdoll/physRagdollRigidBody.cpp b/src/KingSystem/Physics/Ragdoll/physRagdollRigidBody.cpp new file mode 100644 index 00000000..8d9d0bbb --- /dev/null +++ b/src/KingSystem/Physics/Ragdoll/physRagdollRigidBody.cpp @@ -0,0 +1,19 @@ +#include "KingSystem/Physics/Ragdoll/physRagdollRigidBody.h" + +namespace ksys::phys { + +RagdollRigidBody::RagdollRigidBody(const sead::SafeString& name, RagdollController* ctrl, + int ragdoll_body_index, hkpRigidBody* hkp_rigid_body, + sead::Heap* heap) + : RigidBody(RigidBody::Type::Ragdoll, ContactLayerType::Entity, hkp_rigid_body, name, heap, + true), + mCtrl(ctrl), mRagdollBodyIndex(ragdoll_body_index) { + updateCollidableQualityType(true); + mFlags.set(Flag::NoCharStandingOn); +} + +RagdollRigidBody::~RagdollRigidBody() { + _e8.freeBuffer(); +} + +} // namespace ksys::phys diff --git a/src/KingSystem/Physics/Ragdoll/physRagdollRigidBody.h b/src/KingSystem/Physics/Ragdoll/physRagdollRigidBody.h new file mode 100644 index 00000000..b0a20940 --- /dev/null +++ b/src/KingSystem/Physics/Ragdoll/physRagdollRigidBody.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include "KingSystem/Physics/RigidBody/physRigidBody.h" + +namespace ksys::phys { + +class RagdollController; + +// TODO +class RagdollRigidBody : public RigidBody { + SEAD_RTTI_OVERRIDE(RagdollRigidBody, RigidBody) +public: + RagdollRigidBody(const sead::SafeString& name, RagdollController* ctrl, int ragdoll_body_index, + hkpRigidBody* hkp_rigid_body, sead::Heap* heap); + ~RagdollRigidBody() override; + + float getVolume() override; + u32 getCollisionMasks(RigidBody::CollisionMasks* masks, const u32* shape_key, + const sead::Vector3f& contact_point) override; + +private: + RagdollController* mCtrl{}; + int mRagdollBodyIndex{}; + void* _e0{}; + sead::Buffer _e8{}; + void* _f8{}; +}; + +} // namespace ksys::phys diff --git a/src/KingSystem/Physics/RigidBody/physRigidBody.h b/src/KingSystem/Physics/RigidBody/physRigidBody.h index 7368d178..6748d36f 100644 --- a/src/KingSystem/Physics/RigidBody/physRigidBody.h +++ b/src/KingSystem/Physics/RigidBody/physRigidBody.h @@ -56,7 +56,7 @@ public: enum class Type { FromShape = 0, - _1 = 1, + Ragdoll = 1, _2 = 2, TerrainHeightField = 3, StaticCompoundBody = 4,