private void NextWaypoint() { bool moreWaypointsAvailable = _waypoints.Move(_movingBackward); if (moreWaypointsAvailable) { return; } switch (onLastWaypoint) { case EndBehaviour.Reverse: _movingBackward = !_movingBackward; break; case EndBehaviour.JumpBack: _waypoints.Reset(); transform.position = _waypoints.Current; break; case EndBehaviour.ReturnToStart: _waypoints.Reset(); break; case EndBehaviour.Destroy: Destroy(gameObject); break; default: throw new ArgumentOutOfRangeException(); } }