summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-04-09 12:08:40 +0200
committerLéo Lam <leo@leolam.fr>2022-04-18 22:40:30 +0200
commit58a008dfca1894735bb8ff963167865eaed8c69c (patch)
treecaded49e7d4c0a8c149e6fb2a952f18b6f286f1e /lib
parent6ca1c6fd5ae79d3d074bca2e86eb8772f7193b30 (diff)
gsys: Add (placeholder) ModelUnit fields
Diffstat (limited to 'lib')
m---------lib/NintendoSDK0
m---------lib/agl0
-rw-r--r--lib/gsys/include/gsys/gsysModelNW.h41
-rw-r--r--lib/gsys/include/gsys/gsysModelUnit.h57
4 files changed, 97 insertions, 1 deletions
diff --git a/lib/NintendoSDK b/lib/NintendoSDK
-Subproject bfc57251de9773694c8e59904cd65914f86047b
+Subproject c0fd70ddd661f1b5064cd2a0c7ebee4d60e5eb2
diff --git a/lib/agl b/lib/agl
-Subproject 0f55dfbaa9fcaf53e769cfc2cfc6e94187793e7
+Subproject 62c3993c8ef9cd25b74281ad73d6f5f385048b9
diff --git a/lib/gsys/include/gsys/gsysModelNW.h b/lib/gsys/include/gsys/gsysModelNW.h
index 0230e414..0a7c67e8 100644
--- a/lib/gsys/include/gsys/gsysModelNW.h
+++ b/lib/gsys/include/gsys/gsysModelNW.h
@@ -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
diff --git a/lib/gsys/include/gsys/gsysModelUnit.h b/lib/gsys/include/gsys/gsysModelUnit.h
index 085512ef..518333b8 100644
--- a/lib/gsys/include/gsys/gsysModelUnit.h
+++ b/lib/gsys/include/gsys/gsysModelUnit.h
@@ -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