From 4103bb83cb0eb4f87422a39c80e7fad537182370 Mon Sep 17 00:00:00 2001 From: jbion Date: Wed, 21 Dec 2016 15:10:14 +0100 Subject: Make wonder level increase in 2 steps This is required, like for the cards, in order to check the requirements before applying any money transaction, and also apply the effects to all new elements on the table. --- src/main/java/org/luxons/sevenwonders/game/Game.java | 6 +++--- src/main/java/org/luxons/sevenwonders/game/api/Table.java | 13 +++++++++---- .../java/org/luxons/sevenwonders/game/boards/Board.java | 11 +++++++++-- 3 files changed, 21 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/java/org/luxons/sevenwonders/game/Game.java b/src/main/java/org/luxons/sevenwonders/game/Game.java index 53b8bc53..d9dec5fd 100644 --- a/src/main/java/org/luxons/sevenwonders/game/Game.java +++ b/src/main/java/org/luxons/sevenwonders/game/Game.java @@ -108,7 +108,7 @@ public class Game { table.placeCard(playerIndex, decks.getCard(move.getCardName())); break; case UPGRADE_WONDER: - // TODO pre-upgrade the level of wonder without effect + table.upgradeWonderStage(playerIndex); break; case DISCARD: discardedCards.add(decks.getCard(move.getCardName())); @@ -121,10 +121,10 @@ public class Game { preparedMoves.forEach((playerIndex, move) -> { switch (move.getType()) { case PLAY: - table.playCard(playerIndex, decks.getCard(move.getCardName())); + table.activateCard(playerIndex, decks.getCard(move.getCardName())); break; case UPGRADE_WONDER: - table.upgradeWonder(playerIndex); + table.activateCurrentWonderStage(playerIndex); break; case DISCARD: table.discard(playerIndex, settings.getDiscardedCardGold()); diff --git a/src/main/java/org/luxons/sevenwonders/game/api/Table.java b/src/main/java/org/luxons/sevenwonders/game/api/Table.java index 7a2e20dc..44813ee9 100644 --- a/src/main/java/org/luxons/sevenwonders/game/api/Table.java +++ b/src/main/java/org/luxons/sevenwonders/game/api/Table.java @@ -47,18 +47,23 @@ public class Table { board.addCard(card); } - public void upgradeWonder(int playerIndex) { + public void upgradeWonderStage(int playerIndex) { + Board board = boards.get(playerIndex); + board.increaseWonderLevel(); + } + + public void activateCard(int playerIndex, Card card) { Board board = boards.get(playerIndex); Board left = boards.get(wrapIndex(playerIndex - 1)); Board right = boards.get(wrapIndex(playerIndex + 1)); - board.upgradeWonderLevel(left, right); + card.applyTo(board, left, right); } - public void playCard(int playerIndex, Card card) { + public void activateCurrentWonderStage(int playerIndex) { Board board = boards.get(playerIndex); Board left = boards.get(wrapIndex(playerIndex - 1)); Board right = boards.get(wrapIndex(playerIndex + 1)); - card.applyTo(board, left, right); + board.activateCurrentWonderLevel(left, right); } public void discard(int playerIndex, int goldBonus) { diff --git a/src/main/java/org/luxons/sevenwonders/game/boards/Board.java b/src/main/java/org/luxons/sevenwonders/game/boards/Board.java index 08bedb89..1ac70daf 100644 --- a/src/main/java/org/luxons/sevenwonders/game/boards/Board.java +++ b/src/main/java/org/luxons/sevenwonders/game/boards/Board.java @@ -81,13 +81,20 @@ public class Board { return wonderLevel; } - public void upgradeWonderLevel(Board leftNeighbourBoard, Board rightNeighbourBoard) { + public void increaseWonderLevel() { int maxLevel = wonder.getLevels().size(); if (maxLevel == wonderLevel) { throw new IllegalStateException("This wonder has already reached its maximum level"); } this.wonderLevel++; - wonder.getLevels().get(wonderLevel).activate(this, leftNeighbourBoard, rightNeighbourBoard); + } + + public void activateCurrentWonderLevel(Board leftNeighbourBoard, Board rightNeighbourBoard) { + activateWonderLevel(wonderLevel, leftNeighbourBoard, rightNeighbourBoard); + } + + public void activateWonderLevel(int level, Board leftNeighbourBoard, Board rightNeighbourBoard) { + wonder.getLevels().get(level).activate(this, leftNeighbourBoard, rightNeighbourBoard); } public int getNbWarSymbols() { -- cgit