|
|
@@ -1,9 +1,6 @@
|
|
|
package eu.oschl.gui;
|
|
|
|
|
|
-import eu.oschl.gui.actions.Action;
|
|
|
-import eu.oschl.gui.actions.Enter;
|
|
|
-import eu.oschl.gui.actions.PressButton;
|
|
|
-import eu.oschl.gui.actions.Slay;
|
|
|
+import eu.oschl.gui.actions.*;
|
|
|
import eu.oschl.gui.exceptions.InvalidActionId;
|
|
|
import javafx.event.ActionEvent;
|
|
|
import javafx.fxml.FXML;
|
|
|
@@ -50,49 +47,79 @@ public class GameController implements Observer {
|
|
|
var newButtons = new ArrayList<Button>();
|
|
|
|
|
|
for (Action action : Session.getActionProcessor().getActions()) {
|
|
|
- if (action instanceof Enter) {
|
|
|
- var passages = Session.getGame().getCurrentRoom().getPassages();
|
|
|
+ switch (action) {
|
|
|
+ case Enter enter -> {
|
|
|
+ var room = Session.getGame().getCurrentRoom();
|
|
|
+ var passages = room.getPassages();
|
|
|
|
|
|
- for (var passage : passages) {
|
|
|
- var label = action.getName() + " " + passage.getName() + " (>> " + passage.getOtherRoom(Session.getGame().getCurrentRoom()).getName() + ")";
|
|
|
- var buttonData = new ButtonData(action.getId(), passage.getName());
|
|
|
+ for (var passage : passages) {
|
|
|
+ var label = passage.isSeeThrough() || passage.getOtherRoom(room).wasEntered()
|
|
|
+ ? enter.getName() + " " + passage.getName() + " (>> " + passage.getOtherRoom(Session.getGame().getCurrentRoom()).getName() + ")"
|
|
|
+ : enter.getName() + " " + passage.getName() + " (>> ???)";
|
|
|
+ var buttonData = new ButtonData(enter.getId(), passage.getName());
|
|
|
|
|
|
- var button = createActionButton(label, buttonData);
|
|
|
+ var button = createActionButton(label, buttonData);
|
|
|
+
|
|
|
+ button.getStyleClass().add("enter-button");
|
|
|
+
|
|
|
+ newButtons.add(button);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ case PressButton pressButton -> {
|
|
|
+ if (Session.getGame().getCurrentRoom().isBlockedByEnemy()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
|
|
|
- button.getStyleClass().add("enter-button");
|
|
|
+ var objects = Session.getGame().getCurrentRoom().getObjects();
|
|
|
|
|
|
- newButtons.add(button);
|
|
|
+ for (var object : objects) {
|
|
|
+ if (object instanceof eu.oschl.textadventure.objects.Button) {
|
|
|
+ var label = pressButton.getName() + " " + object.getName();
|
|
|
+ var buttonData = new ButtonData(pressButton.getId(), object.getName());
|
|
|
+
|
|
|
+ var button = createActionButton(label, buttonData);
|
|
|
+
|
|
|
+ button.getStyleClass().add("press-button");
|
|
|
+
|
|
|
+ newButtons.add(button);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- } else if (action instanceof PressButton) {
|
|
|
- var objects = Session.getGame().getCurrentRoom().getObjects();
|
|
|
+ case Slay slay -> {
|
|
|
+ var enemy = Session.getGame().getCurrentRoom().getEnemy();
|
|
|
|
|
|
- for (var object : objects) {
|
|
|
- if (object instanceof eu.oschl.textadventure.objects.Button) {
|
|
|
- var label = action.getName() + " " + object.getName();
|
|
|
- var buttonData = new ButtonData(action.getId(), object.getName());
|
|
|
+ if (enemy.isPresent() && enemy.get().isAlive()) {
|
|
|
+ var label = slay.getName() + " " + enemy.get().getName();
|
|
|
+ var buttonData = new ButtonData(slay.getId(), enemy.get().getName());
|
|
|
|
|
|
var button = createActionButton(label, buttonData);
|
|
|
|
|
|
- button.getStyleClass().add("press-button");
|
|
|
+ button.getStyleClass().add("slay-button");
|
|
|
|
|
|
newButtons.add(button);
|
|
|
}
|
|
|
}
|
|
|
- } else if (action instanceof Slay) {
|
|
|
- var enemy = Session.getGame().getCurrentRoom().getEnemy();
|
|
|
+ case TakeItem takeItem -> {
|
|
|
+ if (Session.getGame().getCurrentRoom().isBlockedByEnemy()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ var objects = Session.getGame().getCurrentRoom().getObjects();
|
|
|
|
|
|
- if (enemy.isPresent() && enemy.get().isAlive()) {
|
|
|
- var label = action.getName() + " " + enemy.get().getName();
|
|
|
- var buttonData = new ButtonData(action.getId(), enemy.get().getName());
|
|
|
+ for (var object : objects) {
|
|
|
+ if (object instanceof eu.oschl.textadventure.objects.PickableObject) {
|
|
|
+ var label = takeItem.getName() + " " + object.getName();
|
|
|
+ var buttonData = new ButtonData(takeItem.getId(), object.getName());
|
|
|
|
|
|
- var button = createActionButton(label, buttonData);
|
|
|
+ var button = createActionButton(label, buttonData);
|
|
|
|
|
|
- button.getStyleClass().add("slay-button");
|
|
|
+ button.getStyleClass().add("take-button");
|
|
|
|
|
|
- newButtons.add(button);
|
|
|
+ newButtons.add(button);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- } else {
|
|
|
- newButtons.add(createActionButton(action.getName(), new ButtonData(action.getId())));
|
|
|
+ default -> newButtons.add(createActionButton(action.getName(), new ButtonData(action.getId())));
|
|
|
}
|
|
|
}
|
|
|
|