Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void phaseChange(GamePhase previousPhase, GamePhase newPhase) {
- Set<GameMember> activeMembers = new HashSet<GameMember>();
- Set<GameMember> wantingDraw = new HashSet<GameMember>();
- Set<GameMember> wantingDefeat = new HashSet<GameMember>();
- Set<GameMember> wantingVictory = new HashSet<GameMember>();
- /**
- * Check if we have active members, book those that miss deadlines, check if they are ready for defeat or draw
- */
- for (GameMember member : getMembers()) {
- if (!member.eliminated) {
- if (GameMember.STATE_HAS_ORDERS.equals(member.state)) {
- activeMembers.add(member);
- if (GameMember.INTENT_DRAW.equals(member.intent)) {
- wantingDraw.add(member);
- } else if (GameMember.INTENT_DEFEAT.equals(member.intent)) {
- wantingDefeat.add(member);
- } else if (GameMember.INTENT_VICTORY.equals(member.intent)) {
- wantingVictory.add(member);
- } else {
- throw new RuntimeException("Unknown intent for " + member);
- }
- } else {
- Account.missedDeadline(member.email);
- }
- }
- }
- /**
- * Check if we need to finish
- */
- if (getWorld().getLastTurnState().isEnded()) {
- /**
- * We have an official winner according to the adjudicator
- */
- state = Game.STATE_FINISHED;
- if (getWorld().getVictoryConditions().winner != null) {
- GameMember winner = getMemberByPower(getWorld().getVictoryConditions().winner.getName());
- winner.winner = true;
- winner.save();
- }
- } else if (activeMembers.size() == 0) {
- /**
- * We have no more active members.
- */
- state = Game.STATE_FINISHED;
- new GameResult(previousPhase, "Game has no more active members. Finished.").save();
- } else if (activeMembers.size() == 1) {
- /**
- * Only one active member left.
- */
- GameMember winner = new ArrayList<GameMember>(activeMembers).get(0);
- winner.winner = true;
- winner.save();
- state = Game.STATE_FINISHED;
- new GameResult(previousPhase, winner.power + " is only member left and wins. Finished.").save();
- } else if (wantingDefeat.size() == activeMembers().size()) {
- /**
- * Everyone gave up?
- */
- state = Game.STATE_FINISHED;
- new GameResult(previousPhase, "All members gave up simultaneously. Finished.").save();
- } else if (wantingDraw.size() == activeMembers.size()) {
- /**
- * Draw
- */
- StringBuffer memberNames = new StringBuffer();
- ArrayList<GameMember> members = new ArrayList<GameMember>(wantingDraw);
- for (int i = 0; i < members.size(); i++) {
- GameMember member = members.get(i);
- member.winner = true;
- member.save;
- memberNames.append(member.power);
- if (i < members.size() - 2) {
- memberNames.append(", ");
- } else {
- memberNames.append(" and ");
- }
- }
- state = Game.STATE_FINISHED;
- new GameResult(previousPhase, "Game ended in draw between " + memberNames + ". Finished.").save();
- } else if (wantingDefeat.size() == activeMembers.size() - 1) {
- /**
- * Everyone except one gave up
- */
- GameMember winner = null;
- if (wantingDraw.size() == 1) {
- winner = new ArrayList<GameMember>(wantingDraw).get(0);
- } else if (wantingVictory.size() == 1) {
- winner = new ArrayList<GameMember>(wantingVictory).get(0);
- } else {
- throw new RuntimeException("if all but one wants defeat, how the hell can both the number of wanting draw and the number of wanting victory != 1?");
- }
- winner.winner = true;
- winner.save();
- } else if (wantingVictory.size() == 0) {
- /**
- * Nobody wants to win
- */
- state = Game.STATE_FINISHED;
- new GameResult(previousPhase, "All members gave up or wanted a draw. Finished:").save();
- }
- save();
- }
Add Comment
Please, Sign In to add comment