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 
)
474 :
475 _caster(caster), _spellInfo(sSpellMgr->GetSpellForDifficultyFromSpell(sSpellMgr->GetSpellInfo(spellId), caster))
476{
478}
#define ASSERT
Definition Errors.h:68
#define sSpellMgr
Definition SpellMgr.h:836
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
481{
482 if (!target)
483 return false;
484
486 return false;
487
488 // copypasta from Spell::CheckRange
490 float max_range = _caster->GetSpellMaxRangeForTarget(target, _spellInfo);
491 float min_range = _caster->GetSpellMinRangeForTarget(target, _spellInfo);
492
493 if (target && target != _caster)
494 {
495 if (range_type == SPELL_RANGE_MELEE)
496 {
497 // Because of lag, we can not check too strictly here.
498 if (!_caster->IsWithinMeleeRange(target, max_range))
499 return false;
500 }
501 else if (!_caster->IsWithinCombatRange(target, max_range))
502 return false;
503
504 if (range_type == SPELL_RANGE_RANGED)
505 {
506 if (_caster->IsWithinMeleeRange(target))
507 return false;
508 }
509 else if (min_range && _caster->IsWithinCombatRange(target, min_range)) // skip this check if min_range = 0
510 return false;
511 }
512
513 return true;
514}
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:11874
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:11854
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: