CommonLibSSE NG
BGSDecalNode.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSTArray.h"
4 #include "RE/N/NiNode.h"
5 #include "RE/N/NiSmartPointer.h"
6 
7 namespace RE
8 {
9  class BSTempEffect;
10 
11  class BGSDecalNode : public NiNode
12  {
13  public:
14  inline static constexpr auto RTTI = RTTI_BGSDecalNode;
15  inline static auto Ni_RTTI = NiRTTI_BGSDecalNode;
16 
17  struct RUNTIME_DATA
18  {
19 #define RUNTIME_DATA_CONTENT \
20  BSTArray<NiPointer<BSTempEffect>> decals; /* 00 */ \
21  bool isSkinned; /* 18 */
22 
24  };
25  static_assert(sizeof(RUNTIME_DATA) == 0x20);
26 
27  ~BGSDecalNode() override; // 00
28 
29  // override (NiNode)
30  const NiRTTI* GetRTTI() const override; // 02
31  NiObject* CreateClone(NiCloningProcess& a_cloning) override; // 17
32  void ProcessClone(NiCloningProcess& a_cloning) override; // 1D
33 #ifndef SKYRIM_CROSS_VR
34  // The following are virtual functions past the point where VR compatibility breaks.
35  void OnVisible(NiCullingProcess& a_process) override; // 34
36 #endif
37 
38  // add
39  SKYRIM_REL_VR_VIRTUAL std::uint8_t Unk_3E(); // 3E - { return 1; }
40  SKYRIM_REL_VR_VIRTUAL void AttachDecal(BSTempEffect* a_decal, bool a_firstAvail); // 3F
41 
42  [[nodiscard]] inline RUNTIME_DATA& GetRuntimeData() noexcept
43  {
44  return REL::RelocateMember<RUNTIME_DATA>(this, 0x128, 0x150);
45  }
46 
47  [[nodiscard]] inline const RUNTIME_DATA& GetRuntimeData() const noexcept
48  {
49  return REL::RelocateMember<RUNTIME_DATA>(this, 0x128, 0x150);
50  }
51 
52  // members
53 #ifndef SKYRIM_CROSS_VR
54  RUNTIME_DATA_CONTENT // 128, 150
55 #endif
56  };
57 #ifndef ENABLE_SKYRIM_VR
58  static_assert(sizeof(BGSDecalNode) == 0x148);
59 #elif !defined(ENABLE_SKYRIM_AE) && !defined(ENABLE_SKYRIM_SE)
60  static_assert(sizeof(BGSDecalNode) == 0x170);
61 #endif
62 }
63 #undef RUNTIME_DATA_CONTENT
#define RUNTIME_DATA_CONTENT
Definition: BGSDecalNode.h:19
#define SKYRIM_REL_VR_VIRTUAL
Definition: Common.h:94
Definition: BGSDecalNode.h:12
static auto Ni_RTTI
Definition: BGSDecalNode.h:15
void ProcessClone(NiCloningProcess &a_cloning) override
NiObject * CreateClone(NiCloningProcess &a_cloning) override
void OnVisible(NiCullingProcess &a_process) override
const RUNTIME_DATA & GetRuntimeData() const noexcept
Definition: BGSDecalNode.h:47
static constexpr auto RTTI
Definition: BGSDecalNode.h:14
RUNTIME_DATA & GetRuntimeData() noexcept
Definition: BGSDecalNode.h:42
~BGSDecalNode() override
SKYRIM_REL_VR_VIRTUAL void AttachDecal(BSTempEffect *a_decal, bool a_firstAvail)
SKYRIM_REL_VR_VIRTUAL std::uint8_t Unk_3E()
const NiRTTI * GetRTTI() const override
Definition: BSTempEffect.h:29
Definition: NiCloningProcess.h:10
Definition: NiCullingProcess.h:34
Definition: NiNode.h:12
Definition: NiObject.h:37
Definition: NiRTTI.h:6
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_BGSDecalNode(684910, 392644, 0x1edc258)
constexpr REL::VariantID NiRTTI_BGSDecalNode(514417, 400564, 0x1f891a0)
Definition: BGSDecalNode.h:18