package Factory.GameLogic.TransportTypes; import EnvironmentPluginAPI.Service.ICycleReplay; import EnvironmentPluginAPI.TransportTypes.TMapMetaData; import java.util.*; import java.util.function.Consumer; /** * Created with IntelliJ IDEA. * User: N3trunner * Date: 08.05.12 * Time: 14:15 * To change this template use File | Settings | File Templates. */ public class TGameReplay implements ICycleReplay<TGameState, TMapMetaData> { // ------------------------------ FIELDS ------------------------------ private UUID replayId; @Override public UUID getReplayId() { return replayId; } @Override public TMapMetaData getConfiguration() { return null; } private Date replayDate; @Override public Date getReplayDate() { return replayDate; } private List<String> players; @Override public List<String> getAgentSystems() { return players; } private String winningPlayer; @Override public String getAgentSystemsWithGoalReached() { return winningPlayer; } private int numberOfTurns; @Override public int getNumberOfTurns() { return numberOfTurns; } private List<TGameState> gameStates; public List<TGameState> getEnvironmentStatesPerTurn() { return gameStates; } // --------------------------- CONSTRUCTORS --------------------------- public TGameReplay(UUID replayId, Date replayDate, List<String> players, String winningPlayer, int numberOfTurns) { this.replayId = replayId; this.replayDate = replayDate; this.players = players; this.winningPlayer = winningPlayer; this.numberOfTurns = numberOfTurns; } public TGameReplay(UUID replayId, Date replayDate, List<String> players, String winningPlayer, int numberOfTurns, List<TGameState> gameStates) { this.replayId = replayId; this.replayDate = replayDate; this.players = players; this.winningPlayer = winningPlayer; this.numberOfTurns = numberOfTurns; this.gameStates = gameStates; } // ------------------------ CANONICAL METHODS ------------------------ @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof ICycleReplay)) return false; TGameReplay replay = (TGameReplay) o; if (replayId != null ? !replayId.equals(replay.replayId) : replay.replayDate != null) return false; if (numberOfTurns != replay.numberOfTurns) return false; if (gameStates != null ? !gameStates.equals(replay.gameStates) : replay.gameStates != null) return false; if (players != null ? !players.equals(replay.players) : replay.players != null) return false; if (replayDate != null ? !replayDate.equals(replay.replayDate) : replay.replayDate != null) return false; if (winningPlayer != null ? !winningPlayer.equals(replay.winningPlayer) : replay.winningPlayer != null) return false; return true; } @Override public int hashCode() { int result = replayDate != null ? replayDate.hashCode() : 0; result = 31 * result + (players != null ? players.hashCode() : 0); result = 31 * result + (winningPlayer != null ? winningPlayer.hashCode() : 0); result = 31 * result + numberOfTurns; result = 31 * result + (gameStates != null ? gameStates.hashCode() : 0); return result; } @Override public Iterator<TGameState> iterator() { return gameStates.iterator(); } @Override public void forEach(Consumer<? super TGameState> action) { gameStates.forEach(tGameState -> { action.accept(tGameState); }); } @Override public Spliterator<TGameState> spliterator() { return gameStates.spliterator(); } }