CommonLibSSE NG
MagicCaster.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSPointerHandle.h"
4 #include "RE/B/BSSoundHandle.h"
5 #include "RE/B/BSTArray.h"
6 #include "RE/B/bhkPickData.h"
7 #include "RE/M/MagicSystem.h"
8 
9 namespace RE
10 {
11  class Actor;
12  class ActiveEffect;
13  class BGSSaveGameBuffer;
14  class BGSLoadGameBuffer;
15  class MagicItem;
16  class MagicTarget;
17  class NiNode;
18  class TESBoundObject;
19  class TESObjectCELL;
20  class TESObjectREFR;
21 
22  struct Effect;
23 
25  {
26  public:
27  inline static constexpr auto RTTI = RTTI_MagicCaster;
28 
29  enum class State
30  {
31  kNone = 0,
32  kUnk01, // Start?
33  kUnk02, // StartCharge?
34  kReady,
35  kUnk04, // PreStart?
36  kCharging,
37  kCasting,
38  kUnk07, // Unknown
39  kUnk08, // Interrupt
40  kUnk09, // Interrupt/Deselect
41  };
42 
43  virtual ~MagicCaster(); // 00
44 
45  // add
46  virtual void CastSpellImmediate(MagicItem* a_spell, bool a_noHitEffectArt, TESObjectREFR* a_target, float a_effectiveness, bool a_hostileEffectivenessOnly, float a_magnitudeOverride, Actor* a_blameActor); // 01
47  virtual void FindTouchTarget(); // 02
48  virtual void RequestCastImpl(); // 03
49  virtual bool StartChargeImpl(); // 04
50  virtual void StartReadyImpl(); // 05
51  virtual void StartCastImpl(); // 06
52  virtual void FinishCastImpl(); // 07 - { return; }
53  virtual void InterruptCastImpl(bool a_depleteEnergy); // 08 - { return; }
54  virtual void SpellCast(bool a_doCast, std::uint32_t a_arg2, MagicItem* a_spell); // 09 - { return; }
55  virtual bool CheckCast(MagicItem* a_spell, bool a_dualCast, float* a_effectStrength, MagicSystem::CannotCastReason* a_reason, bool a_useBaseValueForCost); // 0A
56  virtual TESObjectREFR* GetCasterStatsObject() const; // 0B - { return 0; }
57  virtual Actor* GetCasterAsActor() const; // 0C - { return 0; }
58  virtual TESObjectREFR* GetCasterObjectReference(Actor** a_outCaster) const; // 0D
59  virtual NiNode* GetMagicNode(); // 0E - { return 0; }
60  virtual void ClearMagicNode(); // 0F - { return; }
61  virtual void SetCurrentSpellImpl(MagicItem* a_spell); // 10 - { return; }
62  virtual void SelectSpellImpl(); // 11 - { return; }
63  virtual void DeselectSpellImpl(); // 12 - { return; }
64  virtual void SetSkipCheckCast(); // 13 - { return; }
65  virtual void SetCastingTimerForCharge(); // 14
66  virtual MagicSystem::CastingSource GetCastingSource() const; // 15 - { return 0; }
67  virtual bool GetIsDualCasting() const; // 16 - { return 0; }
68  virtual void SetDualCasting(bool a_set); // 17 - { return; }
69  virtual void SaveGame(BGSSaveGameBuffer* a_buf); // 18
70  virtual void LoadGame(BGSLoadGameBuffer* a_buf); // 19
71  virtual void FinishLoadGame(BGSLoadGameBuffer* a_buf); // 1A
72  virtual void PrepareSound(MagicSystem::SoundID a_sound, MagicItem* a_spell); // 1B
73  virtual void AdjustActiveEffect(ActiveEffect* a_activeEffect, float a_power, bool a_arg3); // 1C
74 
75  MagicTarget* FindPickTarget(NiPoint3& a_targetLocation, TESObjectCELL** a_targetCell, bhkPickData& a_pickData);
76  bool FindTargets(float a_effectivenessMult, std::uint32_t& a_targetCount, TESBoundObject* a_source, bool a_loadCast, bool a_adjustOnlyHostileEffectiveness);
77  void FinishCast();
79  void InterruptCast(bool a_refund);
80  void PlayReleaseSound(MagicItem* a_item);
81  void SetCurrentSpell(MagicItem* a_item);
82  bool TestProjectilePlacement(const Effect& a_effect, const bhkPickData& a_pickData);
83  void UpdateImpl(float a_delta);
84 
85  // members
88  std::uint32_t pad24; // 24
91  float castingTimer; // 34
92  float currentSpellCost; // 38
93  float magnitudeOverride; // 3C
94  float nextTargetUpdate; // 40
95  float projectileTimer; // 44
96  };
97  static_assert(sizeof(MagicCaster) == 0x48);
98 }
Definition: ActiveEffect.h:27
Definition: Actor.h:135
Definition: BGSLoadGameBuffer.h:6
Definition: BGSSaveGameBuffer.h:10
Definition: BSTArray.h:377
Definition: MagicCaster.h:25
virtual bool GetIsDualCasting() const
MagicItem * currentSpell
Definition: MagicCaster.h:89
float currentSpellCost
Definition: MagicCaster.h:92
virtual void SaveGame(BGSSaveGameBuffer *a_buf)
BSTArray< BSSoundHandle > sounds
Definition: MagicCaster.h:86
virtual bool CheckCast(MagicItem *a_spell, bool a_dualCast, float *a_effectStrength, MagicSystem::CannotCastReason *a_reason, bool a_useBaseValueForCost)
bool FindTargets(float a_effectivenessMult, std::uint32_t &a_targetCount, TESBoundObject *a_source, bool a_loadCast, bool a_adjustOnlyHostileEffectiveness)
virtual void RequestCastImpl()
virtual void DeselectSpellImpl()
float GetCurrentSpellCost()
ObjectRefHandle desiredTarget
Definition: MagicCaster.h:87
virtual MagicSystem::CastingSource GetCastingSource() const
float magnitudeOverride
Definition: MagicCaster.h:93
virtual NiNode * GetMagicNode()
virtual void FinishCastImpl()
virtual void SpellCast(bool a_doCast, std::uint32_t a_arg2, MagicItem *a_spell)
virtual void SetDualCasting(bool a_set)
virtual void CastSpellImmediate(MagicItem *a_spell, bool a_noHitEffectArt, TESObjectREFR *a_target, float a_effectiveness, bool a_hostileEffectivenessOnly, float a_magnitudeOverride, Actor *a_blameActor)
virtual void ClearMagicNode()
virtual ~MagicCaster()
virtual TESObjectREFR * GetCasterObjectReference(Actor **a_outCaster) const
virtual void LoadGame(BGSLoadGameBuffer *a_buf)
virtual void AdjustActiveEffect(ActiveEffect *a_activeEffect, float a_power, bool a_arg3)
static constexpr auto RTTI
Definition: MagicCaster.h:27
virtual void FinishLoadGame(BGSLoadGameBuffer *a_buf)
void PlayReleaseSound(MagicItem *a_item)
virtual Actor * GetCasterAsActor() const
virtual void SetCurrentSpellImpl(MagicItem *a_spell)
virtual void SetCastingTimerForCharge()
float projectileTimer
Definition: MagicCaster.h:95
virtual bool StartChargeImpl()
virtual void SetSkipCheckCast()
virtual void StartReadyImpl()
virtual void StartCastImpl()
void SetCurrentSpell(MagicItem *a_item)
void UpdateImpl(float a_delta)
virtual void SelectSpellImpl()
stl::enumeration< State, std::uint32_t > state
Definition: MagicCaster.h:90
std::uint32_t pad24
Definition: MagicCaster.h:88
float nextTargetUpdate
Definition: MagicCaster.h:94
MagicTarget * FindPickTarget(NiPoint3 &a_targetLocation, TESObjectCELL **a_targetCell, bhkPickData &a_pickData)
State
Definition: MagicCaster.h:30
void InterruptCast(bool a_refund)
virtual void InterruptCastImpl(bool a_depleteEnergy)
virtual TESObjectREFR * GetCasterStatsObject() const
bool TestProjectilePlacement(const Effect &a_effect, const bhkPickData &a_pickData)
float castingTimer
Definition: MagicCaster.h:91
virtual void PrepareSound(MagicSystem::SoundID a_sound, MagicItem *a_spell)
virtual void FindTouchTarget()
Definition: MagicItem.h:30
Definition: MagicTarget.h:26
Definition: NiNode.h:12
Definition: NiPoint3.h:6
Definition: TESBoundObject.h:24
Definition: TESObjectCELL.h:116
Definition: TESObjectREFR.h:113
SoundID
Definition: MagicSystem.h:51
CannotCastReason
Definition: MagicSystem.h:10
CastingSource
Definition: MagicSystem.h:24
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_MagicCaster(513999, 393096, 0x1ee3a98)
Definition: Effect.h:11
Definition: bhkPickData.h:11