#pragma once #include "RE/N/NiRefObject.h" namespace RE { class bhkBlendCollisionObject; class bhkLimitedHingeConstraint; class bhkNiCollisionObject; class bhkNPCollisionObject; class bhkRigidBody; class BSDynamicTriShape; class BSFadeNode; class BSGeometry; class BSLines; class BSMultiBoundNode; class BSSegmentedTriShape; class BSSubIndexTriShape; class BSTriShape; class NiCloningProcess; class NiControllerManager; class NiGeometry; class NiLight; class NiNode; class NiObjectGroup; class NiParticles; class NiParticleSystem; class NiRTTI; class NiStream; class NiSwitchNode; class NiTriBasedGeom; class NiTriShape; class NiTriStrips; class __declspec(novtable) NiObject : public NiRefObject // 00 { public: static constexpr auto RTTI{ RTTI::NiObject }; static constexpr auto VTABLE{ VTABLE::NiObject }; static constexpr auto Ni_RTTI{ Ni_RTTI::NiObject }; NiObject() { REX::EMPLACE_VTABLE(this); } virtual ~NiObject() = default; // NOLINT(modernize-use-override) 00 // add virtual const NiRTTI* GetRTTI() const { return nullptr; } // 02 virtual NiNode* IsNode() { return nullptr; } // 04 virtual const NiNode* IsNode() const { return nullptr; } // 03 virtual NiSwitchNode* IsSwitchNode() { return nullptr; } // 05 virtual BSFadeNode* IsFadeNode() { return nullptr; } // 06 virtual BSMultiBoundNode* IsMultiBoundNode() { return nullptr; } // 07 virtual BSGeometry* IsGeometry() { return nullptr; } // 08 virtual NiTriStrips* IsTriStrips() { return nullptr; } // 09 virtual BSTriShape* IsTriShape() { return nullptr; } // 0A virtual BSDynamicTriShape* IsDynamicTriShape() { return nullptr; } // 0B virtual BSSegmentedTriShape* IsSegmentedTriShape() { return nullptr; } // 0C virtual BSSubIndexTriShape* IsSubIndexTriShape() { return nullptr; } // 0D virtual NiGeometry* IsNiGeometry() { return nullptr; } // 0E virtual NiTriBasedGeom* IsNiTriBasedGeom() { return nullptr; } // 0F virtual NiTriShape* IsNiTriShape() { return nullptr; } // 10 virtual NiParticles* IsParticlesGeom() { return nullptr; } // 11 virtual NiParticleSystem* IsParticleSystem() { return nullptr; } // 12 virtual BSLines* IsLinesGeom() { return nullptr; } // 13 virtual NiLight* IsLight() { return nullptr; } // 14 virtual bhkNiCollisionObject* IsBhkNiCollisionObject() { return nullptr; } // 15 virtual bhkBlendCollisionObject* IsBhkBlendCollisionObject() { return nullptr; } // 16 virtual bhkRigidBody* IsBhkRigidBody() { return nullptr; } // 17 virtual bhkLimitedHingeConstraint* IsBhkLimitedHingeConstraint() { return nullptr; } // 18 virtual bhkNPCollisionObject* IsbhkNPCollisionObject() { return nullptr; } // 19 virtual NiObject* CreateClone([[maybe_unused]] NiCloningProcess& a_cloneData) { return nullptr; } // 1A virtual void LoadBinary([[maybe_unused]] NiStream& a_stream) { return; } // 1B virtual void LinkObject([[maybe_unused]] NiStream& a_stream) { return; } // 1C virtual bool RegisterStreamables([[maybe_unused]] NiStream& a_stream) { return false; } // 1D virtual void SaveBinary([[maybe_unused]] NiStream& a_stream) { return; } // 1E virtual bool IsEqual([[maybe_unused]] NiObject* a_object) { return false; } // 1F virtual void ProcessClone([[maybe_unused]] NiCloningProcess& a_cloning) {} // 20 virtual void PostLinkObject([[maybe_unused]] NiStream& a_stream) { return; } // 21 virtual bool StreamCanSkip() { return false; } // 22 virtual const NiRTTI* GetStreamableRTTI() { return GetRTTI(); } // 23 virtual std::uint32_t GetBlockAllocationSize() const { return 0; } // 24 virtual NiObjectGroup* GetGroup() const { return nullptr; } // 25 virtual void SetGroup([[maybe_unused]] NiObjectGroup*) { return; } // 26 virtual NiControllerManager* IsNiControllerManager() { return nullptr; } // 27 F4_HEAP_REDEFINE_NEW(NiObject); }; static_assert(sizeof(NiObject) == 0x10); }