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 
)
499 :
500 _caster(caster), _spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(sSpellMgr->GetSpellInfo(spellId), caster))
501{
503}
#define ASSERT
Definition Errors.h:68
#define sSpellMgr
Definition SpellMgr.h:847
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
506{
507 if (!target)
508 return false;
509
511 return false;
512
513 // copypasta from Spell::CheckRange
515 float max_range = _caster->GetSpellMaxRangeForTarget(target, _spellInfo);
516 float min_range = _caster->GetSpellMinRangeForTarget(target, _spellInfo);
517
518 if (target && target != _caster)
519 {
520 if (range_type == SPELL_RANGE_MELEE)
521 {
522 // Because of lag, we can not check too strictly here.
523 if (!_caster->IsWithinMeleeRange(target, max_range))
524 return false;
525 }
526 else if (!_caster->IsWithinCombatRange(target, max_range))
527 return false;
528
529 if (range_type == SPELL_RANGE_RANGED)
530 {
531 if (_caster->IsWithinMeleeRange(target))
532 return false;
533 }
534 else if (min_range && _caster->IsWithinCombatRange(target, min_range)) // skip this check if min_range = 0
535 return false;
536 }
537
538 return true;
539}
std::uint32_t uint32
Definition Define.h:107
@ SPELL_CAST_OK
Definition SharedDefines.h:1126
@ SPELL_RANGE_MELEE
Definition Spell.h:101
@ SPELL_RANGE_RANGED
Definition Spell.h:102
SpellRangeEntry const * RangeEntry
Definition SpellInfo.h:393
SpellCastResult CheckTarget(Unit const *caster, WorldObject const *target, bool implicit=true) const
Definition SpellInfo.cpp:1653
bool IsWithinCombatRange(Unit const *obj, float dist2compare) const
Definition Unit.cpp:766
float GetSpellMinRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition Unit.cpp:11911
bool IsWithinMeleeRange(Unit const *obj, float dist=0.f) const
Definition Unit.cpp:782
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition Unit.cpp:11891
uint32 Flags
Definition DBCStructure.h:1797

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


The documentation for this struct was generated from the following files: