diff options
| author | Léo Lam <leo@leolam.fr> | 2022-03-31 12:48:14 +0200 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2022-03-31 23:17:34 +0200 |
| commit | 9d02ca33d84d44f9fb9fa7c7728d4e3386b83093 (patch) | |
| tree | 10f4746aebc91f078f365f43b86e340294809680 /lib/gsys/include | |
| parent | 6ce04bccaa6c2dc2ead9f787f770891a0c0f7754 (diff) | |
gsys: Add Model, ModelAccessKey and ModelUnit stubs
Diffstat (limited to 'lib/gsys/include')
| -rw-r--r-- | lib/gsys/include/gsys/gsysModel.h | 53 | ||||
| -rw-r--r-- | lib/gsys/include/gsys/gsysModelAccessKey.h | 58 | ||||
| -rw-r--r-- | lib/gsys/include/gsys/gsysModelNW.h | 15 | ||||
| -rw-r--r-- | lib/gsys/include/gsys/gsysModelUnit.h | 17 |
4 files changed, 143 insertions, 0 deletions
diff --git a/lib/gsys/include/gsys/gsysModel.h b/lib/gsys/include/gsys/gsysModel.h new file mode 100644 index 00000000..b666b159 --- /dev/null +++ b/lib/gsys/include/gsys/gsysModel.h @@ -0,0 +1,53 @@ +#pragma once + +#include <basis/seadTypes.h> +#include <container/seadBuffer.h> +#include <container/seadPtrArray.h> +#include <heap/seadDisposer.h> +#include <hostio/seadHostIONode.h> +#include <thread/seadCriticalSection.h> + +namespace gsys { + +class IModelAccesssHandle; +class ModelBone; +class ModelUnit; + +class ModelInfo { +public: + ModelUnit* mModelUnit; + void* _8; + void* _10; + u32 _18; + s16 mAccessIndex; + u8 _1e; + void* _20; + void* _28; + u32 _30; + u32 _34; +}; + +// TODO +class Model : public sead::IDisposer, public sead::hostio::Node { +public: + Model(); + ~Model() override; + + sead::PtrArray<ModelInfo>& getUnits() { return mUnitAccess; } + const sead::PtrArray<ModelInfo>& getUnits() const { return mUnitAccess; } + + // For internal use. + void add_(IModelAccesssHandle* handle) const; + void remove_(IModelAccesssHandle* handle) const; + sead::CriticalSection& getCS() const { return mCS; } + +private: + sead::Buffer<ModelInfo> mUnitPool; + /// Indices into this array are called "model unit access indices". + sead::PtrArray<ModelInfo> mUnitAccess; + u8 _48[0x140 - 0x48]; + mutable sead::CriticalSection mCS; + u8 _180[0x2b8 - 0x180]; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysModelAccessKey.h b/lib/gsys/include/gsys/gsysModelAccessKey.h new file mode 100644 index 00000000..a6015ac7 --- /dev/null +++ b/lib/gsys/include/gsys/gsysModelAccessKey.h @@ -0,0 +1,58 @@ +#pragma once + +#include <container/seadListImpl.h> +#include <prim/seadSafeString.h> + +namespace gsys { + +class Model; + +// sic: this should be called IModelAccessHandle +class IModelAccesssHandle { +public: + IModelAccesssHandle(); + virtual ~IModelAccesssHandle(); + + bool search(const Model* p_model, const sead::SafeString& name); + bool search(); + void remove(); + + static constexpr size_t getListNodeOffset() { return offsetof(IModelAccesssHandle, mListNode); } + +protected: + virtual bool searchImpl_() = 0; + virtual void removeImpl_() = 0; + + sead::SafeString mName = sead::SafeString::cEmptyString; + const Model* mModel{}; + sead::ListNode mListNode; +}; + +struct BoneAccessKey { + BoneAccessKey() { reset(); } + + void reset() { + model_unit_index = -1; + bone_index = -1; + } + + s16 model_unit_index{}; + s16 bone_index{}; +}; + +class BoneAccessKeyEx : public IModelAccesssHandle { +public: + BoneAccessKeyEx(); + ~BoneAccessKeyEx() override; + + using IModelAccesssHandle::search; + bool search(const Model* p_model, const BoneAccessKey& key); + +protected: + bool searchImpl_() override; + void removeImpl_() override; + + BoneAccessKey mKey; +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysModelNW.h b/lib/gsys/include/gsys/gsysModelNW.h new file mode 100644 index 00000000..5f0afbb7 --- /dev/null +++ b/lib/gsys/include/gsys/gsysModelNW.h @@ -0,0 +1,15 @@ +#pragma once + +#include <gsys/gsysModelUnit.h> + +namespace gsys { + +// XXX: bad name. This doesn't reflect the fact that ModelNW is a ModelUnit, not a Model. +// TODO +class ModelNW : public ModelUnit, + public nn::g3d::ICalculateWorldCallback, + public sead::hostio::Node { + SEAD_RTTI_OVERRIDE(ModelNW, ModelUnit) +}; + +} // namespace gsys diff --git a/lib/gsys/include/gsys/gsysModelUnit.h b/lib/gsys/include/gsys/gsysModelUnit.h new file mode 100644 index 00000000..b38210cf --- /dev/null +++ b/lib/gsys/include/gsys/gsysModelUnit.h @@ -0,0 +1,17 @@ +#pragma once + +#include <hostio/seadHostIONode.h> +#include <nn/g3d/World.h> +#include <prim/seadRuntimeTypeInfo.h> + +namespace gsys { + +// TODO +class ModelUnit { + SEAD_RTTI_BASE(ModelUnit) +public: + ModelUnit(); + virtual ~ModelUnit(); +}; + +} // namespace gsys |
