package games.strategy.engine.random; import java.util.HashMap; import java.util.Map; import games.strategy.engine.data.PlayerID; import games.strategy.engine.message.IRemoteMessenger; import games.strategy.util.IntegerMap; public class RandomStats implements IRandomStats { private final IRemoteMessenger m_remoteMessenger; private final Map<PlayerID, IntegerMap<Integer>> m_randomStats = new HashMap<>(); public RandomStats(final IRemoteMessenger remoteMessenger) { m_remoteMessenger = remoteMessenger; remoteMessenger.registerRemote(this, RANDOM_STATS_REMOTE_NAME); } public void shutDown() { m_remoteMessenger.unregisterRemote(RANDOM_STATS_REMOTE_NAME); } public synchronized void addRandom(final int[] random, final PlayerID player, final DiceType diceType) { IntegerMap<Integer> map = m_randomStats.get(player); if (map == null) { map = new IntegerMap<>(); } for (final int element : random) { map.add(Integer.valueOf(element + 1), 1); } // for now, only record if it is combat, otherwise if not combat, throw it in the null pile m_randomStats.put((diceType == DiceType.COMBAT ? player : null), map); } public synchronized void addRandom(final int random, final PlayerID player, final DiceType diceType) { IntegerMap<Integer> map = m_randomStats.get(player); if (map == null) { map = new IntegerMap<>(); } map.add(Integer.valueOf(random + 1), 1); m_randomStats.put((diceType == DiceType.COMBAT ? player : null), map); } @Override public synchronized RandomStatsDetails getRandomStats(final int diceSides) { return new RandomStatsDetails(m_randomStats, diceSides); } }