public GamePlayViewModel(GamePlay gamePlay)
 {
     GamePlay = gamePlay;
     TeamRotation[] currentRotation = gamePlay.Sets[gamePlay.CurrentSetNumber].TeamRotations;
     int[] teamARotation = currentRotation[0].ShirtNumbers;
     int[] teamBRotation = currentRotation[1].ShirtNumbers;
     RotationForView = new TeamRotation[2]
     {
         new TeamRotation()
         {
             ShirtNumbers = new int[6]
             {
                 teamARotation[4],
                 teamARotation[5],
                 teamARotation[0],
                 teamARotation[3],
                 teamARotation[2],
                 teamARotation[1]
             }
         } ,
         new TeamRotation()
         {
             ShirtNumbers = new int[6]
             {
                 teamBRotation[1],
                 teamBRotation[2],
                 teamBRotation[3],
                 teamBRotation[0],
                 teamBRotation[5],
                 teamBRotation[4]
             }
         }
     };
 }
 //!! remove all refrences to use input data
 public static TeamRotation[] GetRandomTeamRotationModels()
 {
     var teamRotations = new TeamRotation[2];
     teamRotations[0] = new TeamRotation() { ShirtNumbers = GetRandomShirtNumbers(true) };
     teamRotations[1] = new TeamRotation() { ShirtNumbers = GetRandomShirtNumbers(false) };
     return teamRotations;
 }
        private TeamRotation Rotate(TeamRotation model)
        {
            if (model == null || model.ShirtNumbers == null || model.ShirtNumbers.Length != 6)
                throw new ArgumentException("Invalid team rotation model");

            TeamRotation rotatedModel = new TeamRotation();
            rotatedModel.ShirtNumbers = new int[6];
            rotatedModel.ShirtNumbers[0] = model.ShirtNumbers[1];
            rotatedModel.ShirtNumbers[1] = model.ShirtNumbers[2];
            rotatedModel.ShirtNumbers[2] = model.ShirtNumbers[3];
            rotatedModel.ShirtNumbers[3] = model.ShirtNumbers[4];
            rotatedModel.ShirtNumbers[4] = model.ShirtNumbers[5];
            rotatedModel.ShirtNumbers[5] = model.ShirtNumbers[0];
            return rotatedModel;
        }
 public Game StartGame(int bestOfNumberOfSets, TeamRotation[] teamRotations, int firstServe)
 {
     if (bestOfNumberOfSets % 2 == 0)
         throw new ArgumentException("Best of number of sets must be odd", "bestOfNumberOfSets");
     Guid gameId = Guid.NewGuid();
     var game = new Game
     {
         UniqueId = gameId,
         GamePlay = new GamePlay
         {
             GameId = gameId,
             Sets = new Set[bestOfNumberOfSets],
             SetWins = new int[2]
         },
         StartedAt = DateTime.Now
     };
     game.GamePlay = StartNewSet(game.GamePlay, teamRotations, firstServe);
     Save(game);
     return game;
 }
 public GamePlay StartNewSet(GamePlay game, TeamRotation[] teamRotations, int firstServe)
 {
     var highestActivatedSetNumber = game.GetHighestActivatedSetNumber();
     game.Sets[highestActivatedSetNumber + 1] = new Set
     {
         TeamRotations = teamRotations,
         Score = new int[2],
         FirstServer = firstServe,
         StartedAt = DateTime.Now,
         Information = new TeamInSetInformation[2]
                                                         {
                                                             new TeamInSetInformation() {  Substitutions = new Substitution[Constants.MaximumNumberOfSubstitutionsPerTeamPerSet], TimeOuts = new TimeOut[Constants.MaximumNumberOfTimeOutsPerTeamPerSet] },
                                                             new TeamInSetInformation() { Substitutions = new Substitution[Constants.MaximumNumberOfSubstitutionsPerTeamPerSet], TimeOuts = new TimeOut[Constants.MaximumNumberOfTimeOutsPerTeamPerSet] }
                                                         },
     };
     return game;
 }