internal void Move(TrainPosition position) { switch (this.Direction) { case TrackDirection.Horizontal: TrainMovement.MoveHorizontal(position); break; case TrackDirection.Vertical: TrainMovement.MoveVertical(position); break; case TrackDirection.LeftUp: TrainMovement.MoveLeftUp(position); break; case TrackDirection.RightUp: TrainMovement.MoveRightUp(position); break; case TrackDirection.RightDown: TrainMovement.MoveRightDown(position); break; case TrackDirection.LeftDown: TrainMovement.MoveLeftDown(position); break; case TrackDirection.RightUp_RightDown: MoveRightUpDown(position); break; case TrackDirection.RightDown_LeftDown: MoveLeftRightDown(position); break; case TrackDirection.LeftDown_LeftUp: MoveLeftUpDown(position); break; case TrackDirection.LeftUp_RightUp: MoveLeftRightUp(position); break; case TrackDirection.Cross: MoveCross(position); break; default: throw new InvalidOperationException("I don't know what that track is!"); } }
private static void MoveCross(TrainPosition position) { if ((position.Angle > 45.0f && position.Angle < 135.0f) || (position.Angle > 225.0f && position.Angle < 315.0f)) { TrainMovement.MoveVertical(position); } else { TrainMovement.MoveHorizontal(position); } }