| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package eu.oschl.gui.actions;
- import eu.oschl.gui.Output;
- import eu.oschl.textadventure.Game;
- import eu.oschl.textadventure.exceptions.InvalidGameState;
- import eu.oschl.textadventure.map.Passage;
- import javafx.scene.paint.Color;
- public class Enter implements Action {
- private final Game game;
- public Enter(Game game) {
- this.game = game;
- }
- @Override
- public String getId() {
- return "enter";
- }
- @Override
- public String getName() {
- return "Enter";
- }
- @Override
- public String getDescription() {
- return "walk through a passage";
- }
- @Override
- public void execute(String[] args) {
- String input = String.join(" ", args);
- var passages = this.game.getCurrentRoom().getPassages();
- Passage passage = null;
- for (Passage p : passages) {
- if (p.getName().equalsIgnoreCase(input)) {
- passage = p;
- break;
- }
- }
- var printEnterText = !passage.getOtherRoom(game.getCurrentRoom()).wasEntered();
- var result = passage.passThrough(false);
- if (!result) {
- if (game.getCurrentRoom().getEnemy().isPresent()) {
- Output.print(
- game.getCurrentRoom().getEnemy().get().getName() + " blocks the way. It is only possible to go back.",
- Color.RED
- );
- } else if (passage.getBlockage().isPresent()) {
- Output.print(passage.getBlockage().get().getDescription(), Color.RED);
- } else {
- Output.print("The passage is blocked.", Color.RED);
- }
- return;
- }
- printSuccessfulPassage(printEnterText);
- }
- /**
- * Prints a message indicating that the player has successfully passed through a passage.
- *
- * @param printEnterText whether to print the enter text of the current room
- */
- private void printSuccessfulPassage(boolean printEnterText) {
- if (game.getLastPassage().isEmpty()) {
- throw new InvalidGameState("Last passages stack is empty even though a passage was passed");
- }
- Output.print("Passed through the ");
- Output.print(game.getLastPassage().get().getName(), Color.YELLOW);
- Output.print(" and entered ");
- Output.print(game.getCurrentRoom().getName(), Color.LIGHTBLUE);
- Output.print(".");
- if (game.getCurrentRoom().isBlockedByEnemy()) {
- Output.printLine();
- Output.print("...", Color.WHITE);
- Output.printLine();
- Output.print("There is somebody in here.", Color.WHITE);
- }
- if (printEnterText && game.getCurrentRoom().getEnterText().isPresent()) {
- Output.printLine();
- Output.printLine();
- Output.print(game.getCurrentRoom().getEnterText().get());
- Output.printLine();
- }
- }
- }
|