public Entity.Vector GetCurrentPosition(IGameObject owner) { if (!currentVelocity.IsZero()) { var now = GlobalClock.Now; if (now != lastPositionUpdateTime) { var elapsed = now - lastPositionUpdateTime; var nextPosition = currentPosition.Add(currentVelocity.Multiply(elapsed)); var currentToTarget = targetPosition.Diff(currentPosition); var nextToTarget = targetPosition.Diff(nextPosition); if (currentToTarget.Dot(nextToTarget) < 0) { currentPosition = targetPosition; Stop(owner); } else { currentPosition = nextPosition; } } lastPositionUpdateTime = now; } return(currentPosition); }