private IEnumerator WaitingMovementRoutine() { //Random small movement while (_state == DroneState.SEARCHING_ENEMY) { var point = _startPosition + MRandom.OnUnitCircle() * width * 0.5f; var distance = point - _pos; float distanceMag = distance.Magnitude; while (distanceMag > 20) { var distanceNorm = distance.Normalized; _currentSpeed = (_state == DroneState.SEARCHING_ENEMY) ? _waitingSpeed : _maxSpeed; var nextPos = distanceNorm * _currentSpeed; //Console.WriteLine($"{this}: {x:0.00} | {y:0.00} | dist: {distanceMag:0.00} | startpos: {_startPosition} | point: {point} | speed: {speed} | nextPos: {nextPos}"); Translate(nextPos.x * Time.delta, nextPos.y * Time.delta); yield return(null); distance = point - _pos; distanceMag = distance.Magnitude; } } }