CommonLibSSE NG
BeamProjectile.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSTEvent.h"
4 #include "RE/F/FormTypes.h"
5 #include "RE/P/Projectile.h"
6 
7 namespace RE
8 {
9  class BSProceduralGeomEvent;
10  struct BeamProjectileImpactEvent;
11 
13  public Projectile, // 000
14  public BSTEventSource<BeamProjectileImpactEvent>, // 1E0
15  public BSTEventSink<BSProceduralGeomEvent> // 1D8
16  {
17  public:
18  inline static constexpr auto RTTI = RTTI_BeamProjectile;
19  inline static constexpr auto VTABLE = VTABLE_BeamProjectile;
20  inline static constexpr auto FORMTYPE = FormType::ProjectileBeam;
21 
22  struct RecordFlags
23  {
24  enum RecordFlag : std::uint32_t
25  {
26  };
27  };
28 
29  ~BeamProjectile() override; // 00
30 
31  // override (Projectile)
32  void SaveGame(BGSSaveFormBuffer* a_buf) override; // 0E
33  void LoadGame(BGSLoadFormBuffer* a_buf) override; // 0F
34  void InitLoadGame(BGSLoadFormBuffer* a_buf) override; // 10
35  void FinishLoadGame(BGSLoadFormBuffer* a_buf) override; // 11
36  void Revert(BGSLoadFormBuffer* a_buf) override; // 12
37 #ifndef SKYRIM_CROSS_VR
38  bool IsBeamProjectile() override; // A5
39  void Process3D() override; // A9
40  void UpdateImpl(float a_delta) override; // AB
41  bool GetKillOnCollision() override; // B8
42  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
43  void Handle3DLoaded() override; // C0
44  bool ShouldUseDesiredTarget() override; // C1
45 #endif
46 
47  // override (BSTEventSink<BSProceduralGeomEvent>)
48  BSEventNotifyControl ProcessEvent(const BSProceduralGeomEvent* a_event, BSTEventSource<BSProceduralGeomEvent>* a_eventSource) override; // 01
49 
51  {
52 #define BEAM_RUNTIME_DATA_CONTENT \
53  std::uint64_t unk238; // 238, 240
54  };
55 
56  [[nodiscard]] inline BEAM_RUNTIME_DATA& GetBeamRuntimeData() noexcept
57  {
58  return REL::RelocateMemberIfNewer<BEAM_RUNTIME_DATA>(SKSE::RUNTIME_SSE_1_6_629, this, 0x98, 0xA0);
59  }
60 
61  [[nodiscard]] inline const BEAM_RUNTIME_DATA& GetBeamRuntimeData() const noexcept
62  {
63  return REL::RelocateMemberIfNewer<BEAM_RUNTIME_DATA>(SKSE::RUNTIME_SSE_1_6_629, this, 0x98, 0xA0);
64  }
65 
66  // members
67 #ifndef ENABLE_SKYRIM_AE
69 #endif
70  };
71 #ifndef ENABLE_SKYRIM_AE
72  static_assert(sizeof(BeamProjectile) == 0x240);
73 #endif
74 }
75 #undef BEAM_RUNTIME_DATA_CONTENT
#define BEAM_RUNTIME_DATA_CONTENT
Definition: BeamProjectile.h:52
Definition: BGSLoadFormBuffer.h:11
Definition: BGSSaveFormBuffer.h:8
Definition: BSTEvent.h:143
Definition: BSTEvent.h:19
Definition: BeamProjectile.h:16
void LoadGame(BGSLoadFormBuffer *a_buf) override
void Handle3DLoaded() override
void SaveGame(BGSSaveFormBuffer *a_buf) 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
bool ShouldUseDesiredTarget() override
const BEAM_RUNTIME_DATA & GetBeamRuntimeData() const noexcept
Definition: BeamProjectile.h:61
BSEventNotifyControl ProcessEvent(const BSProceduralGeomEvent *a_event, BSTEventSource< BSProceduralGeomEvent > *a_eventSource) override
void UpdateImpl(float a_delta) override
void InitLoadGame(BGSLoadFormBuffer *a_buf) override
static constexpr auto RTTI
Definition: BeamProjectile.h:18
void FinishLoadGame(BGSLoadFormBuffer *a_buf) override
~BeamProjectile() override
void Process3D() override
static constexpr auto FORMTYPE
Definition: BeamProjectile.h:20
static constexpr auto VTABLE
Definition: BeamProjectile.h:19
void Revert(BGSLoadFormBuffer *a_buf) override
bool IsBeamProjectile() override
BEAM_RUNTIME_DATA & GetBeamRuntimeData() noexcept
Definition: BeamProjectile.h:56
bool GetKillOnCollision() 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_BeamProjectile(687499, 395349, 0x1f1b218)
constexpr std::array< REL::VariantID, 5 > VTABLE_BeamProjectile
Definition: Offsets_VTABLE.h:2776
BSEventNotifyControl
Definition: BSTEvent.h:12
constexpr REL::Version RUNTIME_SSE_1_6_629(1, 6, 629, 0)
Definition: BeamProjectile.h:51
Definition: BeamProjectile.h:23
RecordFlag
Definition: BeamProjectile.h:25