public static IPosition CalculatePullPosition(this IPosition actor, IPosition target, float distance) { if (actor.IsEqualPosition(target)) { return(actor); } const float desiredDistanceAfterPull = 1; var distanceBetween = actor.GetDistanceAbs(target); var pullDistance = Math.Min(distanceBetween - desiredDistanceAfterPull, distance); return(target.GetDirection(actor, pullDistance).GetPosition()); }