private void Place(Player player) { var firstFreeSlot = GetFirstFreeSlot(player.Role); if (firstFreeSlot != null) { firstFreeSlot.Player = player; return; } var overclaimedPlayers = GetOverclaimPlayers(player.Role); if (overclaimedPlayers.Count == 0) { player.IsImpossibleClaim = true; } else { overclaimedPlayers.Add(player); foreach (string overclaimedGroup in overclaimedPlayers.Select(p => p.Role.Group.Name).Distinct()) { foreach (var p in GetUnconfirmedPlayers(overclaimedGroup)) { p.IsOverclaimed = true; } } } if (player.Role.Group.Team == Team.Town) { RoleSlots.First(rs => rs.IsTemporary && rs.Player == null).Player = player; } }
public string GetLastWill() { return(RoleSlots .Where(rs => rs.Team == Team.Town && !(rs.IsTemporary && rs.Player == null)) .Select(rs => rs.LastWillLine) .Aggregate((i, j) => i + "\r\n" + j) + Environment.NewLine + Players.GetLastWill()); }
public Roster(RosterInfo rosterInfo) { RoleSlots = rosterInfo.RoleSlotInfos.Select(rsi => CreateRoleSlot(rsi)).ToList(); RoleSlots.Add(CreateTempRTSlot()); RoleSlots.Add(CreateTempRTSlot()); RoleSlots.Add(CreateTempRTSlot()); RoleSlots.Add(CreateTempRTSlot()); RoleSlots.Add(CreateTempRTSlot()); }
public void DoUpdate() { Players.ResetOverclaim(); RoleSlots.ResetPlayers(); var claimedPlayers = Players.Where(p => p.Role != null); claimedPlayers.Where(p => p.IsConfirmed).ToList().ForEach(Place); claimedPlayers.Where(p => !p.IsConfirmed).ToList().ForEach(Place); }
private List <Player> GetOverclaimPlayers(Role role) => RoleSlots.Where(rs => rs.Player != null && !rs.Player.IsConfirmed && rs.CanHold(role.Group.Name)).Select(rs => rs.Player).ToList();
private RoleSlot GetFirstFreeSlot(Role role) => RoleSlots.FirstOrDefault(rs => !rs.IsTemporary && rs.Player == null && rs.CanHold(role.Group.Name));