aboutsummaryrefslogtreecommitdiff
path: root/src/game/GridNotifiers.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/GridNotifiers.h')
-rw-r--r--src/game/GridNotifiers.h28
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; }