/// <summary> /// Loop round all AI teams, and select a team appropriate to play the fixture. /// </summary> public void SelectTeamIfPlaying() { FixtureAdapter fa = new FixtureAdapter(); WorldAdapter wa = new WorldAdapter(); TeamAdapter ta = new TeamAdapter(); ManagerAdapter ma = new ManagerAdapter(); List <Fixture> AllFixtures = fa.GetFixtures(wa.CurrentDate); int TESTf = 0; foreach (Fixture f in AllFixtures) { TESTf++; Debug.Print("Fixture " + f.ToString()); for (int t = 0; t <= 1; t++) { Team ThisTeam = ta.GetTeam(f.TeamIDs[t]); Manager M = ma.GetManager(ThisTeam.ManagerID); if (!M.Human) { Team Opposition = ta.GetTeam(f.TeamIDs[1 - t]); PlayerAdapter pa = new PlayerAdapter(); int[,] PlayerGridPositions = new int[5, 8]; // TODO: Maybe not hard code these... for (int x = 0; x <= PlayerGridPositions.GetUpperBound(0); x++) { for (int y = 0; y <= PlayerGridPositions.GetUpperBound(1); y++) { PlayerGridPositions[x, y] = -1; } } Formation TeamFormation = new FormationAdapter().GetFormation(ThisTeam.CurrentFormation); List <AvailablePlayer> avail = GetEligiblePlayers(ThisTeam, f); foreach (Point2 point in TeamFormation.Points) { AvailablePlayer SelPlayer = FindBestPlayerForPosition(point, avail); if (SelPlayer == null) { throw new Exception("Unable to find a player for this position"); } PlayerGridPositions[point.X, point.Y] = SelPlayer.PlayerID; avail.Remove(SelPlayer); } ta.SavePlayerFormation(ThisTeam.UniqueID, TeamFormation.UniqueID, PlayerGridPositions); } } } }
/// <summary> /// Return a list of all eligible players for this match /// </summary> /// <param name="t">Team object</param> /// <param name="f">Fixture object</param> /// <returns>List of </returns> private List <AvailablePlayer> GetEligiblePlayers(Team t, Fixture f) { List <AvailablePlayer> retVal = new List <AvailablePlayer>(); PlayerAdapter pa = new PlayerAdapter(); List <Player> players = pa.GetPlayers(t.UniqueID); foreach (Player p in players) { // TODO: When we have injuries, remember to deal with these appropriately. AvailablePlayer ap = new AvailablePlayer(); ap.PlayerID = p.UniqueID; ap.Pos = p.Position; ap.Side = p.PreferredSide; ap.Rating = p.OverallRating; retVal.Add(ap); } return(retVal); }
private AvailablePlayer FindBestPlayerForPosition(Point2 GridPos, List <AvailablePlayer> avail) { PlayerAdapter pa = new PlayerAdapter(); FormationAdapter fa = new FormationAdapter(); SuitablePlayerInfo suit = fa.SuitablePlayerPositions(GridPos); AvailablePlayer best = null; foreach (PlayerPosition pos in suit.Positions) { foreach (PlayerPositionSide side in suit.Sides) { best = (from ap in avail where ap.Side == side && ap.Pos == pos select ap).FirstOrDefault(); if (best != null) { break; } } if (best != null) { break; } } if (best == null) { best = (from ap in avail orderby ap.Rating descending select ap).FirstOrDefault(); } return(best); }