gsys: Add (placeholder) ModelUnit fields

This commit is contained in:
Léo Lam 2022-04-09 12:08:40 +02:00
parent 6ca1c6fd5a
commit 58a008dfca
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 99 additions and 3 deletions

@ -1 +1 @@
Subproject commit bfc57251de9773694c8e59904cd65914f86047bf
Subproject commit c0fd70ddd661f1b5064cd2a0c7ebee4d60e5eb2b

@ -1 +1 @@
Subproject commit 0f55dfbaa9fcaf53e769cfc2cfc6e94187793e75
Subproject commit 62c3993c8ef9cd25b74281ad73d6f5f385048b9e

View File

@ -1,6 +1,9 @@
#pragma once
#include <gsys/gsysModelUnit.h>
#include <nn/g3d/ModelObj.h>
#include <nn/gfx/memory.h>
#include <prim/seadDelegate.h>
namespace agl {
class DrawContext;
@ -8,6 +11,10 @@ class DrawContext;
namespace gsys {
class ModelAutoAnimation;
class ModelDynamicEnvInfo;
class ModelRenderUnitNW;
// XXX: bad name. This doesn't reflect the fact that ModelNW is a ModelUnit, not a Model.
// TODO
class ModelNW : public ModelUnit,
@ -15,15 +22,47 @@ class ModelNW : public ModelUnit,
public sead::hostio::Node {
SEAD_RTTI_OVERRIDE(ModelNW, ModelUnit)
public:
struct BoneCallbackArg;
using BoneCallback = sead::IDelegate1<BoneCallbackArg*>;
using BoneCallbackStorage = sead::AnyDelegate1<BoneCallbackArg*>;
const nn::g3d::SkeletonObj* getSkeletonObj() const { return mModelObj.GetSkeleton(); }
protected:
virtual void drawDetail(agl::DrawContext* context) const;
virtual void createRenderUnitNW(int, sead::Heap* heap);
protected:
virtual void calcBounding_(); // NOLINT(bugprone-virtual-near-miss)
virtual void calcGPUSkinning_();
void Exec(nn::g3d::ICalculateWorldCallback::CallbackArg& arg,
nn::g3d::WorldMtxManip& world_mtx_manip) override;
private:
u8 _168;
nn::g3d::ModelObj mModelObj;
u8 _200;
u8 _201;
s8 mBufferNum;
u8 _203;
u8 _204;
u8 _205;
u8 _206;
u8 _207;
u32 _208;
ModelRenderUnitNW** mRenderUnits;
ModelAutoAnimation* mAutoAnimation;
ModelDynamicEnvInfo* mDynamicEnvInfo;
void* _228;
void* _230;
void* _238;
BoneCallbackStorage mBoneCallback;
void* _260;
int _268;
void* _270;
nn::gfx::MemoryPool mMemoryPool;
};
} // namespace gsys

View File

@ -7,8 +7,11 @@
#include <math/seadMatrix.h>
#include <math/seadVector.h>
#include <nn/g3d/World.h>
#include <prim/seadBitFlag.h>
#include <prim/seadDelegate.h>
#include <prim/seadRuntimeTypeInfo.h>
#include <prim/seadSafeString.h>
#include <prim/seadTypedBitFlag.h>
#include "gsys/gsysModelUnitDrawArray.h"
namespace agl {
@ -25,8 +28,12 @@ enum class RenderViewOption;
class ModelRenderUnit;
class ModelScene;
class ModelUnitCallbackArg;
class ModelViewData;
using ModelUnitCallback = sead::IDelegate1<const ModelUnitCallbackArg&>;
using ModelUnitCallbackStorage = sead::AnyDelegate1<const ModelUnitCallbackArg&>;
// TODO
class ModelUnit {
SEAD_RTTI_BASE(ModelUnit)
@ -34,6 +41,23 @@ public:
// TODO: is this an enum/enum class or a class?
enum class BoolType;
enum class Flag {
DebugWorldCallback = 4,
DebugDrawCallback = 8,
};
enum class Attribute {
OcclusionQuery = 1,
ViewFrustrumCulling = 2,
LodCalculation = 4,
ShapeCulling = 8,
BufferSwap = 0x10,
};
enum class ORFlag {
Force = 1,
};
ModelUnit();
virtual ~ModelUnit();
@ -161,6 +185,39 @@ public:
virtual void calcBeforeDraw(ModelScene* scene, const gsys::ModelViewData* model_view_data, int);
virtual void forceCalcDrawSetup();
virtual void setUpMaterialImpl(int, sead::Heap* heap);
protected:
sead::TypedBitFlag<Flag, u8> mFlags;
s8 mUnkIndex;
s8 mNumLods;
sead::BitFlag16 mVisibilityMask;
u8 mDepthShadowCascade;
u16 mCalcWeight;
sead::TypedBitFlag<Attribute, u16> mAttributeFlags;
u16 _14;
u16 _16;
void* _18;
void* _20;
ModelUnitDrawArray* mDrawArray;
void* _30;
void* _38;
sead::Vector3f _40;
u32 _4c;
sead::Vector3f* _50;
void* _58;
void* _60;
void* mMaterialInfo;
void* _70;
void* _78;
void* _80;
void* _88;
void* _90;
ModelUnitCallbackStorage mCallback;
sead::SafeString mName;
#ifdef SEAD_DEBUG
sead::TypedBitFlag<ORFlag, u8> mORFlags;
#endif
};
} // namespace gsys