private List <Formation> SetTeamFormations(Team team)
        {
            // TODO: should be in 'create new team' stage of the app

            var formations = SquadRepository.GetTeamFormations(team.Id);

            if (formations.Count == 1 && formations.First().Name.Contains("Default") && !formations.First().TeamId.HasValue)
            {
                var formation = formations.First();
                formation.TeamId      = team.Id;
                formation.Name        = "4-4-2";
                formation.Player_1Id  = team.Squad.ElementAt(0) != null ? (int?)team.Squad.ElementAt(0).Id : null;
                formation.Player_2Id  = team.Squad.ElementAt(1) != null ? (int?)team.Squad.ElementAt(1).Id : null;
                formation.Player_3Id  = team.Squad.ElementAt(2) != null ? (int?)team.Squad.ElementAt(2).Id : null;
                formation.Player_4Id  = team.Squad.ElementAt(3) != null ? (int?)team.Squad.ElementAt(3).Id : null;
                formation.Player_5Id  = team.Squad.ElementAt(4) != null ? (int?)team.Squad.ElementAt(4).Id : null;
                formation.Player_6Id  = team.Squad.ElementAt(5) != null ? (int?)team.Squad.ElementAt(5).Id : null;
                formation.Player_7Id  = team.Squad.ElementAt(6) != null ? (int?)team.Squad.ElementAt(6).Id : null;
                formation.Player_8Id  = team.Squad.ElementAt(7) != null ? (int?)team.Squad.ElementAt(7).Id : null;
                formation.Player_9Id  = team.Squad.ElementAt(8) != null ? (int?)team.Squad.ElementAt(8).Id : null;
                formation.Player_10Id = team.Squad.ElementAt(9) != null ? (int?)team.Squad.ElementAt(9).Id : null;
                formation.Player_11Id = team.Squad.ElementAt(10) != null ? (int?)team.Squad.ElementAt(10).Id : null;

                formation.Id = SquadRepository.AddFormation(formation);
            }

            return(formations);
        }
Example #2
0
        private void SaveManager()
        {
            Manager manager = null;

            if (!Managers.Exists(m => m.Id == ManagerViewModel.Id))
            {
                try
                {
                    manager = new Manager()
                    {
                        Name        = ManagerViewModel.Name,
                        Nationality = new Nation()
                        {
                            Name = ManagerViewModel.Nationality.Name
                        },
                        Age = ManagerViewModel.Age.Value,
                    };
                    App.Managers.Add(manager);

                    manager.Id = SquadRepository.AddManager(manager);
                }
                catch (Exception e)
                {
                    // TODO: validations
                }
            }

            manager = App.Managers.Find(m => m.Id == ManagerViewModel.Id);
            Browser.Browse(new TeamDetailsArgs(BrowseArgsType.TeamDetailsArgs, manager));
        }
        public void Changed(ChangeArgs args)
        {
            if (args.Type != ChangeType.PlayerChanged)
            {
                return;
            }

            switch (args.Type)
            {
            case ChangeType.PlayerChanged:
                var changedPlayerArgs = (SoccerPlayerArgs)args;
                var player            = changedPlayerArgs.PlayerValues;
                if (changedPlayerArgs.Column == ColumnName.IsCaptain)
                {
                    player.IsCaptain = (bool)Team.Squad.Find(p => p.Id == player.Id).IsCaptain.Value;
                }

                // TODO: Correct position group value to DB
                if (changedPlayerArgs.Column == ColumnName.Position)
                {
                    player.Position.Role = (PositionRole)Team.Squad.Find(p => p.Id == player.Id).Position.Value;
                }

                SquadRepository.UpdatePlayer(player);

                break;

            default:
                break;
            }
        }
