@SuppressWarnings("WeakerAccess") protected IMPL changeStateAndReevaluate(final GamePhase transitionTo, final IMPL game) { game.setGamePhase(transitionTo); return evaluateGame(game); } }
@Override protected IMPL evaluateChallengedPhase(final IMPL game) { Optional rejected = game.getPlayerStates().values() .stream() .filter(PlayerState.Rejected::equals) .findAny(); if (rejected.isPresent()) { return changeStateAndReevaluate(GamePhase.Declined, game); } else { Optional pending = game.getPlayerStates().values() .stream() .filter(PlayerState.Pending::equals) .findAny(); if (!pending.isPresent()) { return changeStateAndReevaluate(GamePhase.Setup, game); } } return game; }
@Override protected IMPL evaluateRoundOverPhase(final IMPL game) { if (game.getRematchTimestamp() != null) { return changeStateAndReevaluate(GamePhase.NextRoundStarted, game); } return super.evaluateRoundOverPhase(game); }