mirror of
https://github.com/zeldaret/botw
synced 2026-08-14 04:23:08 -04:00
gsys: Add Model, ModelAccessKey and ModelUnit stubs
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user