CommonLibSSE NG
TESWaterSystem.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSAtomic.h"
4 #include "RE/B/BSFixedString.h"
5 #include "RE/B/BSPointerHandle.h"
6 #include "RE/B/BSTArray.h"
7 #include "RE/B/BSTSingleton.h"
8 #include "RE/N/NiPoint2.h"
9 #include "RE/N/NiPoint3.h"
10 #include "RE/N/NiSmartPointer.h"
11 #include "RE/N/NiTPointerMap.h"
12 
13 namespace RE
14 {
15  class BSTriShape;
16  class NiNode;
17  class TESObjectCELL;
18  class TESWorldSpace;
19  class TESWaterDisplacement;
20  class TESWaterForm;
21  class TESWaterNormals;
22  class TESWaterObject;
23  class TESWaterReflections;
24  class WadingWaterData;
25 
26  class TESWaterSystem : public BSTSingletonSDM<TESWaterSystem>
27  {
28  public:
29  [[nodiscard]] static TESWaterSystem* GetSingleton()
30  {
31  REL::Relocation<TESWaterSystem**> singleton{ RELOCATION_ID(514290, 400450) };
32  return *singleton;
33  }
34 
35  void AddRipple(const NiPoint3& a_pos, float a_scale)
36  {
37  using func_t = decltype(&TESWaterSystem::AddRipple);
38  REL::Relocation<func_t> func{ RELOCATION_ID(31410, 32217) };
39  return func(this, a_pos, a_scale);
40  }
41 
42  // members
43  std::uint32_t pad000; // 000
45  std::uint32_t unk010; // 010
46  std::uint32_t pad014; // 014
47  float unk018; // 018
48  float unk01C; // 01C
53  std::uint32_t unk080; // 080
54  NiPoint2 unk084; // 084
55  std::uint32_t pad08C; // 08C
58  std::uint32_t reflectionExteriorCount; // 0A0
59  std::uint32_t reflectionInteriorCount; // 0A4
61  bool enabled; // 0B0
62  std::uint8_t pad0B1; // 0B1
63  std::uint16_t pad0B2; // 0B2
64  std::uint32_t unk0B4; // 0B4
65  bool playerUnderwater; // 0B8
66  bool unk0B9; // 0B9
67  bool unk0BA; // 0BA
68  std::uint8_t pad0BB; // 0BB
69  std::uint32_t unk0BC; // 0BC
70  float underwaterHeight; // 0C0
71  bool waterRadiusState; // 0C4
72  std::uint8_t pad0C5; // 0C5
73  std::uint8_t unk0C6; // 0C6
74  bool showProcedualWater; // 0C7
75  std::uint8_t unk0C8; // 0C8
76  std::uint8_t padC9; // 0C9
77  std::uint16_t padCA; // 0CA
78  std::uint32_t unk0CC; // 0CC
79  std::uint32_t unk0D0; // 0D0
80  float unk0D4; // 0D4
82  std::uint64_t unk0F8; // 0F8
83  std::uint64_t unk100; // 108
84  std::uint32_t unk108; // 108
85  std::uint32_t pad10C; // 10C
86  std::uint8_t unk110; // 110
87  std::uint8_t pad111; // 111
88  std::uint16_t pad112; // 112
89  std::uint32_t pad114; // 114
91  mutable BSSpinLock lock; // 120
93  };
94  static_assert(sizeof(TESWaterSystem) == 0x130);
95 };
#define RELOCATION_ID(a_se, a_ae)
Definition: PCH.h:724
Definition: Relocation.h:204
Definition: BSAtomic.h:51
Definition: BSTArray.h:377
Definition: NiPoint2.h:6
Definition: NiPoint3.h:6
Definition: NiSmartPointer.h:9
Definition: NiTPointerMap.h:10
Definition: TESObjectCELL.h:116
Definition: TESWaterForm.h:83
Definition: TESWaterSystem.h:27
std::uint32_t unk0BC
Definition: TESWaterSystem.h:69
NiTPointerMap< ActorHandle, WadingWaterData * > wadingWaterData
Definition: TESWaterSystem.h:81
std::uint8_t pad0BB
Definition: TESWaterSystem.h:68
NiPointer< NiNode > waterRoot
Definition: TESWaterSystem.h:56
bool playerUnderwater
Definition: TESWaterSystem.h:65
std::uint32_t pad000
Definition: TESWaterSystem.h:43
NiPoint2 unk084
Definition: TESWaterSystem.h:54
std::uint8_t unk0C8
Definition: TESWaterSystem.h:75
std::uint16_t pad112
Definition: TESWaterSystem.h:88
bool unk0BA
Definition: TESWaterSystem.h:67
BSTArray< NiPointer< TESWaterNormals > > waterNormals
Definition: TESWaterSystem.h:52
std::uint32_t pad014
Definition: TESWaterSystem.h:46
std::uint32_t pad08C
Definition: TESWaterSystem.h:55
bool waterRadiusState
Definition: TESWaterSystem.h:71
std::uint16_t pad0B2
Definition: TESWaterSystem.h:63
TESWaterForm * currentWaterType
Definition: TESWaterSystem.h:57
BSSpinLock lock
Definition: TESWaterSystem.h:91
std::uint32_t unk0D0
Definition: TESWaterSystem.h:79
float unk01C
Definition: TESWaterSystem.h:48
std::uint32_t pad10C
Definition: TESWaterSystem.h:85
std::uint32_t reflectionInteriorCount
Definition: TESWaterSystem.h:59
std::uint8_t unk0C6
Definition: TESWaterSystem.h:73
std::uint32_t reflectionExteriorCount
Definition: TESWaterSystem.h:58
bool unk0B9
Definition: TESWaterSystem.h:66
BSTArray< NiPointer< TESWaterObject > > waterObjects
Definition: TESWaterSystem.h:49
std::uint8_t pad0C5
Definition: TESWaterSystem.h:72
std::uint32_t unk010
Definition: TESWaterSystem.h:45
std::uint32_t unk0CC
Definition: TESWaterSystem.h:78
std::uint32_t unk080
Definition: TESWaterSystem.h:53
bool enabled
Definition: TESWaterSystem.h:61
bool showProcedualWater
Definition: TESWaterSystem.h:74
std::uint16_t padCA
Definition: TESWaterSystem.h:77
std::uint8_t padC9
Definition: TESWaterSystem.h:76
std::uint8_t pad0B1
Definition: TESWaterSystem.h:62
BSTArray< NiPointer< TESWaterReflections > > waterReflections
Definition: TESWaterSystem.h:50
float underwaterHeight
Definition: TESWaterSystem.h:70
float unk018
Definition: TESWaterSystem.h:47
std::uint32_t unk108
Definition: TESWaterSystem.h:84
std::uint64_t unk0F8
Definition: TESWaterSystem.h:82
void AddRipple(const NiPoint3 &a_pos, float a_scale)
Definition: TESWaterSystem.h:35
TESWorldSpace * worldSpace
Definition: TESWaterSystem.h:60
std::uint8_t pad111
Definition: TESWaterSystem.h:87
NiPointer< BSTriShape > autoWater
Definition: TESWaterSystem.h:92
BSTArray< NiPointer< TESWaterDisplacement > > waterDisplacement
Definition: TESWaterSystem.h:51
BSFixedString * type
Definition: TESWaterSystem.h:44
std::uint64_t unk100
Definition: TESWaterSystem.h:83
TESObjectCELL * unk118
Definition: TESWaterSystem.h:90
float unk0D4
Definition: TESWaterSystem.h:80
std::uint32_t pad114
Definition: TESWaterSystem.h:89
std::uint8_t unk110
Definition: TESWaterSystem.h:86
std::uint32_t unk0B4
Definition: TESWaterSystem.h:64
static TESWaterSystem * GetSingleton()
Definition: TESWaterSystem.h:29
Definition: TESWorldSpace.h:118
Definition: AbsorbEffect.h:6
Definition: BSTSingleton.h:50