private List<Player<ID>> rotatePlayers(final IMPL previousGame) { List<Player<ID>> players = new ArrayList<>(); players.addAll(previousGame.getPlayers()); players.add(players.remove(0)); return players; }
@Override public void initializeGame(final AbstractGame game) { if (game instanceof AbstractMultiPlayerGame) { //noinspection unchecked final AbstractMultiPlayerGame<ID, FEATURES> multiPlayerGame = (AbstractMultiPlayerGame<ID, FEATURES>) game; final Map<ID, PlayerState> playerStates = multiPlayerGame.getPlayerStates(); List<Player<ID>> players = multiPlayerGame.getPlayers(); players.forEach(p -> playerStates.put(p.getId(), PlayerState.Pending)); playerStates.put(multiPlayerGame.getInitiatingPlayer(), PlayerState.Accepted); } }
private IMPL createFreshGame( final Set<FEATURES> features, final List<Player<ID>> players, final Player<ID> initiatingPlayer) { IMPL game = newGame(); game.setRound(1); game.setGamePhase(GamePhase.Challenged); game.setVersion(null); game.getFeatures().addAll(features); game.setInitiatingPlayer(initiatingPlayer.getId()); game.getPlayers().addAll(players); if (!game.getPlayers().contains(initiatingPlayer)) { game.getPlayers().add(initiatingPlayer); } return game; }
@Override public boolean validateGame(final IMPL game) { if (game instanceof AbstractMultiPlayerGame) { //noinspection unchecked AbstractMultiPlayerGame<ID, FEATURES> multiPlayerGame = (AbstractMultiPlayerGame<ID, FEATURES>) game; List<Player<ID>> players = multiPlayerGame.getPlayers(); List<ID> ids = players.stream().map(Player::getId).collect(Collectors.toList()); Iterable<? extends AbstractPlayer<ID>> loaded = playerRepository.findAllById(ids); long active = StreamSupport.stream(loaded.spliterator(), false) .filter(x -> !x.isDisabled()) .count(); return active == players.size(); } else if (game instanceof AbstractSinglePlayerGame) { //noinspection unchecked AbstractSinglePlayerGame<ID, FEATURES> singPlayerGame = (AbstractSinglePlayerGame<ID, FEATURES>) game; Optional<? extends AbstractPlayer<ID>> loaded = playerRepository .findById(singPlayerGame.getPlayer().getId()); return loaded.isPresent() && !loaded.get().isDisabled(); } throw new IllegalArgumentException("unsupported type"); }