ksys/phys: Add more InstanceSet member variables

This commit is contained in:
Léo Lam 2022-03-26 21:51:47 +01:00
parent f1398cd0b1
commit 5df0fb2a6d
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
3 changed files with 70 additions and 50 deletions

View File

@ -8,31 +8,15 @@
namespace ksys::phys { namespace ksys::phys {
class CharacterFormSet;
class CharacterController;
class NavMeshCharacter;
class Shape; class Shape;
struct ShapeParamObj; struct ShapeParamObj;
SEAD_ENUM(NavMeshCharacterType, SEAD_ENUM(NavMeshCharacterType, Player, Horse, Enemy, Guardian, NPC, NPCGoron, NPCSwimmer,
Player, NPCGerudoPassable, Fish, Animal, SmallAnimal, DomesticAnimal, PoorSwimmer, GoodSwimmer,
Horse, IceSwimmer, FireEnemy, WolfLink, GiantEnemy, GiantSwimmer, TallEnemy, Lynel)
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); bool navMeshCharacterTypeFromText(NavMeshCharacterType& value, const sead::SafeString& text);
@ -66,14 +50,12 @@ struct CharacterControllerParam : agl::utl::ParameterList, ICharacterControllerP
int getNumForms() override { return forms.size(); } int getNumForms() override { return forms.size(); }
Shape* createShape(int form_idx, sead::Heap* heap) override; Shape* createShape(int form_idx, sead::Heap* heap) override;
// TODO: return type CharacterFormSet* createFormSet(sead::Heap* heap);
void* createController(sead::Heap* heap);
// TODO: types // TODO: types
void* createControllerState(const sead::SafeString& name, void* ctrl, void* x, bool y, CharacterController* createController(const sead::SafeString& name, void* ctrl, void* x, bool y,
sead::Heap* heap); sead::Heap* heap);
// TODO: return type NavMeshCharacter* createNavMeshCharacter(const sead::SafeString& name, sead::Heap* heap,
void* createNavMeshCharacter(const sead::SafeString& name, sead::Heap* heap, const sead::Vector3f& scale);
const sead::Vector3f& scale);
int findFormIdx(const sead::SafeString& form_type) const; int findFormIdx(const sead::SafeString& form_type) const;
bool parse(agl::utl::ResParameterList res_list, sead::Heap* heap); bool parse(agl::utl::ResParameterList res_list, sead::Heap* heap);

View File

@ -9,14 +9,14 @@ namespace ksys::phys {
void InstanceSet::setFlag2() { void InstanceSet::setFlag2() {
mFlags.set(Flag::_2); mFlags.set(Flag::_2);
if (_d8 != nullptr) { if (mClothSet != nullptr) {
mFlags.set(Flag::_2); mFlags.set(Flag::_2);
mFlags.set(Flag::DisableDraw); mFlags.set(Flag::DisableDraw);
} }
} }
void InstanceSet::clothVisibleStuff() { void InstanceSet::clothVisibleStuff() {
if (_d8 != nullptr) { if (mClothSet != nullptr) {
mFlags.set(Flag::DisableDraw); mFlags.set(Flag::DisableDraw);
} }
} }
@ -89,8 +89,8 @@ void InstanceSet::sub_7100FBA9BC() {
body->addToWorld(); body->addToWorld();
} }
if (mCollisionController != nullptr) if (mCharacterController != nullptr)
mCollisionController->sub_7100F5EC30(); mCharacterController->sub_7100F5EC30();
} }
void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) { void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) {
@ -105,8 +105,8 @@ void InstanceSet::sub_7100FBACE0(phys::ContactLayer layer) {
if (mRagdollController != nullptr) if (mRagdollController != nullptr)
mRagdollController->sub_7101221728(layer); mRagdollController->sub_7101221728(layer);
if (mCollisionController != nullptr) if (mCharacterController != nullptr)
mCollisionController->enableCollisionMaybe_0(layer); mCharacterController->enableCollisionMaybe_0(layer);
} }
void InstanceSet::sub_7100FBAD74() { void InstanceSet::sub_7100FBAD74() {
@ -116,8 +116,8 @@ void InstanceSet::sub_7100FBAD74() {
if (mRagdollController != nullptr) { if (mRagdollController != nullptr) {
mRagdollController->sub_71012217A8(); mRagdollController->sub_71012217A8();
} }
if (mCollisionController != nullptr) { if (mCharacterController != nullptr) {
mCollisionController->sub_7100F60604(); mCharacterController->sub_7100F60604();
} }
} }

View File

@ -1,6 +1,8 @@
#pragma once #pragma once
#include <container/seadBuffer.h>
#include <container/seadListImpl.h> #include <container/seadListImpl.h>
#include <container/seadObjArray.h>
#include <container/seadPtrArray.h> #include <container/seadPtrArray.h>
#include <hostio/seadHostIONode.h> #include <hostio/seadHostIONode.h>
#include "KingSystem/ActorSystem/actActor.h" #include "KingSystem/ActorSystem/actActor.h"
@ -11,21 +13,32 @@ namespace gsys {
class Model; class Model;
} }
namespace sead {
class DirectResource;
}
namespace ksys::res { namespace ksys::res {
class Handle;
class RagdollBlendWeight; class RagdollBlendWeight;
class RagdollConfigList; class RagdollConfigList;
} // namespace ksys::res } // namespace ksys::res
namespace ksys::phys { namespace ksys::phys {
class CharacterController;
class CharacterFormSet;
class ClothSet;
class CollisionInfo; class CollisionInfo;
class ContactPointInfo; class ContactPointInfo;
class NavMeshCharacter;
class ParamSet; class ParamSet;
class RagdollController; class RagdollController;
class RigidBodySet; class RigidBodySet;
class SystemGroupHandler; class SystemGroupHandler;
class UserTag;
class CollisionController { // TODO: move to a separate header
class CharacterController {
public: public:
void sub_7100F5EC30(); void sub_7100F5EC30();
void sub_7100F60604(); void sub_7100F60604();
@ -47,8 +60,12 @@ public:
_80000000 = 1u << 31, _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; } const sead::SafeString& getName() const { return mName; }
ParamSet* getParamSet() const { return mParamSet; } const ParamSet* getParamSet() const { return mParamSet; }
void setFlag2(); void setFlag2();
void clothVisibleStuff(); void clothVisibleStuff();
@ -73,28 +90,49 @@ public:
s32 sub_7100FBDA2C(const sead::SafeString& name) const; s32 sub_7100FBDA2C(const sead::SafeString& name) const;
private: private:
struct Unk1 {
u8 _0[0x48];
};
sead::SafeString mName; sead::SafeString mName;
ParamSet* mParamSet; const ParamSet* mParamSet;
sead::TypedBitFlag<Flag> mFlags; sead::TypedBitFlag<Flag> mFlags;
u16 _24{};
u16 _26{};
gsys::Model* mModel; gsys::Model* mModel;
f32 mScale; f32 mScale;
u8 _34[0x40 - 0x34]; UserTag* mUserTag;
sead::PtrArray<RigidBodySet> mRigidBodySets; sead::PtrArray<RigidBodySet> mRigidBodySets;
sead::PtrArray<CollisionInfo> mCollisionInfo; sead::PtrArray<CollisionInfo> mCollisionInfo;
sead::PtrArray<ContactPointInfo> mContactPointInfo; sead::PtrArray<ContactPointInfo> mContactPointInfo;
sead::Buffer<res::Handle*> mRigidBodySetResHandles;
u8 _70[0x10]; CharacterController* mCharacterController{};
CollisionController* mCollisionController; CharacterFormSet* mCharacterFormSet{};
u8 _88[8];
RagdollController* mRagdollController; RagdollController* mRagdollController{};
u8 _98[0xb8 - 0x98]; sead::Buffer<void*> _98;
ContactPointInfo* mRagdollContactPointInfo{};
res::Handle* mRagdollResHandle{};
res::RagdollBlendWeight* mRagdollBlendWt; res::RagdollBlendWeight* mRagdollBlendWt;
res::RagdollConfigList* mRagdollConfigList; res::RagdollConfigList* mRagdollConfigList;
u8 _c8[0xd8 - 0xc8];
void* _d8; res::Handle* mClothResHandle{};
u8 _e0[0x148 - 0xe0]; sead::DirectResource* mClothRes{};
ClothSet* mClothSet;
res::Handle* mSupportBoneResHandle{};
void* _e8{};
void* _f0{};
NavMeshCharacter* mNavMeshCharacter;
sead::Buffer<void*> _100;
u16 _110{};
sead::ObjArray<Unk1> mLinkMatricesMaybe;
sead::Buffer<void*> _138;
sead::TList<RigidBody*> mList; sead::TList<RigidBody*> mList;
u8 _160[0x178 - 0x160]; sead::ListNode _160;
u32 _170{};
SystemGroupHandler* _178[2]; SystemGroupHandler* _178[2];
SystemGroupHandler* _188[2]; SystemGroupHandler* _188[2];
}; };