From 416b0edd51665c3d1e330c76dde8884d3670fca7 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Fri, 24 Apr 2020 23:44:22 +0200 Subject: [PATCH] Core/Movement: * chase movement will now use simple near point calculations for chase movement without pathfinding enabled * units with a big boundary radius will no longer reposition themselves --- .../MovementGenerators/ChaseMovementGenerator .cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator .cpp b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator .cpp index adb472f4de6..c6ddefde56f 100644 --- a/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator .cpp +++ b/src/server/game/Movement/MovementGenerators/ChaseMovementGenerator .cpp @@ -144,7 +144,7 @@ bool ChaseMovementGenerator::Update(Unit* owner, uint32 diff) if (!owner->HasUnitState(UNIT_STATE_CHASE_MOVE) && owner->IsCreature() && !target->isMoving()) { // Owner is too close to its target. Step back. - if (owner->GetExactDist2d(target) < owner->GetBoundaryRadius()) + if (owner->GetBoundaryRadius() <= 5.f && owner->GetExactDist2d(target) < owner->GetBoundaryRadius()) { LaunchMovement(owner, target, chaseRange, true, mutualChase); return true; @@ -209,10 +209,14 @@ void ChaseMovementGenerator::LaunchMovement(Unit* owner, Unit* target, float cha float additionalRange = target->GetSpeed(moveType) * 0.5f; if (!owner->HasUnitState(UNIT_STATE_IGNORE_PATHFINDING)) - target->MovePositionToFirstCollision(dest, additionalRange, _angle ? target->NormalizeOrientation(target->GetOrientation() - _angle->RelativeAngle + float(M_PI)) : target->GetRelativeAngle(owner) + float(M_PI)); + target->MovePositionToFirstCollision(dest, additionalRange, _angle ? Position::NormalizeOrientation(target->GetOrientation() - _angle->RelativeAngle + float(M_PI)) : target->GetRelativeAngle(owner) + float(M_PI)); + else + target->GetNearPoint(owner, dest.m_positionX, dest.m_positionY, dest.m_positionZ, additionalRange - target->GetCombatReach() - owner->GetCombatReach(), Position::NormalizeOrientation(target->GetOrientation() + float(M_PI) + (_angle ? _angle->RelativeAngle : 0.f))); } else if (!owner->HasUnitState(UNIT_STATE_IGNORE_PATHFINDING)) target->MovePositionToFirstCollision(dest, chaseRange, _angle ? target->NormalizeOrientation(target->GetOrientation() - _angle->RelativeAngle) : target->GetRelativeAngle(owner)); + else + target->GetNearPoint(owner, dest.m_positionX, dest.m_positionY, dest.m_positionZ, chaseRange - target->GetCombatReach() - owner->GetCombatReach(), Position::NormalizeOrientation(target->GetOrientation() + (_angle ? _angle->RelativeAngle : 0.f))); owner->UpdateAllowedPositionZ(dest.GetPositionX(), dest.GetPositionY(), dest.m_positionZ);