AzeorthCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SpellTargetSelector Struct Reference

#include "UnitAI.h"

Inheritance diagram for SpellTargetSelector:
Acore::unary_function< Unit *, bool >

Public Member Functions

 SpellTargetSelector (Unit *caster, uint32 spellId)
 
bool operator() (Unit const *target) const
 

Private Attributes

Unit const * _caster
 
SpellInfo const * _spellInfo
 

Additional Inherited Members

- Public Types inherited from Acore::unary_function< Unit *, bool >
typedef Unitargument_type
 
typedef bool result_type
 

Detailed Description

Constructor & Destructor Documentation

◆ SpellTargetSelector()

SpellTargetSelector::SpellTargetSelector ( Unit caster,
uint32  spellId 
)
360 :
361 _caster(caster), _spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(sSpellMgr->GetSpellInfo(spellId), caster))
362{
364}
#define ASSERT
Definition: Errors.h:68
#define sSpellMgr
Definition: SpellMgr.h:803
SpellInfo const * _spellInfo
Definition: UnitAI.h:105
Unit const * _caster
Definition: UnitAI.h:104

References _spellInfo, and ASSERT.

Member Function Documentation

◆ operator()()

bool SpellTargetSelector::operator() ( Unit const *  target) const
367{
368 if (!target)
369 return false;
370
372 return false;
373
374 // copypasta from Spell::CheckRange
376 float max_range = _caster->GetSpellMaxRangeForTarget(target, _spellInfo);
377 float min_range = _caster->GetSpellMinRangeForTarget(target, _spellInfo);
378
379 if (target && target != _caster)
380 {
381 if (range_type == SPELL_RANGE_MELEE)
382 {
383 // Because of lag, we can not check too strictly here.
384 if (!_caster->IsWithinMeleeRange(target, max_range))
385 return false;
386 }
387 else if (!_caster->IsWithinCombatRange(target, max_range))
388 return false;
389
390 if (range_type == SPELL_RANGE_RANGED)
391 {
392 if (_caster->IsWithinMeleeRange(target))
393 return false;
394 }
395 else if (min_range && _caster->IsWithinCombatRange(target, min_range)) // skip this check if min_range = 0
396 return false;
397 }
398
399 return true;
400}
std::uint32_t uint32
Definition: Define.h:108
@ SPELL_RANGE_MELEE
Definition: Spell.h:89
@ SPELL_RANGE_RANGED
Definition: Spell.h:90
@ SPELL_CAST_OK
Definition: SharedDefines.h:1110
bool IsWithinCombatRange(Unit const *obj, float dist2compare) const
Definition: Unit.cpp:666
float GetSpellMinRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition: Unit.cpp:15024
bool IsWithinMeleeRange(Unit const *obj, float dist=0.f) const
Definition: Unit.cpp:682
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition: Unit.cpp:15004
SpellRangeEntry const * RangeEntry
Definition: SpellInfo.h:367
SpellCastResult CheckTarget(Unit const *caster, WorldObject const *target, bool implicit=true) const
Definition: SpellInfo.cpp:1743
uint32 Flags
Definition: DBCStructure.h:1758

References _caster, _spellInfo, SpellInfo::CheckTarget(), SpellRangeEntry::Flags, Unit::GetSpellMaxRangeForTarget(), Unit::GetSpellMinRangeForTarget(), Unit::IsWithinCombatRange(), Unit::IsWithinMeleeRange(), SpellInfo::RangeEntry, SPELL_CAST_OK, SPELL_RANGE_MELEE, and SPELL_RANGE_RANGED.

Member Data Documentation

◆ _caster

Unit const* SpellTargetSelector::_caster
private

Referenced by operator()().

◆ _spellInfo

SpellInfo const* SpellTargetSelector::_spellInfo
private

Referenced by operator()(), and SpellTargetSelector().