package games.strategy.engine.data; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class PlayerList extends GameDataComponent implements Iterable<PlayerID> { private static final long serialVersionUID = -3895068111754745446L; // maps String playerName -> PlayerID private final Map<String, PlayerID> m_players = new LinkedHashMap<>(); /** * Creates new PlayerList. * * @param data * game data */ public PlayerList(final GameData data) { super(data); } protected void addPlayerID(final PlayerID player) { m_players.put(player.getName(), player); } public int size() { return m_players.size(); } public PlayerID getPlayerID(final String name) { if (PlayerID.NULL_PLAYERID.getName().equals(name)) { return PlayerID.NULL_PLAYERID; } return m_players.get(name); } public String[] getNames() { final String[] values = new String[size()]; m_players.keySet().toArray(values); return values; } /** * @return a new arraylist copy of the players. */ public List<PlayerID> getPlayers() { return new ArrayList<>(m_players.values()); } /** * an iterator of a new arraylist copy of the players. */ @Override public Iterator<PlayerID> iterator() { return getPlayers().iterator(); } public Collection<String> getPlayersThatMayBeDisabled() { final Collection<String> disableable = new HashSet<>(); for (final PlayerID p : m_players.values()) { // already disabled players cannot be reenabled if (p.getCanBeDisabled() && !p.getIsDisabled()) { disableable.add(p.getName()); } } return disableable; } public HashMap<String, Boolean> getPlayersEnabledListing() { final HashMap<String, Boolean> playersEnabledListing = new HashMap<>(); for (final PlayerID p : m_players.values()) { playersEnabledListing.put(p.getName(), !p.getIsDisabled()); } return playersEnabledListing; } }