diff --git a/src/KingSystem/Physics/System/physCharacterControllerParam.h b/src/KingSystem/Physics/System/physCharacterControllerParam.h index 65f6eefd..e3a733b4 100644 --- a/src/KingSystem/Physics/System/physCharacterControllerParam.h +++ b/src/KingSystem/Physics/System/physCharacterControllerParam.h @@ -8,31 +8,15 @@ namespace ksys::phys { +class CharacterFormSet; +class CharacterController; +class NavMeshCharacter; class Shape; struct ShapeParamObj; -SEAD_ENUM(NavMeshCharacterType, -Player, -Horse, -Enemy, -Guardian, -NPC, -NPCGoron, -NPCSwimmer, -NPCGerudoPassable, -Fish, -Animal, -SmallAnimal, -DomesticAnimal, -PoorSwimmer, -GoodSwimmer, -IceSwimmer, -FireEnemy, -WolfLink, -GiantEnemy, -GiantSwimmer, -TallEnemy, -Lynel) +SEAD_ENUM(NavMeshCharacterType, Player, Horse, Enemy, Guardian, NPC, NPCGoron, NPCSwimmer, + NPCGerudoPassable, Fish, Animal, SmallAnimal, DomesticAnimal, PoorSwimmer, GoodSwimmer, + IceSwimmer, FireEnemy, WolfLink, GiantEnemy, GiantSwimmer, TallEnemy, Lynel) bool navMeshCharacterTypeFromText(NavMeshCharacterType& value, const sead::SafeString& text); @@ -66,14 +50,12 @@ struct CharacterControllerParam : agl::utl::ParameterList, ICharacterControllerP int getNumForms() override { return forms.size(); } Shape* createShape(int form_idx, sead::Heap* heap) override; - // TODO: return type - void* createController(sead::Heap* heap); + CharacterFormSet* createFormSet(sead::Heap* heap); // TODO: types - void* createControllerState(const sead::SafeString& name, void* ctrl, void* x, bool y, - sead::Heap* heap); - // TODO: return type - void* createNavMeshCharacter(const sead::SafeString& name, sead::Heap* heap, - const sead::Vector3f& scale); + CharacterController* createController(const sead::SafeString& name, void* ctrl, void* x, bool y, + sead::Heap* heap); + NavMeshCharacter* createNavMeshCharacter(const sead::SafeString& name, sead::Heap* heap, + const sead::Vector3f& scale); int findFormIdx(const sead::SafeString& form_type) const; bool parse(agl::utl::ResParameterList res_list, sead::Heap* heap); diff --git a/src/KingSystem/Physics/System/physInstanceSet.cpp b/src/KingSystem/Physics/System/physInstanceSet.cpp index 08bb59bc..d51f9a94 100644 --- a/src/KingSystem/Physics/System/physInstanceSet.cpp +++ b/src/KingSystem/Physics/System/physInstanceSet.cpp @@ -9,14 +9,14 @@ namespace ksys::phys { void InstanceSet::setFlag2() { mFlags.set(Flag::_2); - if (_d8 != nullptr) { + if (mClothSet != nullptr) { mFlags.set(Flag::_2); mFlags.set(Flag::DisableDraw); } } void InstanceSet::clothVisibleStuff() { - if (_d8 != nullptr) { + if (mClothSet != nullptr) { mFlags.set(Flag::DisableDraw); } } @@ -89,8 +89,8 @@ void InstanceSet::sub_7100FBA9BC() { body->addToWorld(); } - if (mCollisionController != nullptr) - mCollisionController->sub_7100F5EC30(); + if (mCharacterController != nullptr) + mCharacterController->sub_7100F5EC30(); } void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) { @@ -105,8 +105,8 @@ void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) { if (mRagdollController != nullptr) mRagdollController->sub_7101221728(layer); - if (mCollisionController != nullptr) - mCollisionController->enableCollisionMaybe_0(layer); + if (mCharacterController != nullptr) + mCharacterController->enableCollisionMaybe_0(layer); } void InstanceSet::sub_7100FBAD74() { @@ -116,8 +116,8 @@ void InstanceSet::sub_7100FBAD74() { if (mRagdollController != nullptr) { mRagdollController->sub_71012217A8(); } - if (mCollisionController != nullptr) { - mCollisionController->sub_7100F60604(); + if (mCharacterController != nullptr) { + mCharacterController->sub_7100F60604(); } } diff --git a/src/KingSystem/Physics/System/physInstanceSet.h b/src/KingSystem/Physics/System/physInstanceSet.h index 2d1680e5..66eeac61 100644 --- a/src/KingSystem/Physics/System/physInstanceSet.h +++ b/src/KingSystem/Physics/System/physInstanceSet.h @@ -1,6 +1,8 @@ #pragma once +#include #include +#include #include #include #include "KingSystem/ActorSystem/actActor.h" @@ -11,21 +13,32 @@ namespace gsys { class Model; } +namespace sead { +class DirectResource; +} + namespace ksys::res { +class Handle; class RagdollBlendWeight; class RagdollConfigList; } // namespace ksys::res namespace ksys::phys { +class CharacterController; +class CharacterFormSet; +class ClothSet; class CollisionInfo; class ContactPointInfo; +class NavMeshCharacter; class ParamSet; class RagdollController; class RigidBodySet; class SystemGroupHandler; +class UserTag; -class CollisionController { +// TODO: move to a separate header +class CharacterController { public: void sub_7100F5EC30(); void sub_7100F60604(); @@ -47,8 +60,12 @@ public: _80000000 = 1u << 31, }; + InstanceSet(const sead::SafeString& actor_name, const sead::SafeString& actor_profile, + const ParamSet& param_set); + virtual ~InstanceSet(); + const sead::SafeString& getName() const { return mName; } - ParamSet* getParamSet() const { return mParamSet; } + const ParamSet* getParamSet() const { return mParamSet; } void setFlag2(); void clothVisibleStuff(); @@ -73,28 +90,49 @@ public: s32 sub_7100FBDA2C(const sead::SafeString& name) const; private: + struct Unk1 { + u8 _0[0x48]; + }; + sead::SafeString mName; - ParamSet* mParamSet; + const ParamSet* mParamSet; sead::TypedBitFlag mFlags; + u16 _24{}; + u16 _26{}; gsys::Model* mModel; f32 mScale; - u8 _34[0x40 - 0x34]; + UserTag* mUserTag; sead::PtrArray mRigidBodySets; sead::PtrArray mCollisionInfo; sead::PtrArray mContactPointInfo; + sead::Buffer mRigidBodySetResHandles; - u8 _70[0x10]; - CollisionController* mCollisionController; - u8 _88[8]; - RagdollController* mRagdollController; - u8 _98[0xb8 - 0x98]; + CharacterController* mCharacterController{}; + CharacterFormSet* mCharacterFormSet{}; + + RagdollController* mRagdollController{}; + sead::Buffer _98; + ContactPointInfo* mRagdollContactPointInfo{}; + res::Handle* mRagdollResHandle{}; res::RagdollBlendWeight* mRagdollBlendWt; res::RagdollConfigList* mRagdollConfigList; - u8 _c8[0xd8 - 0xc8]; - void* _d8; - u8 _e0[0x148 - 0xe0]; + + res::Handle* mClothResHandle{}; + sead::DirectResource* mClothRes{}; + ClothSet* mClothSet; + + res::Handle* mSupportBoneResHandle{}; + void* _e8{}; + void* _f0{}; + + NavMeshCharacter* mNavMeshCharacter; + sead::Buffer _100; + u16 _110{}; + sead::ObjArray mLinkMatricesMaybe; + sead::Buffer _138; sead::TList mList; - u8 _160[0x178 - 0x160]; + sead::ListNode _160; + u32 _170{}; SystemGroupHandler* _178[2]; SystemGroupHandler* _188[2]; };