CommonLibSSE (powerof3)
Loading...
Searching...
No Matches
NiAVObject.h
Go to the documentation of this file.
1#pragma once
2
6#include "RE/N/NiBound.h"
7#include "RE/N/NiObjectNET.h"
9#include "RE/N/NiTransform.h"
10
11namespace RE
12{
13 class bhkCollisionObject;
14 class NiAlphaProperty;
15 class NiAVObject;
16 class NiCollisionObject;
17 class NiColor;
18 class NiColorA;
19 class NiCullingProcess;
20 class NiNode;
21 class NiPoint3;
22 class TESObjectREFR;
23
25 {
26 public:
27 enum class Flag
28 {
29 kNone = 0,
30 kDirty = 1 << 0,
32 };
33
34 float time; // 0
36 };
37 static_assert(sizeof(NiUpdateData) == 0x8);
38
40 {
41 public:
42 virtual ~PerformOpFunc(); // 00
43
44 // add
45 virtual bool operator()(NiAVObject* a_object); // 01
46 };
47 static_assert(sizeof(PerformOpFunc) == 0x8);
48
49 class NiAVObject : public NiObjectNET
50 {
51 public:
52 inline static constexpr auto RTTI = RTTI_NiAVObject;
53 inline static constexpr auto Ni_RTTI = NiRTTI_NiAVObject;
54
55 enum class Flag
56 {
57 kNone = 0,
58 kHidden = 1 << 0,
59 kSelectiveUpdate = 1 << 1,
62 kSelectiveUpdateRigid = 1 << 4,
63 kDisplayObject = 1 << 5,
64 kDisableSorting = 1 << 6,
67 kNoDecals = 1 << 10,
68 kAlwaysDraw = 1 << 11,
69 kMeshLOD = 1 << 12,
70 kFixedBound = 1 << 13,
71 kTopFadeNode = 1 << 14,
72 kIgnoreFade = 1 << 15,
73 kNoAnimSyncX = 1 << 16,
74 kNoAnimSyncY = 1 << 17,
75 kNoAnimSyncZ = 1 << 18,
76 kNoAnimSyncS = 1 << 19,
77 kNoDismember = 1 << 20,
78 kNoDismemberValidity = 1 << 21,
79 kRenderUse = 1 << 22,
80 kMaterialsApplied = 1 << 23,
81 kHighDetail = 1 << 24,
82 kForceUpdate = 1 << 25,
83 kPreProcessedNode = 1 << 26
84 };
85
86 ~NiAVObject() override; // 00
87
88 // override (NiObjectNET)
89 const NiRTTI* GetRTTI() const override; // 02
90 void LoadBinary(NiStream& a_stream) override; // 18
91 void LinkObject(NiStream& a_stream) override; // 19
92 bool RegisterStreamables(NiStream& a_stream) override; // 1A
93 void SaveBinary(NiStream& a_stream) override; // 1B
94 bool IsEqual(NiObject* a_object) override; // 1C
95 void ProcessClone(NiCloningProcess& a_cloning) override; // 1D
96
97 // add
98 virtual void UpdateControllers(NiUpdateData& a_data); // 25
99 virtual void PerformOp(PerformOpFunc& a_func); // 26
100 virtual void AttachProperty(NiAlphaProperty* a_property); // 27 - { return; }
101 virtual void SetMaterialNeedsUpdate(bool a_needsUpdate); // 28 - { return; }
102 virtual void SetDefaultMaterialNeedsUpdateFlag(bool a_flag); // 29 - { return; }
103 virtual NiAVObject* GetObjectByName(const BSFixedString& a_name); // 2A
104 virtual void SetSelectiveUpdateFlags(bool& a_selectiveUpdate, bool a_selectiveUpdateTransforms, bool& a_rigid); // 2B
105 virtual void UpdateDownwardPass(NiUpdateData& a_data, std::uint32_t a_arg2); // 2C
106 virtual void UpdateSelectedDownwardPass(NiUpdateData& a_data, std::uint32_t a_arg2); // 2D
107 virtual void UpdateRigidDownwardPass(NiUpdateData& a_data, std::uint32_t a_arg2); // 2E
108 virtual void UpdateWorldBound(); // 2F - { return; }
109 virtual void UpdateWorldData(NiUpdateData* a_data); // 30
110 virtual void UpdateTransformAndBounds(NiUpdateData& a_data); // 31
111 virtual void PreAttachUpdate(NiNode* a_parent, NiUpdateData& a_data); // 32
112 virtual void PostAttachUpdate(); // 33
113 virtual void OnVisible(NiCullingProcess& a_process); // 34 - { return; }
114
115 void CullNode(bool a_cull);
116 [[nodiscard]] bool GetAppCulled() const;
118 [[nodiscard]] COL_LAYER GetCollisionLayer() const;
120 [[nodiscard]] TESObjectREFR* GetUserData() const;
121 [[nodiscard]] bool HasAnimation() const;
122 [[nodiscard]] bool HasShaderType(BSShaderMaterial::Feature a_type);
124 void SetAppCulled(bool a_cull);
125 void SetCollisionLayer(COL_LAYER a_collisionLayer);
126 void SetCollisionLayerAndGroup(COL_LAYER a_collisionLayer, std::uint32_t a_group);
127 bool SetMotionType(std::uint32_t a_motionType, bool a_arg2 = true, bool a_arg3 = false, bool a_allowActivate = true);
128 bool SetProjectedUVData(const NiColorA& a_projectedUVParams, const NiColor& a_projectedUVColor, bool a_isSnow);
129 void TintScenegraph(const NiColorA& a_color);
130 void Update(NiUpdateData& a_data);
131 void UpdateBodyTint(const NiColor& a_color);
132 void UpdateHairColor(const NiColor& a_color);
133 void UpdateMaterialAlpha(float a_alpha, bool a_doOnlySkin);
134 void UpdateRigidConstraints(bool a_enable, std::uint8_t a_arg2 = 1, std::uint32_t a_arg3 = 1);
135
136 // members
137 NiNode* parent; // 030
138 std::uint32_t parentIndex; // 038
139 std::uint32_t unk03C; // 03C
147 float fadeAmount; // 100
148 std::uint32_t lastUpdatedFrameCounter; // 104
149 std::uint8_t unk108; // 108
150 std::uint8_t flags02; // 109
151 std::uint16_t unk10A; // 10A
152 std::uint32_t pad10C; // 10C
153 };
154 static_assert(sizeof(NiAVObject) == 0x110);
155}
Definition: BSGeometry.h:15
Feature
Definition: BSShaderMaterial.h:14
Definition: NiAVObject.h:50
virtual void UpdateSelectedDownwardPass(NiUpdateData &a_data, std::uint32_t a_arg2)
BSGeometry * GetFirstGeometryOfShaderType(BSShaderMaterial::Feature a_type)
virtual void PerformOp(PerformOpFunc &a_func)
static constexpr auto Ni_RTTI
Definition: NiAVObject.h:53
std::uint8_t unk108
Definition: NiAVObject.h:149
void UpdateRigidConstraints(bool a_enable, std::uint8_t a_arg2=1, std::uint32_t a_arg3=1)
void UpdateHairColor(const NiColor &a_color)
static constexpr auto RTTI
Definition: NiAVObject.h:52
virtual void UpdateRigidDownwardPass(NiUpdateData &a_data, std::uint32_t a_arg2)
NiNode * parent
Definition: NiAVObject.h:137
COL_LAYER GetCollisionLayer() const
void SetCollisionLayer(COL_LAYER a_collisionLayer)
const NiRTTI * GetRTTI() const override
virtual void SetSelectiveUpdateFlags(bool &a_selectiveUpdate, bool a_selectiveUpdateTransforms, bool &a_rigid)
NiTransform previousWorld
Definition: NiAVObject.h:143
virtual void PreAttachUpdate(NiNode *a_parent, NiUpdateData &a_data)
void Update(NiUpdateData &a_data)
void UpdateBodyTint(const NiColor &a_color)
std::uint32_t parentIndex
Definition: NiAVObject.h:138
bool SetProjectedUVData(const NiColorA &a_projectedUVParams, const NiColor &a_projectedUVColor, bool a_isSnow)
virtual NiAVObject * GetObjectByName(const BSFixedString &a_name)
NiTransform world
Definition: NiAVObject.h:142
void LoadBinary(NiStream &a_stream) override
std::uint16_t unk10A
Definition: NiAVObject.h:151
void LinkObject(NiStream &a_stream) override
~NiAVObject() override
stl::enumeration< Flag, std::uint32_t > flags
Definition: NiAVObject.h:145
bhkCollisionObject * GetCollisionObject() const
bool HasAnimation() const
virtual void PostAttachUpdate()
bool SetMotionType(std::uint32_t a_motionType, bool a_arg2=true, bool a_arg3=false, bool a_allowActivate=true)
void ProcessClone(NiCloningProcess &a_cloning) override
bool HasShaderType(BSShaderMaterial::Feature a_type)
virtual void AttachProperty(NiAlphaProperty *a_property)
NiPointer< NiCollisionObject > collisionObject
Definition: NiAVObject.h:140
virtual void SetMaterialNeedsUpdate(bool a_needsUpdate)
virtual void UpdateWorldData(NiUpdateData *a_data)
void SaveBinary(NiStream &a_stream) override
void CullNode(bool a_cull)
void SetCollisionLayerAndGroup(COL_LAYER a_collisionLayer, std::uint32_t a_group)
NiBound worldBound
Definition: NiAVObject.h:144
virtual void UpdateControllers(NiUpdateData &a_data)
virtual void UpdateWorldBound()
TESObjectREFR * userData
Definition: NiAVObject.h:146
virtual void OnVisible(NiCullingProcess &a_process)
void SetAppCulled(bool a_cull)
virtual void SetDefaultMaterialNeedsUpdateFlag(bool a_flag)
float fadeAmount
Definition: NiAVObject.h:147
std::uint32_t unk03C
Definition: NiAVObject.h:139
TESObjectREFR * GetUserData() const
bool IsEqual(NiObject *a_object) override
void RemoveDecals()
std::uint8_t flags02
Definition: NiAVObject.h:150
NiTransform local
Definition: NiAVObject.h:141
void TintScenegraph(const NiColorA &a_color)
Flag
Definition: NiAVObject.h:56
bool RegisterStreamables(NiStream &a_stream) override
std::uint32_t lastUpdatedFrameCounter
Definition: NiAVObject.h:148
bool GetAppCulled() const
virtual void UpdateTransformAndBounds(NiUpdateData &a_data)
std::uint32_t pad10C
Definition: NiAVObject.h:152
void UpdateMaterialAlpha(float a_alpha, bool a_doOnlySkin)
virtual void UpdateDownwardPass(NiUpdateData &a_data, std::uint32_t a_arg2)
Definition: NiAlphaProperty.h:8
Definition: NiBound.h:8
Definition: NiCloningProcess.h:10
Definition: NiColor.h:276
Definition: NiColor.h:11
Definition: NiCullingProcess.h:34
Definition: NiNode.h:12
Definition: NiObject.h:37
Definition: NiObjectNET.h:13
Definition: NiSmartPointer.h:9
Definition: NiRTTI.h:6
Definition: NiStream.h:27
Definition: NiTransform.h:9
Definition: NiAVObject.h:25
float time
Definition: NiAVObject.h:34
stl::enumeration< Flag, std::uint32_t > flags
Definition: NiAVObject.h:35
Flag
Definition: NiAVObject.h:28
Definition: NiAVObject.h:40
virtual ~PerformOpFunc()
virtual bool operator()(NiAVObject *a_object)
Definition: TESObjectREFR.h:110
Definition: bhkCollisionObject.h:8
Definition: PCH.h:217
Definition: AbsorbEffect.h:6
constexpr REL::ID RTTI_NiAVObject(static_cast< std::uint64_t >(684827))
constexpr REL::ID NiRTTI_NiAVObject(static_cast< std::uint64_t >(523895))
COL_LAYER
Definition: CollisionLayers.h:6