diff options
Diffstat (limited to 'src/game/Unit.cpp')
-rw-r--r-- | src/game/Unit.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp index 2f0e5a1fe43..aa1fb0a5a5d 100644 --- a/src/game/Unit.cpp +++ b/src/game/Unit.cpp @@ -420,13 +420,22 @@ void Unit::resetAttackTimer(WeaponAttackType type) m_attackTimer[type] = uint32(GetAttackTime(type) * m_modAttackSpeedPct[type]); } -bool Unit::canReachWithAttack(Unit *pVictim) const +bool Unit::IsWithinCombatRange(Unit *obj, float dist2compare) const { - assert(pVictim); - return IsWithinDistInMap(pVictim, GetCombatReach()); + if (!obj || !IsInMap(obj)) return false; + + float dx = GetPositionX() - obj->GetPositionX(); + float dy = GetPositionY() - obj->GetPositionY(); + float dz = GetPositionZ() - obj->GetPositionZ(); + float distsq = dx*dx + dy*dy + dz*dz; + + float sizefactor = GetCombatReach() + obj->GetCombatReach(); + float maxdist = dist2compare + sizefactor; + + return distsq < maxdist * maxdist; } -bool Unit::IsWithinCombatDist(Unit *obj, float dist2compare) const +bool Unit::IsWithinMeleeRange(Unit *obj) const { if (!obj || !IsInMap(obj)) return false; @@ -434,9 +443,9 @@ bool Unit::IsWithinCombatDist(Unit *obj, float dist2compare) const float dy = GetPositionY() - obj->GetPositionY(); float dz = GetPositionZ() - obj->GetPositionZ(); float distsq = dx*dx + dy*dy + dz*dz; - //not sure here, or combatreach + combatreach? - float sizefactor = GetCombatReach() + obj->GetCombatReach(); - float maxdist = dist2compare + sizefactor; + + float sizefactor = GetMeleeReach() + obj->GetMeleeReach(); + float maxdist = MELEE_RANGE + sizefactor; return distsq < maxdist * maxdist; } |