CommonLibSSE NG
BSFaceGenNiNode.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSPointerHandle.h"
4 #include "RE/N/NiMatrix3.h"
5 #include "RE/N/NiNode.h"
6 #include "RE/N/NiSmartPointer.h"
7 
8 namespace RE
9 {
10  class BSFaceGenAnimationData;
11  class NiNode;
12 
13  class BSFaceGenNiNode : public NiNode
14  {
15  public:
16  inline static constexpr auto RTTI = RTTI_BSFaceGenNiNode;
17  inline static auto Ni_RTTI = NiRTTI_BSFaceGenNiNode;
18 
19  struct RUNTIME_DATA
20  {
21 #define RUNTIME_DATA_CONTENT \
22  NiMatrix3 baseRotation; /* 00 */ \
23  std::uint32_t pad14C; /* 24 */ \
24  NiPointer<BSFaceGenAnimationData> animationData; /* 28 */ \
25  float lastTime; /* 30 */ \
26  ActorHandle unk15C; /* 34 */ \
27  std::uint16_t flags; /* 38 */ \
28  std::uint16_t pad162; /* 3A */ \
29  std::uint32_t pad164; /* 3C */
30 
32  };
33  static_assert(sizeof(RUNTIME_DATA) == 0x40);
34 
35  ~BSFaceGenNiNode() override; // 00
36 
37  // override (NiNode)
38  const NiRTTI* GetRTTI() const override; // 02
39  NiObject* CreateClone(NiCloningProcess& a_cloning) override; // 17
40 #ifndef SKYRIM_CROSS_VR
41  // The following are virtual functions past the point where VR compatibility breaks.
42  void UpdateDownwardPass(NiUpdateData& a_data, std::uint32_t a_arg2) override; // 2C
43 #endif
44 
45  // add
46  SKYRIM_REL_VR_VIRTUAL void FixSkinInstances(NiNode* a_skeleton, bool a_arg2); // 3E
47 
48  [[nodiscard]] inline RUNTIME_DATA& GetRuntimeData() noexcept
49  {
50  return REL::RelocateMember<RUNTIME_DATA>(this, 0x128, 0x150);
51  }
52 
53  [[nodiscard]] inline const RUNTIME_DATA& GetRuntimeData() const noexcept
54  {
55  return REL::RelocateMember<RUNTIME_DATA>(this, 0x128, 0x150);
56  }
57 
58  // members
59 #ifndef SKYRIM_CROSS_VR
60  RUNTIME_DATA_CONTENT // 128, 150
61 #endif
62  };
63 #ifndef ENABLE_SKYRIM_VR
64  static_assert(sizeof(BSFaceGenNiNode) == 0x168);
65 #elif !defined(ENABLE_SKYRIM_AE) && !defined(ENABLE_SKYRIM_SE)
66  static_assert(sizeof(BSFaceGenNiNode) == 0x190);
67 #endif
68 }
69 #undef RUNTIME_DATA_CONTENT
#define RUNTIME_DATA_CONTENT
Definition: BSFaceGenNiNode.h:21
#define SKYRIM_REL_VR_VIRTUAL
Definition: Common.h:94
Definition: BSFaceGenNiNode.h:14
static auto Ni_RTTI
Definition: BSFaceGenNiNode.h:17
NiObject * CreateClone(NiCloningProcess &a_cloning) override
const RUNTIME_DATA & GetRuntimeData() const noexcept
Definition: BSFaceGenNiNode.h:53
const NiRTTI * GetRTTI() const override
static constexpr auto RTTI
Definition: BSFaceGenNiNode.h:16
SKYRIM_REL_VR_VIRTUAL void FixSkinInstances(NiNode *a_skeleton, bool a_arg2)
~BSFaceGenNiNode() override
void UpdateDownwardPass(NiUpdateData &a_data, std::uint32_t a_arg2) override
RUNTIME_DATA & GetRuntimeData() noexcept
Definition: BSFaceGenNiNode.h:48
Definition: NiCloningProcess.h:10
Definition: NiNode.h:12
Definition: NiObject.h:37
Definition: NiRTTI.h:6
Definition: NiAVObject.h:25
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_BSFaceGenNiNode(685584, 393369, 0x1ee87a8)
constexpr REL::VariantID NiRTTI_BSFaceGenNiNode(515572, 401747, 0x2fccc28)
Definition: BSFaceGenNiNode.h:20