AzerothCore 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

Todo:
: Add more checks from Spell::CheckCast

Constructor & Destructor Documentation

◆ SpellTargetSelector()

SpellTargetSelector::SpellTargetSelector ( Unit caster,
uint32  spellId 
)
383 :
384 _caster(caster), _spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(sSpellMgr->GetSpellInfo(spellId), caster))
385{
387}
#define ASSERT
Definition: Errors.h:68
#define sSpellMgr
Definition: SpellMgr.h:825
SpellInfo const * _spellInfo
Definition: UnitAI.h:116
Unit const * _caster
Definition: UnitAI.h:115

References _spellInfo, and ASSERT.

Member Function Documentation

◆ operator()()

bool SpellTargetSelector::operator() ( Unit const *  target) const
390{
391 if (!target)
392 return false;
393
395 return false;
396
397 // copypasta from Spell::CheckRange
399 float max_range = _caster->GetSpellMaxRangeForTarget(target, _spellInfo);
400 float min_range = _caster->GetSpellMinRangeForTarget(target, _spellInfo);
401
402 if (target && target != _caster)
403 {
404 if (range_type == SPELL_RANGE_MELEE)
405 {
406 // Because of lag, we can not check too strictly here.
407 if (!_caster->IsWithinMeleeRange(target, max_range))
408 return false;
409 }
410 else if (!_caster->IsWithinCombatRange(target, max_range))
411 return false;
412
413 if (range_type == SPELL_RANGE_RANGED)
414 {
415 if (_caster->IsWithinMeleeRange(target))
416 return false;
417 }
418 else if (min_range && _caster->IsWithinCombatRange(target, min_range)) // skip this check if min_range = 0
419 return false;
420 }
421
422 return true;
423}
std::uint32_t uint32
Definition: Define.h:107
@ SPELL_CAST_OK
Definition: SharedDefines.h:1138
@ SPELL_RANGE_MELEE
Definition: Spell.h:91
@ SPELL_RANGE_RANGED
Definition: Spell.h:92
bool IsWithinCombatRange(Unit const *obj, float dist2compare) const
Definition: Unit.cpp:648
float GetSpellMinRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition: Unit.cpp:15167
bool IsWithinMeleeRange(Unit const *obj, float dist=0.f) const
Definition: Unit.cpp:664
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition: Unit.cpp:15147
SpellRangeEntry const * RangeEntry
Definition: SpellInfo.h:369
SpellCastResult CheckTarget(Unit const *caster, WorldObject const *target, bool implicit=true) const
Definition: SpellInfo.cpp:1759
uint32 Flags
Definition: DBCStructure.h:1796

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().