CommonLibSSE NG
Loading...
Searching...
No Matches
MagicCaster.h
Go to the documentation of this file.
1#pragma once
2
5#include "RE/B/BSTArray.h"
6#include "RE/B/bhkPickData.h"
7#include "RE/M/MagicSystem.h"
8
9namespace 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?
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_alchStrength, 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);
81 bool TestProjectilePlacement(const Effect& a_effect, const bhkPickData& a_pickData);
82 void UpdateImpl(float a_delta);
83
84 // members
87 std::uint32_t pad24; // 24
90 float castingTimer; // 34
91 float currentSpellCost; // 38
92 float magnitudeOverride; // 3C
93 float nextTargetUpdate; // 40
94 float projectileTimer; // 44
95 };
96 static_assert(sizeof(MagicCaster) == 0x48);
97}
Definition ActiveEffect.h:27
Definition Actor.h:131
Definition BGSLoadGameBuffer.h:6
Definition BSTArray.h:377
Definition MagicCaster.h:25
virtual bool GetIsDualCasting() const
virtual bool CheckCast(MagicItem *a_spell, bool a_dualCast, float *a_alchStrength, MagicSystem::CannotCastReason *a_reason, bool a_useBaseValueForCost)
MagicItem * currentSpell
Definition MagicCaster.h:88
virtual NiNode * GetMagicNode()
float currentSpellCost
Definition MagicCaster.h:91
virtual void SaveGame(BGSSaveGameBuffer *a_buf)
BSTArray< BSSoundHandle > sounds
Definition MagicCaster.h:85
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:86
virtual Actor * GetCasterAsActor() const
virtual MagicSystem::CastingSource GetCastingSource() const
float magnitudeOverride
Definition MagicCaster.h:92
MagicTarget * FindPickTarget(NiPoint3 &a_targetLocation, TESObjectCELL **a_targetCell, bhkPickData &a_pickData)
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 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 void SetCurrentSpellImpl(MagicItem *a_spell)
virtual void SetCastingTimerForCharge()
float projectileTimer
Definition MagicCaster.h:94
virtual bool StartChargeImpl()
virtual void SetSkipCheckCast()
virtual void StartReadyImpl()
virtual void StartCastImpl()
void UpdateImpl(float a_delta)
virtual void SelectSpellImpl()
stl::enumeration< State, std::uint32_t > state
Definition MagicCaster.h:89
std::uint32_t pad24
Definition MagicCaster.h:87
float nextTargetUpdate
Definition MagicCaster.h:93
State
Definition MagicCaster.h:30
void InterruptCast(bool a_refund)
virtual void InterruptCastImpl(bool a_depleteEnergy)
bool TestProjectilePlacement(const Effect &a_effect, const bhkPickData &a_pickData)
float castingTimer
Definition MagicCaster.h:90
virtual void PrepareSound(MagicSystem::SoundID a_sound, MagicItem *a_spell)
virtual void FindTouchTarget()
virtual TESObjectREFR * GetCasterObjectReference(Actor **a_outCaster) const
virtual TESObjectREFR * GetCasterStatsObject() const
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:112
Definition PCH.h:223
SoundID
Definition MagicSystem.h:50
CannotCastReason
Definition MagicSystem.h:10
CastingSource
Definition MagicSystem.h:23
Definition AbsorbEffect.h:6
constexpr REL::VariantID RTTI_MagicCaster(513999, 393096, 0x1ee3a98)
Definition Effect.h:11
Definition bhkPickData.h:11