aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorChaouki Dhib <chaodhib@gmail.com>2016-08-15 18:17:07 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-12 15:32:29 +0100
commit66d36839f092bb1016391a93b6b03733d1cd42bb (patch)
treecc5041929963090c5114e163fb9805c173486c93 /src/server/game/Entities/Unit
parent2560066b847dc2131ecda459227229b25fbc52a1 (diff)
Core/Units: Fixed melee range check (#17693)
* Split Spell::CheckRange() into 2 methods since that method had more than one responsibility. * Moved melee range logic into its own function * Moved melee range logic method GetMeleeRange from Spell to Unit class. Unit::IsWithinMeleeRange() and Spell::GetMinMaxRange() both use that method. (cherry picked from commit d7600f1126d2780fecdfcdfc66a598a48cee0136) # Conflicts: # src/server/game/Entities/Unit/Unit.cpp # src/server/game/Entities/Unit/Unit.h # src/server/game/Spells/Spell.cpp
Diffstat (limited to 'src/server/game/Entities/Unit')
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp8
-rw-r--r--src/server/game/Entities/Unit/Unit.h1
2 files changed, 8 insertions, 1 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index b0c89960fa8..abee8b5a8e1 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -511,11 +511,17 @@ bool Unit::IsWithinMeleeRange(Unit const* obj) const
float dz = GetPositionZMinusOffset() - obj->GetPositionZMinusOffset();
float distsq = dx*dx + dy*dy + dz*dz;
- float maxdist = GetCombatReach() + obj->GetCombatReach() + 4.0f / 3.0f;
+ float maxdist = GetMeleeRange(obj);
return distsq <= maxdist * maxdist;
}
+float Unit::GetMeleeRange(Unit const* target) const
+{
+ float range = GetCombatReach() + target->GetCombatReach() + 4.0f / 3.0f;
+ return std::max(range, NOMINAL_MELEE_RANGE);
+}
+
bool Unit::IsWithinBoundaryRadius(const Unit* obj) const
{
if (!obj || !IsInMap(obj) || !IsInPhase(obj))
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 2ffb78a4fc8..0f379a7326a 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1386,6 +1386,7 @@ class TC_GAME_API Unit : public WorldObject
float GetBoundaryRadius() const { return m_floatValues[UNIT_FIELD_BOUNDINGRADIUS]; }
bool IsWithinCombatRange(const Unit* obj, float dist2compare) const;
bool IsWithinMeleeRange(Unit const* obj) const;
+ float GetMeleeRange(Unit const* target) const;
bool IsWithinBoundaryRadius(const Unit* obj) const;
void GetRandomContactPoint(const Unit* target, float &x, float &y, float &z, float distance2dMin, float distance2dMax) const;
uint32 m_extraAttacks;