diff options
author | Trazom62 <none@none> | 2010-04-25 12:59:27 +0200 |
---|---|---|
committer | Trazom62 <none@none> | 2010-04-25 12:59:27 +0200 |
commit | eccf5bf547c9b1648a453695189877c212071c70 (patch) | |
tree | 547c424a86c42bfd61944bc2d12d97f4146cec04 /src/game/GridNotifiers.h | |
parent | b466819333eb551a64cdb02e9d8d25678fbb770e (diff) |
Refactor Creature::SelectNearestTarget(float dist)
This function is used in many scripts to find the nearest enemy within the given distance.
However, it had an implicit limit to the ATTACK_DISTANCE. so in many case the "dist" was in fact just ignored.
In other case, the ATTACK_DISTANCE is required. So 2 functions are necessary to avoid ambiguities.
The refactoring is the split of the function in 2: SelectNearestTarget and SelectNearestTargetInAttackDistance.
--HG--
branch : trunk
Diffstat (limited to 'src/game/GridNotifiers.h')
-rw-r--r-- | src/game/GridNotifiers.h | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index 7b860af1d1e..b0abf0aae79 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -940,6 +940,31 @@ namespace Trinity // Creature checks + class NearestHostileUnitCheck + { + public: + explicit NearestHostileUnitCheck(Creature const* creature, float dist = 0) : me(creature) + { + m_range = (dist == 0 ? 9999 : dist); + } + bool operator()(Unit* u) + { + if (!me->IsWithinDistInMap(u, m_range)) + return false; + + if (!me->canAttack(u)) + return false; + + m_range = me->GetDistance(u); // use found unit range as new range limit for next check + return true; + } + + private: + Creature const *me; + float m_range; + NearestHostileUnitCheck(NearestHostileUnitCheck const&); + }; + class NearestHostileUnitInAttackDistanceCheck { public: @@ -950,7 +975,6 @@ namespace Trinity } bool operator()(Unit* u) { - // TODO: addthreat for every enemy in range? if (!me->IsWithinDistInMap(u, m_range)) return false; @@ -965,7 +989,7 @@ namespace Trinity return false; } - m_range = me->GetDistance(u); + m_range = me->GetDistance(u); // use found unit range as new range limit for next check return true; } float GetLastRange() const { return m_range; } |