Skip to content

Commit

Permalink
removed logic from view
Browse files Browse the repository at this point in the history
  • Loading branch information
andsam0 committed Feb 16, 2024
1 parent 4bde2da commit 24cec29
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 51 deletions.
11 changes: 7 additions & 4 deletions src/main/java/it/unibo/view/CurrentPlayerView.java
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,13 @@ public void draw() {
* Draw only the resources amount of the current player.
*/
public void drawResources() {
controller.getPlayerResources(controller.getCurrentPlayer()).entrySet().forEach(entry -> {
super.getChildren().remove(ResourcesViewFactory.getResourceLabelAmount(entry.getKey(), entry.getValue()));
super.getChildren().add(ResourcesViewFactory.getResourceLabelAmount(entry.getKey(), entry.getValue()));
});
controller.getResourceController().getPlayerResources(controller.getCurrentPlayer()).entrySet()
.forEach(entry -> {
super.getChildren()
.remove(ResourcesViewFactory.getResourceLabelAmount(entry.getKey(), entry.getValue()));
super.getChildren()
.add(ResourcesViewFactory.getResourceLabelAmount(entry.getKey(), entry.getValue()));
});
}

private Button getEndTurnButton() {
Expand Down
32 changes: 12 additions & 20 deletions src/main/java/it/unibo/view/RobberView.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
*/
public final class RobberView {
private final MainController controller;
private int sum;

/**
* RobberView.
Expand All @@ -42,18 +41,16 @@ public RobberView(final MainController controller) {
public void evokeRobber() {
if (controller.mustPlaceRobber()) {
controller.getPlayerNames().forEach(player -> {
sum = controller.getResourceController().getResources(player).entrySet().stream()
.mapToInt(e -> e.getValue()).sum();
if (sum > 7) {
showRobberStage(player);
if (controller.getResourceController().shouldDiscard(player)) {
showDiscardStage(player);
}
});
}
}

private void showRobberStage(final String player) {
private void showDiscardStage(final String player) {
final Stage stage = new Stage();
stage.setTitle("Robber window of " + player);
stage.setTitle("Discard window of " + player);
final VBox resourcesContainer = new VBox();
final HBox discardContainer = new HBox();
final HBox discardResourcesBox = new HBox();
Expand All @@ -62,33 +59,28 @@ private void showRobberStage(final String player) {
List.of(ResourceType.values()).forEach(resource -> discardResources.put(resource, 0));

final Runnable reloadConfirmButton = () -> {
boolean enable = true;
if (discardResources.entrySet().stream()
.mapToInt(e -> e.getValue())
.sum() < controller.getResourceController().getResources(player).entrySet().stream()
.mapToInt(e -> e.getValue()).sum() / 2) {
enable = false;
}
confirm.setDisable(!enable);
confirm.setDisable(!controller.getResourceController().canDiscard(player, discardResources));
};

reloadConfirmButton.run();
Stream.of(ResourceType.values()).forEach(resource -> {
discardResourcesBox.getChildren().add(resourceAndComboBox(resource,
controller.getPlayerResources(player).get(resource),
controller.getResourceController().getPlayerResources(player).get(resource),
(options, oldValue, newValue) -> {
discardResources.put(resource, newValue);
reloadConfirmButton.run();
}));
});
reloadConfirmButton.run();

confirm.setOnMouseClicked(e -> {
controller.acceptTrade(player, controller.getBank(), discardResources, new HashMap<>());
controller.tradeWithBank(player, discardResources,
new HashMap<>());
stage.close();
});

resourcesContainer.getChildren().add(new Label("Select card(s) to discard "
+ controller.getResourceController().getResources(player).entrySet().stream()
.mapToInt(e -> e.getValue()).sum() / 2
+ controller.getResourceController()
.getResourcesToDiscard(controller.getResourceController().getResourcesAmount(player))
+ " cards"));
resourcesContainer.getChildren().add(discardResourcesBox);
discardContainer.getChildren().add(resourcesContainer);
Expand Down
48 changes: 21 additions & 27 deletions src/main/java/it/unibo/view/TradeView.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,7 @@ public TradeView(final MainController controller) {
*/
public Button getTradeButton() {
final Button tradeButton = new Button("Trade");
tradeButton.setOnMouseClicked(event -> {
if (controller.getTurnController().getCycle() > 2) {
showTradeStage();
}
});
tradeButton.setOnMouseClicked(event -> showTradeStage());
if (!controller.canStartTrade()) {
tradeButton.setDisable(true);
}
Expand All @@ -71,56 +67,45 @@ private void showTradeStage() {
List.of(ResourceType.values()).forEach(resource -> wantedResources.put(resource, 0));
final Map<ResourceType, Integer> proposedResources = new HashMap<>();
List.of(ResourceType.values()).forEach(resource -> proposedResources.put(resource, 0));
Map<Button, Runnable> buttonToAction = new HashMap<>();

final Map<String, Button> playerToButton = new HashMap<>();
controller.getPlayerNames().stream().filter(playerName -> !playerName.equals(controller.getCurrentPlayer()))
.forEach(playerName -> {
final Button acceptTradeButton = new Button("Accept trade");
acceptTradeButton.setOnMouseClicked(e -> {
controller.acceptTrade(controller.getCurrentPlayer(), playerName,
controller.tradeWithPlayer(controller.getCurrentPlayer(), playerName,
proposedResources, wantedResources);
stage.close();
});
playerToButton.put(playerName, acceptTradeButton);
buttonToAction.put(acceptTradeButton,
setTradePlayerButton(acceptTradeButton, playerName, proposedResources, wantedResources));
});

final Runnable reloadBankTradeButton = () -> {
boolean enable = true;
if (!proposedResources.values().stream().anyMatch(amount -> amount == 4)) {
enable = false;
}
if (proposedResources.values().stream().mapToInt(i -> i).sum() != 4) {
enable = false;
}
if (wantedResources.values().stream().mapToInt(i -> i).sum() != 1) {
enable = false;
}
tradeBank.setDisable(!enable);
tradeBank.setDisable(!controller.getResourceController().canTradeWithBank(controller.getCurrentPlayer(),
proposedResources, wantedResources));
};

reloadBankTradeButton.run();
buttonToAction.forEach((button, action) -> action.run());
Stream.of(ResourceType.values()).forEach(resource -> {
proposedResourcesBox.getChildren().add(resourceAndComboBox(resource,
controller.getPlayerResources(controller.getCurrentPlayer()).get(resource),
controller.getResourceController().getPlayerResources(controller.getCurrentPlayer()).get(resource),
(options, oldValue, newValue) -> {
proposedResources.put(resource, newValue);
reloadBankTradeButton.run();
}));
wantedResourcesBox.getChildren().add(resourceAndComboBox(resource,
defaultWantedResources, (options, oldValue, newValue) -> {
wantedResources.put(resource, newValue);
playerToButton.forEach((playerName, button) -> {
if (!controller.hasResources(playerName, wantedResources)) {
button.setDisable(true);
} else {
button.setDisable(false);
}
});
buttonToAction.forEach((button, action) -> action.run());
reloadBankTradeButton.run();
}));
});

tradeBank.setOnMouseClicked(e -> {
controller.acceptTrade(controller.getCurrentPlayer(), controller.getBank(), proposedResources,
controller.tradeWithBank(controller.getCurrentPlayer(), proposedResources,
wantedResources);
stage.close();
});
Expand Down Expand Up @@ -160,4 +145,13 @@ private VBox resourceAndComboBox(final ResourceType resource, final int amount,
resourceBox.getChildren().add(comboBox);
return resourceBox;
}

private Runnable setTradePlayerButton(final Button button, final String playerName,
final Map<ResourceType, Integer> proposedResources,
final Map<ResourceType, Integer> wantedResources) {
return () -> {
button.setDisable(!controller.getResourceController().canTradeWithPlayer(
controller.getCurrentPlayer(), playerName, proposedResources, wantedResources));
};
}
}

0 comments on commit 24cec29

Please sign in to comment.