diff options
| m--------- | lib/NintendoSDK | 0 | ||||
| m--------- | lib/agl | 0 | ||||
| -rw-r--r-- | lib/gsys/include/gsys/gsysModelNW.h | 41 | ||||
| -rw-r--r-- | lib/gsys/include/gsys/gsysModelUnit.h | 57 |
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 |