Example #4
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            _spriteBatch = new SpriteBatch(GraphicsDevice);

            GameModel = new GameModel(Content, _graphics, _spriteBatch);

            var testTexture = Content.Load <Texture2D>("Enemy");

            _units = new List <Unit>();

            var ar = new AbilityRepository();

            ar.Load();

            var ur = new UnitRepository();

            ur.Load(ar);

            var sr = new SquadRepository();

            sr.Load();

            var startPositions = new List <Point>()
            {
                new Point(1, 2),
                new Point(4, 2),
                new Point(0, 5),
                new Point(2, 3),
                new Point(3, 1),
            };

            var squad = sr.Squads.First();

            foreach (var unitId in squad.UnitIds)
            {
                var index = Random.Next(0, startPositions.Count);

                var startPoint = startPositions[index];
                startPositions.RemoveAt(index);

                var unitModel = ur.GetById(unitId);

                _units.Add(new Unit(testTexture)
                {
                    TilePosition = Map.PointToVector2(startPoint.X, startPoint.Y),
                    UnitModel    = unitModel,
                    Layer        = 0.6f,
                });
            }

            //_state = new BattleState(GameModel, _units);
            _state = new HomeState(GameModel);
            _state.LoadContent();
        }
        private void DragOrDropFieldPlayer(SoccerPlayerViewModel draggedPlayer)
        {
            if (_draggedPlayer == null)
            {
                _draggedPlayer = draggedPlayer;
            }
            else
            {
                var formation = _teamModel.Formations.Find(f => f.Id == SelectedFormation.Id);
                UpdateFormationModel(formation, _draggedPlayer.Id, true);
                SquadRepository.UpdateFormation(formation);

                _draggedPlayer = null;
            }
        }
        private void LoadTeam()
        {
            var sport = Enum.GetValues(typeof(SportType)).Cast <SportType>().First(s => s.ToString() == SelectedTeam.Sport.Name);
            var team  = App.Teams.Find(t => t.Id == SelectedTeam.Id);

            team.Squad      = SquadRepository.GetTeamSquad(team.Id);
            team.Formations = SetTeamFormations(team);

            switch (sport)
            {
            case SportType.Soccer:
                Browser.Browse(new SoccerArgs(BrowseArgsType.SoccerSquadArgs, team));
                break;
            }
        }
        private void ExecuteRemovePlayerConfirmed(bool isConfirmed)
        {
            if (isConfirmed)
            {
                Players.Remove(PlayerToRemove);
                Team.Squad.Remove(PlayerToRemove);
                var playerModel = _teamModel.Squad.Find(p => p.Id == PlayerToRemove.Id);
                _teamModel.Squad.Remove(playerModel);

                SquadRepository.DeletePlayer(_teamModel.Id, PlayerToRemove.Id);

                _changesManager.Change(new SoccerPlayerArgs(playerModel, ChangeType.PlayerDeleted));
            }

            PlayerToRemove             = null;
            PanelEnabled               = true;
            ConfirmationOverlayVisible = false;
        }
        private void AddNewPlayerToSquad()
        {
            var player = new SoccerPlayerViewModel(NewPlayer, Collections, _changesManager);

            Players.Remove(NewPlayer);
            Players.Add(player);

            ResetNewPlayerValues();
            Players.Add(NewPlayer);

            Team.Squad.Add(player);
            var playerModel = new SoccerPlayer(player);

            _teamModel.Squad.Add(playerModel);


            playerModel.Id = player.Id = SquadRepository.AddPlayer(_teamModel.Id, _teamModel.Squad.Last());

            _changesManager.Change(new SoccerPlayerArgs(playerModel, ChangeType.PlayerAdded));
        }
        private void SaveTeam()
        {
            var team = new Team()
            {
                ManagerId = Team.Manager.Id,
                Name      = Team.Name,
                NationId  = Team.Nation.Id,
                CityId    = Team.City.Id,
                SportId   = Team.Sport.Id,
            };

            team.Id = SquadRepository.AddTeam(team);
            App.Teams.Add(team);

            switch (Enum.GetValues(typeof(SportType)).Cast <SportType>().First(t => t.ToString() == Team.Sport.Name))
            {
            case SportType.Soccer:
                Browser.Browse(new SoccerArgs(BrowseArgsType.SoccerSquadArgs, team));
                break;
            }
        }
        private void SubstitutePlayers()
        {
            var firstSubX  = _firstSubstitute.X;
            var firstSubY  = _firstSubstitute.Y;
            var secondSubX = _secondSubstitute.X;
            var secondSubY = _secondSubstitute.Y;

            SubFrom?isInsideLineupSection = null;

            // VIEW MODEL
            // sub inside 'field details'
            if (SelectedFormation.Lineup.Contains(_firstSubstitute) && SelectedFormation.Lineup.Contains(_secondSubstitute))
            {
                _firstSubstitute.X  = _secondSubstitute.X;
                _firstSubstitute.Y  = _secondSubstitute.Y;
                _secondSubstitute.X = firstSubX;
                _secondSubstitute.Y = firstSubY;
            }
            // sub first sub from 'field details' to second sub in 'lineup details'
            else if (SelectedFormation.Lineup.Contains(_firstSubstitute) && !SelectedFormation.Lineup.Contains(_secondSubstitute))
            {
                SubstituteBetweenChangeables(SubFrom.FieldDetailsSection, firstSubX, firstSubY);
                SelectedFormation.Lineup.RemoveFirstNames();
            }
            // sub first sub from 'lineup details' to second sub in 'field details'
            else if (!SelectedFormation.Lineup.Contains(_firstSubstitute) && SelectedFormation.Lineup.Contains(_secondSubstitute))
            {
                SubstituteBetweenChangeables(SubFrom.LineupDetailsSection, secondSubX, secondSubY);
                SelectedFormation.Lineup.RemoveFirstNames();
            }
            // sub inside 'lineup details'
            else if (!SelectedFormation.Lineup.Contains(_firstSubstitute) && !SelectedFormation.Lineup.Contains(_secondSubstitute))
            {
                isInsideLineupSection = SubFrom.InsideLineupDetailsSection;
            }

            // MODEL
            SoccerPlayer firstSubModel     = _teamModel.Squad.FirstOrDefault(p => p.Id == _firstSubstitute.Id);
            SoccerPlayer secondSubModel    = _teamModel.Squad.FirstOrDefault(p => p.Id == _secondSubstitute.Id);
            var          originalFirstSub  = firstSubModel.RefferenceCopy();
            var          originalSecondSub = secondSubModel.RefferenceCopy();

            if (isInsideLineupSection.HasValue && isInsideLineupSection.Value == SubFrom.InsideLineupDetailsSection)
            {
                firstSubModel.Rotation  = (RotationTeam)_secondSubstitute.RotationTeam.Value;
                secondSubModel.Rotation = (RotationTeam)_firstSubstitute.RotationTeam.Value;
            }
            else
            {
                firstSubModel.Rotation  = (RotationTeam)_firstSubstitute.RotationTeam.Value;
                secondSubModel.Rotation = (RotationTeam)_secondSubstitute.RotationTeam.Value;
            }

            var formation         = _teamModel.Formations.Find(f => f.Id == SelectedFormation.Id);
            var originalFormation = formation.RefferenceCopy();

            if (originalFormation.LineupIds.Contains(_firstSubstitute.Id))
            {
                UpdateFormationModel(formation, _firstSubstitute.Id);
            }
            if (originalFormation.LineupIds.Contains(_secondSubstitute.Id))
            {
                UpdateFormationModel(formation, _secondSubstitute.Id);
            }

            // DB
            SquadRepository.UpdatePlayer(firstSubModel);
            SquadRepository.UpdatePlayer(secondSubModel);
            if (!isInsideLineupSection.HasValue)
            {
                SquadRepository.UpdateFormation(formation);
            }

            // CHANGE
            if (firstSubModel == null || secondSubModel == null)
            {
                throw new InvalidOperationException("Models were not found from the view model id's");
            }
            var subArgs = new SubstitutionArgs(ChangeType.SubConfirmed, originalFirstSub, originalSecondSub)
            {
                firstSubX  = _firstSubstitute.X,
                firstSubY  = _firstSubstitute.Y,
                secondSubX = _secondSubstitute.X,
                secondSubY = _secondSubstitute.Y,
            };

            _changeManager.Change(subArgs);

            // RESET SUB VM => should be in VIEW MODEL update??
            _firstSubstitute.SetIsSelectedBinding(false);
            _secondSubstitute.SetIsSelectedBinding(false);
            _firstSubstitute  = null;
            _secondSubstitute = null;
        }
        private SoccerPlayerViewModel SetFormationPlayer(int?playerId, int playerX, int playerY, bool isDefaultFormation, int?playerOrder = null)
        {
            SoccerPlayerViewModel player;

            if (!isDefaultFormation)
            {
                if (!playerId.HasValue)
                {
                    return(null);
                }
                player = Team.Squad.Find(p => p.Id == playerId.Value);

                var playerModel = _teamModel.Squad.Find(p => p.Id == player.Id);
                if (playerModel.Rotation != RotationTeam.Lineup)
                {
                    playerModel.Rotation = RotationTeam.Lineup;
                    SquadRepository.UpdatePlayer(playerModel);
                }

                player.RotationTeam = new CellViewModel(RotationTeam.Lineup);
                player.X            = playerX;
                player.Y            = playerY;
                return(player);
            }
            else if (playerOrder.HasValue)
            {
                PositionRole?role = null;
                switch (playerOrder)
                {
                case 1:
                    role = PositionRole.GK;
                    break;

                case 2:
                    role = PositionRole.LB;
                    break;

                case 3:
                    role = PositionRole.CB;
                    break;

                case 4:
                    role = PositionRole.CB;
                    break;

                case 5:
                    role = PositionRole.RB;
                    break;

                case 6:
                    role = PositionRole.LW;
                    break;

                case 7:
                    role = PositionRole.CM;
                    break;

                case 8:
                    role = PositionRole.CM;
                    break;

                case 9:
                    role = PositionRole.RW;
                    break;

                case 10:
                    role = PositionRole.CAM;
                    break;

                case 11:
                    role = PositionRole.ST;
                    break;
                }
                if (role.HasValue)
                {
                    player   = Team.Squad.FirstOrDefault(p => (PositionRole)p.Position.Value == role.Value);
                    player.X = playerX;
                    player.Y = playerY;
                    return(player);
                }
                else
                {
                    throw new InvalidOperationException("playerOrder value in not between 1 and 11.");
                }
            }
            else
            {
                throw new InvalidOperationException("playerOrder parameter cannot be null when setting the default formation.");
            }
        }