summaryrefslogtreecommitdiff
path: root/src/KingSystem
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-03-26 21:51:47 +0100
committerLéo Lam <leo@leolam.fr>2022-03-26 23:25:06 +0100
commit5df0fb2a6d3c94ff3204407f95019e77ff30e55a (patch)
tree9bad7a120a7123a3805d1174b9e8ffd290db1102 /src/KingSystem
parentf1398cd0b1f049de1847194f39391eec2c85d1a4 (diff)
ksys/phys: Add more InstanceSet member variables
Diffstat (limited to 'src/KingSystem')
-rw-r--r--src/KingSystem/Physics/System/physCharacterControllerParam.h40
-rw-r--r--src/KingSystem/Physics/System/physInstanceSet.cpp16
-rw-r--r--src/KingSystem/Physics/System/physInstanceSet.h64
3 files changed, 70 insertions, 50 deletions
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 <container/seadBuffer.h>
#include <container/seadListImpl.h>
+#include <container/seadObjArray.h>
#include <container/seadPtrArray.h>
#include <hostio/seadHostIONode.h>
#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<Flag> mFlags;
+ u16 _24{};
+ u16 _26{};
gsys::Model* mModel;
f32 mScale;
- u8 _34[0x40 - 0x34];
+ UserTag* mUserTag;
sead::PtrArray<RigidBodySet> mRigidBodySets;
sead::PtrArray<CollisionInfo> mCollisionInfo;
sead::PtrArray<ContactPointInfo> mContactPointInfo;
+ sead::Buffer<res::Handle*> mRigidBodySetResHandles;
- u8 _70[0x10];
- CollisionController* mCollisionController;
- u8 _88[8];
- RagdollController* mRagdollController;
- u8 _98[0xb8 - 0x98];
+ CharacterController* mCharacterController{};
+ CharacterFormSet* mCharacterFormSet{};
+
+ RagdollController* mRagdollController{};
+ sead::Buffer<void*> _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<void*> _100;
+ u16 _110{};
+ sead::ObjArray<Unk1> mLinkMatricesMaybe;
+ sead::Buffer<void*> _138;
sead::TList<RigidBody*> mList;
- u8 _160[0x178 - 0x160];
+ sead::ListNode _160;
+ u32 _170{};
SystemGroupHandler* _178[2];
SystemGroupHandler* _188[2];
};