CommonLibSSE NG
FlameProjectile.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/F/FormTypes.h"
4 #include "RE/P/Projectile.h"
5 
6 namespace RE
7 {
8  class FlameProjectile : public Projectile
9  {
10  public:
11  inline static constexpr auto RTTI = RTTI_FlameProjectile;
12  inline static constexpr auto VTABLE = VTABLE_FlameProjectile;
13  inline static constexpr auto FORMTYPE = FormType::ProjectileFlame;
14 
15  struct RecordFlags
16  {
17  enum RecordFlag : std::uint32_t
18  {
19  };
20  };
21 
22  ~FlameProjectile() override; // 00
23 
24  // override (Projectile)
25  void SaveGame(BGSSaveFormBuffer* a_buf) override; // 0E
26  void LoadGame(BGSLoadFormBuffer* a_buf) override; // 0F
27  void InitLoadGame(BGSLoadFormBuffer* a_buf) override; // 10
28  void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 11
29  void Revert(BGSLoadFormBuffer* a_buf) override; // 12
30 #ifndef SKYRIM_CROSS_VR
31  bool IsFlameProjectile() override; // A4 - { return 1; }
32  void Process3D() override; // A9
33  void UpdateImpl(float a_delta) override; // AB
34  bool RunTargetPick() override; // B7
35  void AddImpact(TESObjectREFR* a_ref, const NiPoint3& a_targetLoc, const NiPoint3& a_velocity, hkpCollidable* a_collidable, std::int32_t a_arg6, std::uint32_t a_arg7) override; // BD
36  void Handle3DLoaded() override; // C0 - { flags = flags & 0xFFFFFFCC | 8; }
37  bool ShouldUseDesiredTarget() override; // C1
38 #endif
39 
41  {
42 #define FLAME_RUNTIME_DATA_CONTENT \
43  float expirationTimer; /* 1D8 */ \
44  float coneAngle; /* 1DC */
45 
47  };
48 
49  [[nodiscard]] inline FLAME_RUNTIME_DATA& GetFlameRuntimeData() noexcept
50  {
51  return REL::RelocateMemberIfNewer<FLAME_RUNTIME_DATA>(SKSE::RUNTIME_SSE_1_6_629, this, 0x1D8, 0x1E0);
52  }
53 
54  [[nodiscard]] inline const FLAME_RUNTIME_DATA& GetFlameRuntimeData() const noexcept
55  {
56  return REL::RelocateMemberIfNewer<FLAME_RUNTIME_DATA>(SKSE::RUNTIME_SSE_1_6_629, this, 0x1D8, 0x1E0);
57  }
58 
59  // members
60 #ifndef ENABLE_SKYRIM_AE
62 #endif
63  };
64 #ifndef ENABLE_SKYRIM_AE
65  static_assert(sizeof(FlameProjectile) == 0x1E0);
66 #endif
67 }
68 #undef FLAME_RUNTIME_DATA_CONTENT
#define FLAME_RUNTIME_DATA_CONTENT
Definition: FlameProjectile.h:42
Definition: BGSLoadFormBuffer.h:11
Definition: BGSSaveFormBuffer.h:8
Definition: FlameProjectile.h:9
static constexpr auto FORMTYPE
Definition: FlameProjectile.h:13
~FlameProjectile() override
void Revert(BGSLoadFormBuffer *a_buf) override
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
bool IsFlameProjectile() override
static constexpr auto VTABLE
Definition: FlameProjectile.h:12
bool ShouldUseDesiredTarget() override
static constexpr auto RTTI
Definition: FlameProjectile.h:11
FLAME_RUNTIME_DATA & GetFlameRuntimeData() noexcept
Definition: FlameProjectile.h:49
void Process3D() override
void UpdateImpl(float a_delta) override
void AddImpact(TESObjectREFR *a_ref, const NiPoint3 &a_targetLoc, const NiPoint3 &a_velocity, hkpCollidable *a_collidable, std::int32_t a_arg6, std::uint32_t a_arg7) override
const FLAME_RUNTIME_DATA & GetFlameRuntimeData() const noexcept
Definition: FlameProjectile.h:54
void Handle3DLoaded() override
void LoadGame(BGSLoadFormBuffer *a_buf) override
bool RunTargetPick() override
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
void SaveGame(BGSSaveFormBuffer *a_buf) override
Definition: NiPoint3.h:6
Definition: Projectile.h:30
Definition: TESObjectREFR.h:113
Definition: hkpCollidable.h:13
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_FlameProjectile(687505, 395355, 0x1f1b378)
constexpr std::array< REL::VariantID, 4 > VTABLE_FlameProjectile
Definition: Offsets_VTABLE.h:2781
constexpr REL::Version RUNTIME_SSE_1_6_629(1, 6, 629, 0)
Definition: FlameProjectile.h:41
Definition: FlameProjectile.h:16
RecordFlag
Definition: FlameProjectile.h:18