fix(Core/Movement) Smoother movement of hunter pets when following players (#16796)

* Pets follow the player at the player's speed

* More accurate distance measurement
This commit is contained in:
wenzuowei
2023-08-06 09:19:23 +08:00
committed by GitHub
parent 23a420acbb
commit ee154036bd
@@ -303,29 +303,15 @@ static Optional<float> GetVelocity(Unit* owner, Unit* target, G3D::Vector3 const
} }
UnitMoveType moveType = Movement::SelectSpeedType(moveFlags); UnitMoveType moveType = Movement::SelectSpeedType(moveFlags);
speed = std::max(target->GetSpeed(moveType), owner->GetSpeed(moveType)); speed = target->GetSpeed(moveType);
if (playerPet) if (playerPet)
{ {
float distance = owner->GetDistance2d(dest.x, dest.y) - (*speed / 2.f); float distance = owner->GetDistance2d(dest.x, dest.y) - target->GetObjectSize() - (*speed / 2.f);
if (distance > 0.f) if (distance > 0.f)
{ {
float multiplier = 1.f + (distance / 10.f); float multiplier = 1.f + (distance / 10.f);
*speed *= multiplier; *speed *= multiplier;
} }
else
{
switch (moveType)
{
case MOVE_RUN_BACK:
case MOVE_SWIM_BACK:
case MOVE_FLIGHT_BACK:
break;
default:
*speed *= 0.9f;
break;
}
}
} }
} }