summaryrefslogtreecommitdiff
path: root/backend/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'backend/src/main/java/org')
-rw-r--r--backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java35
1 files changed, 27 insertions, 8 deletions
diff --git a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
index f6d7934c..942b64b7 100644
--- a/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
+++ b/backend/src/main/java/org/luxons/sevenwonders/game/cards/Requirements.java
@@ -31,15 +31,15 @@ public class Requirements {
}
boolean isAffordedBy(Board board) {
- return board.getGold() >= gold && board.getProduction().contains(resources);
+ return hasRequiredGold(board) && producesRequiredResources(board);
}
- public boolean couldBeAffordedBy(Table table, int playerIndex) {
+ boolean couldBeAffordedBy(Table table, int playerIndex) {
Board board = table.getBoard(playerIndex);
- if (board.getGold() < gold) {
+ if (!hasRequiredGold(board)) {
return false;
}
- if (board.getProduction().contains(resources)) {
+ if (producesRequiredResources(board)) {
return true;
}
Resources leftToPay = resources.minus(board.getProduction().getFixedResources());
@@ -49,19 +49,38 @@ public class Requirements {
public boolean isAffordedBy(Table table, int playerIndex, List<BoughtResources> boughtResources) {
Board board = table.getBoard(playerIndex);
- if (isAffordedBy(board)) {
+ if (!hasRequiredGold(board)) {
+ return false;
+ }
+ if (producesRequiredResources(board)) {
return true;
}
- int totalPrice = board.getTradingRules().computeCost(boughtResources);
- if (board.getGold() < totalPrice) {
+ if (!canAffordBoughtResources(board, boughtResources)) {
return false;
}
+ return producesRequiredResourcesWithHelp(board, boughtResources);
+ }
+
+ private boolean hasRequiredGold(Board board) {
+ return board.getGold() >= gold;
+ }
+
+ private boolean producesRequiredResources(Board board) {
+ return board.getProduction().contains(resources);
+ }
+
+ private boolean canAffordBoughtResources(Board board, List<BoughtResources> boughtResources) {
+ int resourcesPrice = board.getTradingRules().computeCost(boughtResources);
+ return board.getGold() - gold >= resourcesPrice;
+ }
+
+ private boolean producesRequiredResourcesWithHelp(Board board, List<BoughtResources> boughtResources) {
Resources totalBoughtResources = getTotalResources(boughtResources);
Resources remainingResources = this.resources.minus(totalBoughtResources);
return board.getProduction().contains(remainingResources);
}
- private Resources getTotalResources(List<BoughtResources> boughtResources) {
+ private static Resources getTotalResources(List<BoughtResources> boughtResources) {
return boughtResources.stream().map(BoughtResources::getResources).reduce(new Resources(), (r1, r2) -> {
r1.addAll(r2);
return r1;
bgstack15