From c5371f6ce1195453207687e057c5cef7d0e4ec53 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 3 May 2019 14:45:56 +0300 Subject: [PATCH 01/35] Cleanup unused imports, memory leaks --- src/main/java/com/jadventure/game/Client.java | 6 +++--- src/main/java/com/jadventure/game/JAdventure.java | 9 ++------- src/main/java/com/jadventure/game/QueueProvider.java | 12 +++++------- .../game/conversation/ConversationManager.java | 3 +-- .../java/com/jadventure/game/conversation/Line.java | 1 - src/main/java/com/jadventure/game/entities/NPC.java | 8 -------- .../java/com/jadventure/game/entities/Player.java | 6 ------ .../java/com/jadventure/game/menus/BattleMenu.java | 1 - .../java/com/jadventure/game/monsters/Bugbear.java | 2 -- .../jadventure/game/prompts/CommandCollection.java | 1 - .../game/repository/EncounteredNpcRepository.java | 6 +----- .../game/repository/LocationRepository.java | 4 ---- .../com/jadventure/game/entities/EntityTest.java | 2 -- .../com/jadventure/game/entities/PlayerTest.java | 7 ------- .../jadventure/game/monsters/MonsterFactoryTest.java | 3 --- .../com/jadventure/game/monsters/MonsterTest.java | 6 ------ .../game/prompts/CommandCollectionTest.java | 8 -------- .../game/repository/ItemRepositoryTest.java | 2 -- .../game/repository/LocationRepositoryTest.java | 3 --- 19 files changed, 12 insertions(+), 78 deletions(-) diff --git a/src/main/java/com/jadventure/game/Client.java b/src/main/java/com/jadventure/game/Client.java index fa6b382a..7f66fb2f 100644 --- a/src/main/java/com/jadventure/game/Client.java +++ b/src/main/java/com/jadventure/game/Client.java @@ -56,9 +56,9 @@ public Client(String serverName, int port) { } public void getInput() { - Scanner input; - try { - input = new Scanner(System.in); + //Scanner input; + try (Scanner input = new Scanner(System.in)) { + //input = new Scanner(System.in); String userInput = input.nextLine(); out.writeUTF(userInput); } catch (IOException e) { diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 4fc384d5..667ff9d4 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -1,16 +1,11 @@ package com.jadventure.game; -import com.jadventure.game.menus.MainMenu; -import com.jadventure.game.QueueProvider; -import com.jadventure.game.Client; - +import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; -import java.io.IOException; -import java.net.SocketException; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.jadventure.game.menus.MainMenu; /** * This is the starting point of the game. diff --git a/src/main/java/com/jadventure/game/QueueProvider.java b/src/main/java/com/jadventure/game/QueueProvider.java index 9768ce8d..2129f153 100644 --- a/src/main/java/com/jadventure/game/QueueProvider.java +++ b/src/main/java/com/jadventure/game/QueueProvider.java @@ -94,15 +94,13 @@ public static String take() { message = "exit"; } } else { - Scanner input = null; - try { - input = new Scanner(System.in); + //Scanner input; + try (Scanner input = new Scanner(System.in)) { + //input = new Scanner(System.in); message = input.nextLine(); - } - catch (NoSuchElementException nsee) { + } catch (NoSuchElementException nsee) { nsee.printStackTrace(); - } - catch (IllegalStateException ise) { + } catch (IllegalStateException ise) { ise.printStackTrace(); } } diff --git a/src/main/java/com/jadventure/game/conversation/ConversationManager.java b/src/main/java/com/jadventure/game/conversation/ConversationManager.java index c1bb57f0..8fcbbaff 100644 --- a/src/main/java/com/jadventure/game/conversation/ConversationManager.java +++ b/src/main/java/com/jadventure/game/conversation/ConversationManager.java @@ -16,7 +16,6 @@ import com.google.gson.JsonParser; import com.jadventure.game.repository.NpcRepository; -import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.Reader; @@ -64,7 +63,7 @@ public static ConversationManager getInstance() { private void load() { String fileName = "json/original_data/npcs.json"; JsonParser parser = new JsonParser(); - File f = new File(fileName); + //File f = new File(fileName); try { Reader reader = new FileReader(fileName); JsonObject json = parser.parse(reader).getAsJsonObject(); diff --git a/src/main/java/com/jadventure/game/conversation/Line.java b/src/main/java/com/jadventure/game/conversation/Line.java index 4acd82f5..8d68a1a9 100644 --- a/src/main/java/com/jadventure/game/conversation/Line.java +++ b/src/main/java/com/jadventure/game/conversation/Line.java @@ -1,6 +1,5 @@ package com.jadventure.game.conversation; -import com.jadventure.game.QueueProvider; import com.jadventure.game.entities.NPC; import com.jadventure.game.entities.Player; import com.jadventure.game.menus.Menus; diff --git a/src/main/java/com/jadventure/game/entities/NPC.java b/src/main/java/com/jadventure/game/entities/NPC.java index 25997ef1..4c75241d 100644 --- a/src/main/java/com/jadventure/game/entities/NPC.java +++ b/src/main/java/com/jadventure/game/entities/NPC.java @@ -1,20 +1,12 @@ package com.jadventure.game.entities; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.Reader; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Random; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; - -import com.jadventure.game.QueueProvider; -import com.jadventure.game.items.Storage; /** * This class deals with Non Player Character (NPC) and all of their properties. diff --git a/src/main/java/com/jadventure/game/entities/Player.java b/src/main/java/com/jadventure/game/entities/Player.java index 73c4650b..6fa107f9 100644 --- a/src/main/java/com/jadventure/game/entities/Player.java +++ b/src/main/java/com/jadventure/game/entities/Player.java @@ -7,10 +7,6 @@ import java.io.IOException; import java.io.Reader; import java.io.Writer; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -25,8 +21,6 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; -import com.google.gson.JsonArray; -import com.google.gson.JsonPrimitive; import com.google.gson.reflect.TypeToken; import com.jadventure.game.DeathException; import com.jadventure.game.GameBeans; diff --git a/src/main/java/com/jadventure/game/menus/BattleMenu.java b/src/main/java/com/jadventure/game/menus/BattleMenu.java index b4169101..f2204e54 100644 --- a/src/main/java/com/jadventure/game/menus/BattleMenu.java +++ b/src/main/java/com/jadventure/game/menus/BattleMenu.java @@ -4,7 +4,6 @@ import com.jadventure.game.entities.Entity; import com.jadventure.game.entities.Player; import com.jadventure.game.entities.NPC; -import com.jadventure.game.monsters.Monster; import com.jadventure.game.QueueProvider; import com.jadventure.game.CharacterChange; import com.jadventure.game.items.ItemStack; diff --git a/src/main/java/com/jadventure/game/monsters/Bugbear.java b/src/main/java/com/jadventure/game/monsters/Bugbear.java index 4ca54423..ceb100ce 100644 --- a/src/main/java/com/jadventure/game/monsters/Bugbear.java +++ b/src/main/java/com/jadventure/game/monsters/Bugbear.java @@ -1,7 +1,5 @@ package com.jadventure.game.monsters; -import com.jadventure.game.items.ItemStack; - /* * A hybrid animal with the matching armour and high damage, but low health. */ diff --git a/src/main/java/com/jadventure/game/prompts/CommandCollection.java b/src/main/java/com/jadventure/game/prompts/CommandCollection.java index 3203cecb..0be1c562 100644 --- a/src/main/java/com/jadventure/game/prompts/CommandCollection.java +++ b/src/main/java/com/jadventure/game/prompts/CommandCollection.java @@ -22,7 +22,6 @@ import com.jadventure.game.navigation.LocationType; import com.jadventure.game.repository.ItemRepository; import com.jadventure.game.repository.LocationRepository; -import com.jadventure.game.DeathException; import com.jadventure.game.GameBeans; /** diff --git a/src/main/java/com/jadventure/game/repository/EncounteredNpcRepository.java b/src/main/java/com/jadventure/game/repository/EncounteredNpcRepository.java index 45201a5c..09ad9de0 100644 --- a/src/main/java/com/jadventure/game/repository/EncounteredNpcRepository.java +++ b/src/main/java/com/jadventure/game/repository/EncounteredNpcRepository.java @@ -3,13 +3,9 @@ import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.stream.JsonReader; -import com.jadventure.game.entities.NPC; - import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; -import java.util.HashMap; -import java.util.Map; public class EncounteredNpcRepository extends NpcRepository{ static String fileName; @@ -28,7 +24,7 @@ public static NpcRepository createRepo(String profileName) { } public static void addNpc(String profileName, String name, int health, String id) { - EncounteredNpcRepository repo = new EncounteredNpcRepository(); + //EncounteredNpcRepository repo = new EncounteredNpcRepository(); File repoFile = new File("json/profiles/" + profileName + "/encNpcs.json"); if (!repoFile.exists()) { throw new RuntimeException("Could not find NPC Repository"); diff --git a/src/main/java/com/jadventure/game/repository/LocationRepository.java b/src/main/java/com/jadventure/game/repository/LocationRepository.java index e83a6cc5..43811826 100644 --- a/src/main/java/com/jadventure/game/repository/LocationRepository.java +++ b/src/main/java/com/jadventure/game/repository/LocationRepository.java @@ -15,8 +15,6 @@ import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; import com.google.gson.Gson; -import com.jadventure.game.JAdventure; - import java.nio.file.Files; import java.nio.file.StandardCopyOption; import java.io.File; @@ -29,8 +27,6 @@ import java.util.HashMap; import java.util.Map; import java.util.List; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This class loads the locations from the locations.json file on start. diff --git a/src/test/java/com/jadventure/game/entities/EntityTest.java b/src/test/java/com/jadventure/game/entities/EntityTest.java index 49aa782f..3810cbc0 100644 --- a/src/test/java/com/jadventure/game/entities/EntityTest.java +++ b/src/test/java/com/jadventure/game/entities/EntityTest.java @@ -4,8 +4,6 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertFalse; - import java.util.Map; import org.junit.After; diff --git a/src/test/java/com/jadventure/game/entities/PlayerTest.java b/src/test/java/com/jadventure/game/entities/PlayerTest.java index 95051a33..239fa256 100644 --- a/src/test/java/com/jadventure/game/entities/PlayerTest.java +++ b/src/test/java/com/jadventure/game/entities/PlayerTest.java @@ -3,13 +3,6 @@ import com.jadventure.game.entities.Player; import org.junit.Test; -import org.junit.Before; - -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.io.File; -import java.io.IOException; - import static org.junit.Assert.assertEquals; public class PlayerTest { diff --git a/src/test/java/com/jadventure/game/monsters/MonsterFactoryTest.java b/src/test/java/com/jadventure/game/monsters/MonsterFactoryTest.java index a85be4eb..2ecab0e3 100644 --- a/src/test/java/com/jadventure/game/monsters/MonsterFactoryTest.java +++ b/src/test/java/com/jadventure/game/monsters/MonsterFactoryTest.java @@ -2,14 +2,11 @@ import static org.junit.Assert.*; -import java.security.PublicKey; - import org.junit.Before; import org.junit.Test; import com.jadventure.game.entities.Player; import com.jadventure.game.navigation.Coordinate; -import com.jadventure.game.navigation.ILocation; import com.jadventure.game.navigation.Location; import com.jadventure.game.navigation.LocationType; diff --git a/src/test/java/com/jadventure/game/monsters/MonsterTest.java b/src/test/java/com/jadventure/game/monsters/MonsterTest.java index 96da36d6..2e91906b 100644 --- a/src/test/java/com/jadventure/game/monsters/MonsterTest.java +++ b/src/test/java/com/jadventure/game/monsters/MonsterTest.java @@ -2,12 +2,6 @@ import static org.junit.Assert.*; -import java.util.Hashtable; - -import javax.naming.NamingException; -import javax.naming.spi.ObjectFactory; -import javax.naming.spi.ObjectFactoryBuilder; - import org.junit.Before; import org.junit.Test; diff --git a/src/test/java/com/jadventure/game/prompts/CommandCollectionTest.java b/src/test/java/com/jadventure/game/prompts/CommandCollectionTest.java index 97927a31..f4185302 100644 --- a/src/test/java/com/jadventure/game/prompts/CommandCollectionTest.java +++ b/src/test/java/com/jadventure/game/prompts/CommandCollectionTest.java @@ -3,24 +3,16 @@ import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; import java.io.PrintStream; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.util.Collection; - import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.google.gson.internal.bind.CollectionTypeAdapterFactory; import com.jadventure.game.DeathException; import com.jadventure.game.GameBeans; import com.jadventure.game.entities.Player; import com.jadventure.game.monsters.Troll; import com.jadventure.game.navigation.Coordinate; -import com.jadventure.game.navigation.Direction; import com.jadventure.game.navigation.Location; import com.jadventure.game.navigation.LocationType; import com.jadventure.game.repository.LocationRepository; diff --git a/src/test/java/com/jadventure/game/repository/ItemRepositoryTest.java b/src/test/java/com/jadventure/game/repository/ItemRepositoryTest.java index 10d52ed2..2edb5299 100644 --- a/src/test/java/com/jadventure/game/repository/ItemRepositoryTest.java +++ b/src/test/java/com/jadventure/game/repository/ItemRepositoryTest.java @@ -1,7 +1,6 @@ package com.jadventure.game.repository; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertNotNull; import java.io.IOException; @@ -10,7 +9,6 @@ import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; -import java.util.HashMap; import java.util.Map; import java.util.TreeMap; diff --git a/src/test/java/com/jadventure/game/repository/LocationRepositoryTest.java b/src/test/java/com/jadventure/game/repository/LocationRepositoryTest.java index 6fd380dc..0bfac28e 100644 --- a/src/test/java/com/jadventure/game/repository/LocationRepositoryTest.java +++ b/src/test/java/com/jadventure/game/repository/LocationRepositoryTest.java @@ -1,8 +1,6 @@ package com.jadventure.game.repository; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - import org.junit.Test; import org.junit.Before; @@ -10,7 +8,6 @@ import com.jadventure.game.navigation.ILocation; import com.jadventure.game.navigation.Location; import com.jadventure.game.navigation.LocationType; -import com.jadventure.game.GameBeans; public class LocationRepositoryTest { LocationRepository locationRepo; From 6fb673c686a8061aed2efc0c91773a191047ab85 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 3 May 2019 17:25:14 +0300 Subject: [PATCH 02/35] Change JAdventure to be a JavaFX Application. Implement Main Menu scene --- .../java/com/jadventure/game/JAdventure.java | 112 ++++++++++++++++-- .../jadventure/game/MainMenuController.java | 22 ++++ .../com/jadventure/game/menus/MainMenu.java | 21 +++- .../game/images/JAdventure_logo.png | Bin 0 -> 109158 bytes .../com/jadventure/game/view/MainMenu.fxml | 75 ++++++++++++ 5 files changed, 212 insertions(+), 18 deletions(-) create mode 100644 src/main/java/com/jadventure/game/MainMenuController.java create mode 100644 src/main/resources/com/jadventure/game/images/JAdventure_logo.png create mode 100644 src/main/resources/com/jadventure/game/view/MainMenu.fxml diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 667ff9d4..b003a07c 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -1,11 +1,19 @@ package com.jadventure.game; - + import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; +import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jadventure.game.menus.MainMenu; +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.geometry.Rectangle2D; +import javafx.scene.Scene; +import javafx.scene.layout.BorderPane; +import javafx.stage.Screen; +import javafx.stage.Stage; /** * This is the starting point of the game. @@ -13,10 +21,25 @@ * a new MainMenu that will handle the rest of * the game. */ -public class JAdventure { +public class JAdventure extends Application { + private Stage primaryStage; + private BorderPane root; private static Logger logger = LoggerFactory.getLogger(JAdventure.class); - - public static void main(String[] args) { + + @Override + public void init() { + // TODO + } + + @Override + public void start(Stage primaryStage) { + try { + this.primaryStage = primaryStage; + this.primaryStage.setTitle("JAdventure"); // TODO set stage(window) title + } catch(Exception e) { + e.printStackTrace(); + } + String[] args = getArguments(); logger.info("Starting JAdventure " + toString(args)); GameModeType mode = getGameMode(args); logger.debug("Starting in mode " + mode.name()); @@ -32,30 +55,30 @@ public static void main(String[] args) { new Client(serverName, port); } else if (GameModeType.SERVER == mode) { while (true) { - ServerSocket listener = null; + ServerSocket listener = null; try { listener = new ServerSocket(port); while (true) { Socket server = listener.accept(); - Runnable r = new MainMenu(server, mode); + Runnable r = new MainMenu(server, mode, this); new Thread(r).start(); } } catch (IOException c) { c.printStackTrace(); } finally { - try { - listener.close(); - } catch (IOException e) { - e.printStackTrace(); - } + try { + listener.close(); + } catch (IOException e) { + e.printStackTrace(); + } } } } else { QueueProvider.startMessenger(GameModeType.STAND_ALONE); - new MainMenu(); + new MainMenu(this).start(); } } - + private static GameModeType getGameMode(String[] args) { if (args == null || args.length == 0 || "".equals(args[0].trim())) { return GameModeType.STAND_ALONE; @@ -88,4 +111,67 @@ private static String toString(String[] args) { bldr.append(" ]"); return bldr.toString(); } + + /** + * Shows MainMenu scene + */ + public void loadMainMenu() { + try { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/MainMenu.fxml")); // TODO Change class name accordingly + root = (BorderPane) loader.load(); + Scene scene = new Scene(root); + primaryStage.setScene(scene); + setStageSize(); + primaryStage.show(); + MainMenuController controller = loader.getController(); + controller.setMainApp(this); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String[] getArguments() { + List params = getParameters().getRaw(); + if (params.size() > 0) { + String[] args = new String[params.size()]; + int index = 0; + for (String param : params) { + args[index] = param; + index++; + } + return args; + } else { + return new String[0]; + } + } + + public void setStageSize() { + // Sets height and width to match screen size + Rectangle2D bounds = Screen.getPrimary().getVisualBounds(); + primaryStage.setX(bounds.getMinX()); + primaryStage.setY(bounds.getMinY()); + primaryStage.setWidth(bounds.getWidth()); + primaryStage.setHeight(bounds.getHeight()); + } + + public Stage getPrimaryStage() { + return primaryStage; + } + + public void setPrimaryStage(Stage primaryStage) { + this.primaryStage = primaryStage; + } + + public BorderPane getRoot() { + return root; + } + + public void setRoot(BorderPane root) { + this.root = root; + } + + public static void main(String[] args) { + launch(args); + } } diff --git a/src/main/java/com/jadventure/game/MainMenuController.java b/src/main/java/com/jadventure/game/MainMenuController.java new file mode 100644 index 00000000..6760b45e --- /dev/null +++ b/src/main/java/com/jadventure/game/MainMenuController.java @@ -0,0 +1,22 @@ +package com.jadventure.game; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; + +public class MainMenuController { + // Reference to the main application. + private JAdventure jAdventure; + + public MainMenuController() { + } + + /** + * Is called by the main application to give a reference back to itself. + * + * @param jAdventure + */ + public void setMainApp(JAdventure jAdventure) { + this.jAdventure = jAdventure; + // TODO init + } +} diff --git a/src/main/java/com/jadventure/game/menus/MainMenu.java b/src/main/java/com/jadventure/game/menus/MainMenu.java index 53776f25..a0333e72 100644 --- a/src/main/java/com/jadventure/game/menus/MainMenu.java +++ b/src/main/java/com/jadventure/game/menus/MainMenu.java @@ -17,20 +17,31 @@ * start a new one, or exit to the terminal. */ public class MainMenu extends Menus implements Runnable { - - public MainMenu(Socket server, GameModeType mode){ + + private JAdventure jAdventure; + + public MainMenu(Socket server, GameModeType mode, JAdventure jAdventure){ + this.jAdventure = jAdventure; QueueProvider.startMessenger(mode, server); } - public MainMenu() { - start(); + public MainMenu(JAdventure jAdventure) { + this.jAdventure = jAdventure; } public void run() { start(); } - + public void start() { + try { + jAdventure.loadMainMenu(); + } catch(Exception e) { + e.printStackTrace(); + } + } + + public void start_old() { menuItems.add(new MenuItem("Start", "Starts a new Game", "new")); menuItems.add(new MenuItem("Load", "Loads an existing Game")); menuItems.add(new MenuItem("Delete", "Deletes an existing Game")); diff --git a/src/main/resources/com/jadventure/game/images/JAdventure_logo.png b/src/main/resources/com/jadventure/game/images/JAdventure_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cab95cf60e23c505347f05dd0df52cbde6fc8ea0 GIT binary patch literal 109158 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
From 8fddd7eec419cd5a84c795e4d4f34e9fc1e8e18f Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 3 May 2019 18:46:13 +0300 Subject: [PATCH 03/35] Setup custom quit event handler --- .../java/com/jadventure/game/JAdventure.java | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index b003a07c..5eef1296 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -4,16 +4,23 @@ import java.net.ServerSocket; import java.net.Socket; import java.util.List; +import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.jadventure.game.menus.MainMenu; import javafx.application.Application; +import javafx.application.Platform; +import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.geometry.Rectangle2D; import javafx.scene.Scene; +import javafx.scene.control.Alert; +import javafx.scene.control.Alert.AlertType; +import javafx.scene.control.ButtonType; import javafx.scene.layout.BorderPane; import javafx.stage.Screen; import javafx.stage.Stage; +import javafx.stage.WindowEvent; /** * This is the starting point of the game. @@ -28,14 +35,19 @@ public class JAdventure extends Application { @Override public void init() { - // TODO } @Override public void start(Stage primaryStage) { try { this.primaryStage = primaryStage; - this.primaryStage.setTitle("JAdventure"); // TODO set stage(window) title + primaryStage.setOnCloseRequest(new EventHandler() { + @Override + public void handle(WindowEvent e) { + close(e); + } + }); + this.primaryStage.setTitle("JAdventure"); } catch(Exception e) { e.printStackTrace(); } @@ -130,6 +142,39 @@ public void loadMainMenu() { e.printStackTrace(); } } + + public void close(WindowEvent e) { + e.consume(); + ButtonType save = new ButtonType("Save"); + ButtonType dontSave = new ButtonType("Don't save"); + ButtonType cancel = new ButtonType("Cancel"); + Alert alert = new Alert(AlertType.CONFIRMATION, + "", + save, dontSave, cancel); + alert.initOwner(getPrimaryStage()); + alert.setTitle("Quit"); + alert.setHeaderText("Are you sure you want to quit?"); + alert.setContentText("Do you want to save your current progress?"); + alert.setGraphic(null); + Optional clicked = alert.showAndWait(); + String selection = clicked.get().getText(); + if (selection.equals("Don't save")) { + try { + Platform.exit(); + stop(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } else if (selection.equals("Save")) { + // Save game + try { + Platform.exit(); + stop(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + } public String[] getArguments() { List params = getParameters().getRaw(); From dd19f62a8464097522682569ff60f231d532ea0d Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 3 May 2019 19:06:30 +0300 Subject: [PATCH 04/35] Initialize controller references for Main Menu --- .../jadventure/game/MainMenuController.java | 49 ++++++++++++++++++- .../com/jadventure/game/view/MainMenu.fxml | 16 +++--- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/jadventure/game/MainMenuController.java b/src/main/java/com/jadventure/game/MainMenuController.java index 6760b45e..d90915b6 100644 --- a/src/main/java/com/jadventure/game/MainMenuController.java +++ b/src/main/java/com/jadventure/game/MainMenuController.java @@ -1,15 +1,62 @@ package com.jadventure.game; -import javafx.event.ActionEvent; import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.MenuItem; +import javafx.stage.WindowEvent; public class MainMenuController { + // Reference to the main application. private JAdventure jAdventure; public MainMenuController() { } + @FXML + private Button start; + @FXML + private Button load; + @FXML + private Button quit; + @FXML + private MenuItem save; + @FXML + private MenuItem back; + @FXML + private MenuItem close; + @FXML + private MenuItem github; + + @FXML + public void startGame() { + + } + + @FXML + public void loadProfile() { + + } + + @FXML + public void saveGame() { + + } + @FXML + public void goToMainMenu() { + + } + @FXML + public void goToGithub() { + + } + + @FXML + public void quitGame() throws Exception { + jAdventure.getPrimaryStage().fireEvent( + new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); + } + /** * Is called by the main application to give a reference back to itself. * diff --git a/src/main/resources/com/jadventure/game/view/MainMenu.fxml b/src/main/resources/com/jadventure/game/view/MainMenu.fxml index 9dbf412e..640dacbc 100644 --- a/src/main/resources/com/jadventure/game/view/MainMenu.fxml +++ b/src/main/resources/com/jadventure/game/view/MainMenu.fxml @@ -16,16 +16,16 @@ - + - - - + + + - + @@ -56,9 +56,9 @@ - + From 1adee8e3a1ee49756adaf72ea9a901df5b439e8c Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 4 May 2019 16:57:08 +0300 Subject: [PATCH 07/35] Complete profile menu design --- src/main/java/com/jadventure/game/Client.java | 6 ++-- .../java/com/jadventure/game/JAdventure.java | 2 +- .../game/ProfileMenuController.java | 33 +++++++++++++++--- .../com/jadventure/game/QueueProvider.java | 2 +- .../com/jadventure/game/menus/MainMenu.java | 13 ++++--- .../com/jadventure/game/images/delete.png | Bin 0 -> 3081 bytes .../com/jadventure/game/images/load.png | Bin 0 -> 2719 bytes .../com/jadventure/game/view/ProfileMenu.fxml | 6 ++-- 8 files changed, 44 insertions(+), 18 deletions(-) create mode 100644 src/main/resources/com/jadventure/game/images/delete.png create mode 100644 src/main/resources/com/jadventure/game/images/load.png diff --git a/src/main/java/com/jadventure/game/Client.java b/src/main/java/com/jadventure/game/Client.java index 7f66fb2f..d7f33729 100644 --- a/src/main/java/com/jadventure/game/Client.java +++ b/src/main/java/com/jadventure/game/Client.java @@ -59,10 +59,8 @@ public void getInput() { //Scanner input; try (Scanner input = new Scanner(System.in)) { //input = new Scanner(System.in); - String userInput = input.nextLine(); - out.writeUTF(userInput); - } catch (IOException e) { - e.printStackTrace(); + //String userInput = input.nextLine(); + //out.writeUTF(userInput); } } } diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 58480d3e..f775679a 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -145,7 +145,7 @@ public void loadMainMenu() { /** * Shows ProfileMenu scene - * @throws DeathException + * @throws DeathException */ public void loadProfileMenu() { try { diff --git a/src/main/java/com/jadventure/game/ProfileMenuController.java b/src/main/java/com/jadventure/game/ProfileMenuController.java index a1b63faa..86d14a5c 100644 --- a/src/main/java/com/jadventure/game/ProfileMenuController.java +++ b/src/main/java/com/jadventure/game/ProfileMenuController.java @@ -1,10 +1,19 @@ package com.jadventure.game; +import java.util.List; import com.jadventure.game.menus.MainMenu; import javafx.fxml.FXML; +import javafx.geometry.Insets; +import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; +import javafx.scene.layout.Region; +import javafx.scene.layout.RowConstraints; +import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.WindowEvent; @@ -53,11 +62,28 @@ public void quitGame() throws Exception { } public void loadProfiles() { - String[] profiles = MainMenu.listProfiles(); - if (profiles.length == 0) { + List profiles = MainMenu.listProfiles(); + if (profiles.size() == 0) { exists.setText("There are no profiles to load. Please start a new game instead."); } else { - + for (int i=0; i listProfiles() { if (isProfileDirEmpty()) { QueueProvider.offer("No profiles found."); - return new String[0]; + return new ArrayList(); } else { File file = new File("json/profiles"); - String[] profiles = file.list(); + String[] possibleProfiles = file.list(); + List profiles = new ArrayList(); QueueProvider.offer("Profiles:"); - for (String name : profiles) { + for (String name : possibleProfiles) { if (new File("json/profiles/" + name).isDirectory()) { QueueProvider.offer(" " + name); + profiles.add(name); } } return profiles; diff --git a/src/main/resources/com/jadventure/game/images/delete.png b/src/main/resources/com/jadventure/game/images/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d4fe230ffb80ac8bf3f7d66c2b0bd355e2644b GIT binary patch literal 3081 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 XBsu4H=LD&T00000NkvXXu0mjf_Kxhx literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/images/load.png b/src/main/resources/com/jadventure/game/images/load.png new file mode 100644 index 0000000000000000000000000000000000000000..487bc62b7f936064e086802e1af7b3925da8bf20 GIT binary patch literal 2719 zcmV;Q3Sjk#P)8Igpa*ZXgl` z*L3<6>ns1tzqY=`p`&}x`~Gn`6Ii@p8D;Ztp(uaq$bkD~-)4TZW>vpHIaz|7EXl=V z1u4lQ>RMH`NmsW;-3hZ_&g5*(uI)?<5C8G|Y&%%#otrvQa@~B5 zxg}cMrgZFt$)-<2Y~5unUb$~8t> zsrcBS;uG5kpIq@Qw=KN;%i+3vyIB0#H>q!`BQsra?_CoE!H)eX;iqmD&4DRdnS(;AU==^~Aw<8D8GZbb}y6x^xS2G7rC6-&nF3k;JH zTXh|-zghvX?O-MQs&}0m?hk991|SfCg$v|}RV=d3m?p^0vEAl3YgY9S*V%K1_nkz2 z$!v+HL)aWz%?TC~RGCA*|9tEG%cQ5?{+ivfaBpvZ!y7YBpDN<|H*=EL`$y#(0E!9)sj2b#f@y&a%;VBYFL876vrNh;9d`elGt)+K z2OS<OxdKLkQo>=Z0Z$E@O`cF(@j3y)&pC- z3uDFz41>6;Wr1lLUbRFn<8mJ2)|soh_TptIf^k2iZ%s*o(b*2%-VXrK0IKTt128rZ zlx7h&<4dll1(s>VUXVph8~Y0iv&-0a>;-n6+?vp&o|gyBEqE`|8sM2^R+eqQ@fKIP z{)-|h=}Hz9&0%`ZI<_2rjbrUK34zPa73@D?c|01xLFYq8rtNR>7SHDfEI~$(x`QPp zS5w`*nu^-BobGLn>$xc@(X(+H;H7|+0AHdS4ga>e*5%(&=7Hr2esXUzwOI-v(Z*a)FT&Nrr| z6L&E2l?$KueNvoZ&+%5a)`rMPjkgabT1R)gKVQ-dN?8d|&cZSVubdFw)VJ^Amlf}@ zrFt(nOg~AQVa25!fOgsRE4>dLXCNtfVSP^5KId1P*Yo<$oy-_p&$4;8|Ho@VQpjkZ zGc7A2(b5`(St`}af4`{U2XB8ser64eX0;H|jD+|+fTnaCE-fX4j;_;mo`H<41Sn^o zJD^C>!^!R)+`DcA)h#vLIK7_qV8{+=ae{TU`zDz=D$9l|E||r(gOzl4B`(kPHA_L5 zZmX7;w*Q;oS8nHqsrAer-?nG z@k0tnH*ojmjn4N3VA+rdLNe4(g2 zY)=;Le5IaXQnLRhe)EFc?EzTTQppKa-c5C|!dQg9|*NBP_Xl;oebfh7nj z`c$IsiTo^t^UIDYnAVrSi8maxQOd8nlVDPE^fbdQ*WN{1N`?nG&=0x)q;O0!x(agB zdI{<#Lf9QwQrOByROLWPDUhyNyI>w5UTX~i*wQFD+hd!?oj2YSJBN}Q9K{Xu$^dAr zSDZcD|LeRvK^+Mroz{lI>$FlJm9VQ6C?!!!+Sk4FAXEfo6rk{(+8NgM*QbV~$_pej zCYJU;Z~4%zPuO`U49Barm?<^8 z!tSv2%}x_2&2PP9B|Ko&S50X{O6M6k&vE}+%Nd;4f2QLOgnswHs{^kU03-)e`1Oxo zv`6N>f|E5meOI|$)$shRuVQ{xO8Tv4SLLdvqzxMZ78_NC8F=cJNRLB}&y84*1NQF*ex zNzrm#^A;cbTbny49Kd}`9;N)MJMGbSlcJ$o_l@3B47US{2;cF|(XI}pF3~iJrU{hp zf;-TW_sNJT>RO2O9k1<_;>72=H-`M}{VykG!9O$Cq_EgP*94j-oK||Ra?Y#B0HPw2 zbi_c*GQl+MKxH~X%LtnohDA7R5e}P9YY_^YghCdl>IFv+sX;IJf9dX+H&<=sdME$2 zosv}T(CF+)MAQ4KC%u#+-8?722n%Wss`COHlyd#;Y)~2$ z6#q%FKbuC4$_1TLoSBTjlzeW1>QdsG*c+j$s?daKJ(#lW@qSz0IU*kIC_)e)ooL zdz4%H+t@aGj9^lUV!|ZN227Hkib{7C^oLXS%dF#HAxAX_tf|4E>eCQ)NBsA`3$n2- zvh=qlF*QvvW}Kp6s?PX{Iw@%iEy?jK$Da_6NroNOLMC-bda11nar8)t&i2?XiHomX zhEnIhU1V4{lcr@#(z6t~<8+c!Wt4JthkNPmHfcN&`|kLaZzk - + - - + + From be49df87eae9a2b6433d08c6bcd257fb8f7ae214 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 4 May 2019 17:24:45 +0300 Subject: [PATCH 08/35] Set on mouse click profile loading --- src/main/java/com/jadventure/game/Client.java | 8 +++++--- .../jadventure/game/ProfileMenuController.java | 18 ++++++++++++++++++ .../com/jadventure/game/QueueProvider.java | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/jadventure/game/Client.java b/src/main/java/com/jadventure/game/Client.java index d7f33729..a8952393 100644 --- a/src/main/java/com/jadventure/game/Client.java +++ b/src/main/java/com/jadventure/game/Client.java @@ -59,9 +59,11 @@ public void getInput() { //Scanner input; try (Scanner input = new Scanner(System.in)) { //input = new Scanner(System.in); - //String userInput = input.nextLine(); - //out.writeUTF(userInput); - } + String userInput = input.nextLine(); + out.writeUTF(userInput); + } catch (IOException e) { + e.printStackTrace(); + } } } diff --git a/src/main/java/com/jadventure/game/ProfileMenuController.java b/src/main/java/com/jadventure/game/ProfileMenuController.java index 86d14a5c..a1fde02d 100644 --- a/src/main/java/com/jadventure/game/ProfileMenuController.java +++ b/src/main/java/com/jadventure/game/ProfileMenuController.java @@ -1,7 +1,9 @@ package com.jadventure.game; import java.util.List; +import com.jadventure.game.entities.Player; import com.jadventure.game.menus.MainMenu; +import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -9,6 +11,7 @@ import javafx.scene.control.MenuItem; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; import javafx.scene.layout.Region; @@ -72,6 +75,21 @@ public void loadProfiles() { profileGrid.add(profName, 0, i); ImageView load = new ImageView(new Image("/com/jadventure/game/images/load.png")); + load.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent e) { + ImageView img = (ImageView) e.getSource(); + int profileIndex = GridPane.getRowIndex(img); + Text profName = (Text) profileGrid.getChildren().get(profileIndex * 3); + Player player = null; + player = Player.load(profName.getText()); + try { + new Game(player, "old"); + } catch (DeathException e1) { + e1.printStackTrace(); + } + } + }); profileGrid.add(load, 1, i); ImageView del = new ImageView(new Image("/com/jadventure/game/images/delete.png")); diff --git a/src/main/java/com/jadventure/game/QueueProvider.java b/src/main/java/com/jadventure/game/QueueProvider.java index 4a12d1e8..2129f153 100644 --- a/src/main/java/com/jadventure/game/QueueProvider.java +++ b/src/main/java/com/jadventure/game/QueueProvider.java @@ -97,7 +97,7 @@ public static String take() { //Scanner input; try (Scanner input = new Scanner(System.in)) { //input = new Scanner(System.in); - //message = input.nextLine(); + message = input.nextLine(); } catch (NoSuchElementException nsee) { nsee.printStackTrace(); } catch (IllegalStateException ise) { From aec6a89a44de5a1dc932ce606064790663563e41 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 4 May 2019 17:54:13 +0300 Subject: [PATCH 09/35] Set on mouse click profile deletion + alert --- .../game/ProfileMenuController.java | 38 ++++++++++++++++++- .../com/jadventure/game/menus/MainMenu.java | 3 +- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/jadventure/game/ProfileMenuController.java b/src/main/java/com/jadventure/game/ProfileMenuController.java index a1fde02d..3f6541af 100644 --- a/src/main/java/com/jadventure/game/ProfileMenuController.java +++ b/src/main/java/com/jadventure/game/ProfileMenuController.java @@ -1,14 +1,19 @@ package com.jadventure.game; +import java.io.File; import java.util.List; +import java.util.Optional; import com.jadventure.game.entities.Player; import com.jadventure.game.menus.MainMenu; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.geometry.Pos; +import javafx.scene.control.Alert; import javafx.scene.control.Button; +import javafx.scene.control.ButtonType; import javafx.scene.control.MenuItem; +import javafx.scene.control.Alert.AlertType; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; @@ -80,9 +85,10 @@ public void loadProfiles() { public void handle(MouseEvent e) { ImageView img = (ImageView) e.getSource(); int profileIndex = GridPane.getRowIndex(img); - Text profName = (Text) profileGrid.getChildren().get(profileIndex * 3); + Text profileNameT = (Text) profileGrid.getChildren().get(profileIndex * 3); + String profileName = profileNameT.getText(); Player player = null; - player = Player.load(profName.getText()); + player = Player.load(profileName); try { new Game(player, "old"); } catch (DeathException e1) { @@ -93,6 +99,34 @@ public void handle(MouseEvent e) { profileGrid.add(load, 1, i); ImageView del = new ImageView(new Image("/com/jadventure/game/images/delete.png")); + del.setOnMouseClicked(new EventHandler() { + @Override + public void handle(MouseEvent e) { + ImageView img = (ImageView) e.getSource(); + int profileIndex = GridPane.getRowIndex(img); + Text profileNameT = (Text) profileGrid.getChildren().get(profileIndex * 3); + String profileName = profileNameT.getText(); + + ButtonType yes = new ButtonType("Yes"); + ButtonType cancel = new ButtonType("Cancel"); + Alert alert = new Alert(AlertType.CONFIRMATION, + "", + yes, cancel); + alert.initOwner(jAdventure.getPrimaryStage()); + alert.setTitle("Delete profile"); + alert.setHeaderText("Are you sure you want to delete " + profileName + "?"); + alert.setContentText("The profile will be deleted permanently."); + alert.setGraphic(null); + Optional clicked = alert.showAndWait(); + String selection = clicked.get().getText(); + if (selection.equals("Yes")) { + File profile = new File("json/profiles/" + profileName); + boolean deleted = MainMenu.deleteDirectory(profile); + System.out.println(deleted); + } + jAdventure.loadProfileMenu(); + } + }); profileGrid.add(del, 2, i); } diff --git a/src/main/java/com/jadventure/game/menus/MainMenu.java b/src/main/java/com/jadventure/game/menus/MainMenu.java index dea23f05..1699b05a 100644 --- a/src/main/java/com/jadventure/game/menus/MainMenu.java +++ b/src/main/java/com/jadventure/game/menus/MainMenu.java @@ -150,7 +150,8 @@ private static void deleteProfileFromMenu() { } } - private static boolean deleteDirectory(File directory) { + public static boolean deleteDirectory(File directory) { + System.out.println(directory); if(directory.exists()){ File[] files = directory.listFiles(); for (File file : files) { From 46a084b1e62bd12474408a8f2ccb646a7f1f458d Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 4 May 2019 19:16:03 +0300 Subject: [PATCH 10/35] Add new game, class selector scene + removed unused FXML components from controllers --- .../java/com/jadventure/game/JAdventure.java | 24 +++- .../jadventure/game/MainMenuController.java | 19 +-- .../jadventure/game/NewClassController.java | 64 ++++++++++ .../game/ProfileMenuController.java | 7 -- .../com/jadventure/game/images/Rat_Idle.gif | Bin 0 -> 1305 bytes .../game/images/hero_idle-l_300.gif | Bin 0 -> 7626 bytes .../com/jadventure/game/view/MainMenu.fxml | 13 +- .../com/jadventure/game/view/NewClass.fxml | 118 ++++++++++++++++++ .../com/jadventure/game/view/ProfileMenu.fxml | 6 +- 9 files changed, 216 insertions(+), 35 deletions(-) create mode 100644 src/main/java/com/jadventure/game/NewClassController.java create mode 100755 src/main/resources/com/jadventure/game/images/Rat_Idle.gif create mode 100644 src/main/resources/com/jadventure/game/images/hero_idle-l_300.gif create mode 100644 src/main/resources/com/jadventure/game/view/NewClass.fxml diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index f775679a..cb2a45e5 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -130,7 +130,7 @@ private static String toString(String[] args) { public void loadMainMenu() { try { FXMLLoader loader = new FXMLLoader(); - loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/MainMenu.fxml")); // TODO Change class name accordingly + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/MainMenu.fxml")); root = (BorderPane) loader.load(); Scene scene = new Scene(root); primaryStage.setScene(scene); @@ -145,12 +145,11 @@ public void loadMainMenu() { /** * Shows ProfileMenu scene - * @throws DeathException */ public void loadProfileMenu() { try { FXMLLoader loader = new FXMLLoader(); - loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/ProfileMenu.fxml")); // TODO Change class name accordingly + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/ProfileMenu.fxml")); root = (BorderPane) loader.load(); Scene scene = new Scene(root); primaryStage.setScene(scene); @@ -163,6 +162,25 @@ public void loadProfileMenu() { } } + /** + * Shows NewClass scene + */ + public void loadNewClass() { + try { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/NewClass.fxml")); + root = (BorderPane) loader.load(); + Scene scene = new Scene(root); + primaryStage.setScene(scene); + setStageSize(); + primaryStage.show(); + NewClassController controller = loader.getController(); + controller.setMainApp(this); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void close(WindowEvent e) { e.consume(); ButtonType save = new ButtonType("Save"); diff --git a/src/main/java/com/jadventure/game/MainMenuController.java b/src/main/java/com/jadventure/game/MainMenuController.java index 0916dd7e..0287a47f 100644 --- a/src/main/java/com/jadventure/game/MainMenuController.java +++ b/src/main/java/com/jadventure/game/MainMenuController.java @@ -1,6 +1,5 @@ package com.jadventure.game; -import com.jadventure.game.menus.ChooseClassMenu; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; @@ -14,10 +13,6 @@ public class MainMenuController { public MainMenuController() { } - @FXML - private MenuItem save; - @FXML - private MenuItem back; @FXML private MenuItem close; @FXML @@ -31,7 +26,7 @@ public MainMenuController() { @FXML public void startGame() throws DeathException { - new ChooseClassMenu(); + jAdventure.loadNewClass(); } @FXML @@ -39,19 +34,9 @@ public void loadProfile() { jAdventure.loadProfileMenu(); } - @FXML - public void saveGame() { - // Does nothing - } - - @FXML - public void goToMainMenu() { - // Does nothing - } - @FXML public void goToGithub() { - + // Goes to https://github.com/Progether/JAdventure } @FXML diff --git a/src/main/java/com/jadventure/game/NewClassController.java b/src/main/java/com/jadventure/game/NewClassController.java new file mode 100644 index 00000000..72d66740 --- /dev/null +++ b/src/main/java/com/jadventure/game/NewClassController.java @@ -0,0 +1,64 @@ +package com.jadventure.game; + +import com.jadventure.game.entities.Player; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.MenuItem; +import javafx.stage.WindowEvent; + +public class NewClassController { + // Reference to the main application. + private JAdventure jAdventure; + + public NewClassController() { + } + + @FXML + private MenuItem back; + @FXML + private MenuItem close; + @FXML + private MenuItem github; + @FXML + private Button recruit; + @FXML + private Button sewerRat; + + @FXML + public void newRecruit() throws DeathException { + Player player = Player.getInstance("recruit"); + new Game(player, "new"); + } + + @FXML + public void newSewerRat() throws DeathException { + Player player = Player.getInstance("sewerrat"); + new Game(player, "new"); + } + + @FXML + public void goToMainMenu() { + jAdventure.loadMainMenu(); + } + + @FXML + public void goToGithub() { + // Goes to https://github.com/Progether/JAdventure + } + + @FXML + public void quitGame() throws Exception { + jAdventure.getPrimaryStage().fireEvent( + new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); + } + + /** + * Is called by the main application to give a reference back to itself. + * + * @param jAdventure + */ + public void setMainApp(JAdventure jAdventure) { + this.jAdventure = jAdventure; + // TODO init + } +} diff --git a/src/main/java/com/jadventure/game/ProfileMenuController.java b/src/main/java/com/jadventure/game/ProfileMenuController.java index 3f6541af..612a22c6 100644 --- a/src/main/java/com/jadventure/game/ProfileMenuController.java +++ b/src/main/java/com/jadventure/game/ProfileMenuController.java @@ -33,8 +33,6 @@ public class ProfileMenuController { public ProfileMenuController() { } - @FXML - private MenuItem save; @FXML private MenuItem back; @FXML @@ -48,11 +46,6 @@ public ProfileMenuController() { @FXML private Button menu; - @FXML - public void saveGame() { - // Does nothing - } - @FXML public void goToMainMenu() { jAdventure.loadMainMenu(); diff --git a/src/main/resources/com/jadventure/game/images/Rat_Idle.gif b/src/main/resources/com/jadventure/game/images/Rat_Idle.gif new file mode 100755 index 0000000000000000000000000000000000000000..bc8fd0609ee81f266bb2033abe344b12a66578d1 GIT binary patch literal 1305 zcmZ?wbhEHbG++>6IKv;SCCHSSBD zb;qmJaeL4YcA4$PU9+P!r_U_bWVTK;R@JMQSIuQMZOX~3%9mAT?dh4C*OeRFK1p)I z0!{A1>5DvOh;b6@xG9fAm{I@-KeY-Ht5NL84>ZR^un;fnDmBX$>NYd`d` z$vgaX<&6cNDk~y06jckEZK~6qk`jRKYHjUvYA#G@=$7i7X~>;5VK%!p^K>Ds?rJ63 zUCmE>TvB{A1$d|WCv%JKIOVV}$9uQ#dZ&GpHoBDvh8+rwIJ55H{<*0+7jl+Irpq%i z*Ay_@)TB8jR#aBAwohcrXB%rgbCx~vn!Wx%usiq1qXJ%%Ox zGSY1g%)k`4rP+b)fFy_8;q~pzT{+Gvmv&4s4P1~EJS%4_1LIpAZsTpc?tL-%qOE%R zxLA&d%-?es;ze=K6C{n8&C+spvgLABOPFn&vRulOJD5Oe&84d(xowi{gbCca(~Y=n znCD>+w>B)UqhVr`>9b{KoiY`Y+T_aSbK6fduAfePJ{Yh}%7|8iV2xGMN|4ak**114 cC5X=QqORK(y2O+q<&~<_7nv~61Ex7^0OpwB3jhEB literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/images/hero_idle-l_300.gif b/src/main/resources/com/jadventure/game/images/hero_idle-l_300.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad18243ae6d9151b82ca86e009100f88cbc98e30 GIT binary patch literal 7626 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/view/MainMenu.fxml b/src/main/resources/com/jadventure/game/view/MainMenu.fxml index 640dacbc..51a81f73 100644 --- a/src/main/resources/com/jadventure/game/view/MainMenu.fxml +++ b/src/main/resources/com/jadventure/game/view/MainMenu.fxml @@ -18,8 +18,8 @@ - - + + @@ -44,7 +44,7 @@ - + @@ -58,10 +58,13 @@ - + diff --git a/src/main/resources/com/jadventure/game/view/NewClass.fxml b/src/main/resources/com/jadventure/game/view/NewClass.fxml new file mode 100644 index 00000000..cbcfccd6 --- /dev/null +++ b/src/main/resources/com/jadventure/game/view/NewClass.fxml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
diff --git a/src/main/resources/com/jadventure/game/view/ProfileMenu.fxml b/src/main/resources/com/jadventure/game/view/ProfileMenu.fxml index 559985e0..09dfbf99 100644 --- a/src/main/resources/com/jadventure/game/view/ProfileMenu.fxml +++ b/src/main/resources/com/jadventure/game/view/ProfileMenu.fxml @@ -19,7 +19,7 @@ - + @@ -42,9 +42,9 @@ - + - + From b930419feae8415437e8adfe22a48959527deb16 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 4 May 2019 19:50:45 +0300 Subject: [PATCH 11/35] Remove unused methods and classes --- .../game/menus/ChooseClassMenu.java | 40 ------ .../com/jadventure/game/menus/MainMenu.java | 130 ------------------ 2 files changed, 170 deletions(-) delete mode 100644 src/main/java/com/jadventure/game/menus/ChooseClassMenu.java diff --git a/src/main/java/com/jadventure/game/menus/ChooseClassMenu.java b/src/main/java/com/jadventure/game/menus/ChooseClassMenu.java deleted file mode 100644 index 20825b8c..00000000 --- a/src/main/java/com/jadventure/game/menus/ChooseClassMenu.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.jadventure.game.menus; - -import com.jadventure.game.entities.Player; -import com.jadventure.game.DeathException; -import com.jadventure.game.Game; -import com.jadventure.game.QueueProvider; - -/** - * Called when creating a new Player - */ -public class ChooseClassMenu extends Menus { - - public ChooseClassMenu() throws DeathException { - this.menuItems.add(new MenuItem("Recruit", "A soldier newly enlisted to guard the city of Silliya")); - this.menuItems.add(new MenuItem("SewerRat", "A member of the underground of Silliya")); - - while(true) { - QueueProvider.offer("Choose a class to get started with:"); - MenuItem selectedItem = displayMenu(this.menuItems); - if(testOption(selectedItem)) { - break; - } - } - } - - private static boolean testOption(MenuItem m) throws DeathException { - String key = m.getKey(); - if(key.equals("recruit")) { - Player player = Player.getInstance("recruit"); - new Game(player, "new"); - return true; - } else if(key.equals("sewerrat")) { - Player player = Player.getInstance("sewerrat"); - new Game(player, "new"); - return true; - } else { - return false; - } - } -} diff --git a/src/main/java/com/jadventure/game/menus/MainMenu.java b/src/main/java/com/jadventure/game/menus/MainMenu.java index 1699b05a..c2685b2c 100644 --- a/src/main/java/com/jadventure/game/menus/MainMenu.java +++ b/src/main/java/com/jadventure/game/menus/MainMenu.java @@ -4,12 +4,9 @@ import java.net.Socket; import java.util.ArrayList; import java.util.List; -import com.jadventure.game.DeathException; -import com.jadventure.game.Game; import com.jadventure.game.GameModeType; import com.jadventure.game.JAdventure; import com.jadventure.game.QueueProvider; -import com.jadventure.game.entities.Player; /** * The first menu displayed on user screen @@ -38,118 +35,6 @@ public void start() { jAdventure.loadMainMenu(); } - public void start_old() { - menuItems.add(new MenuItem("Start", "Starts a new Game", "new")); - menuItems.add(new MenuItem("Load", "Loads an existing Game")); - menuItems.add(new MenuItem("Delete", "Deletes an existing Game")); - menuItems.add(new MenuItem("Exit", null, "quit")); - - boolean continuing = true; - do { - MenuItem selectedItem = displayMenu(menuItems); - try { - continuing = testOption_old(selectedItem); - } catch (DeathException e) { - if (e.getLocalisedMessage().equals("close")) { - continuing = false; - } - } - } while(continuing); - QueueProvider.offer("EXIT"); - } - - public static boolean testOption(String option) throws DeathException { - switch (option) { - case "start": - new ChooseClassMenu(); - break; - case "load": - loadProfileFromMenu(); - break; - case "delete": - deleteProfileFromMenu(); - break; - case "exit": - QueueProvider.offer("Goodbye!"); - return false; - } - return true; - } - - private static boolean testOption_old(MenuItem m) throws DeathException { - String key = m.getKey(); - switch (key){ - case "start": - new ChooseClassMenu(); - break; - case "load": - loadProfileFromMenu(); - break; - case "delete": - deleteProfileFromMenu(); - break; - case "exit": - QueueProvider.offer("Goodbye!"); - return false; - } - return true; - } - - private static void loadProfileFromMenu() throws DeathException { - String key; - if (isProfileDirEmpty()) { - QueueProvider.offer("\nThere are no profiles to load. Please start a new game instead."); - return; - } - Player player = null; - do { - listProfiles_old(); - QueueProvider.offer("\nSelect a profile to load. Type 'back' to go back."); - key = QueueProvider.take(); - if (key.equals("exit") || key.equals("back")) { - return; - } else if (Player.profileExists(key)) { - player = Player.load(key); - } else { - QueueProvider.offer("That user doesn't exist. Try again."); - } - } while (player == null); - new Game(player, "old"); - } - - private static void deleteProfileFromMenu() { - String key; - while (true) { - if (isProfileDirEmpty()) { - QueueProvider.offer("\nThere are no profiles to delete."); - return; - } - listProfiles_old(); - QueueProvider.offer("\nWhich profile do you want to delete? Type 'back' to go back."); - key = QueueProvider.take(); - if ((key.equals("exit") || key.equals("back"))) { - return; - } - if (Player.profileExists(key)) { - String profileName = key; - QueueProvider.offer("Are you sure you want to delete " + profileName + "? y/n"); - key = QueueProvider.take(); - if ((key.equals("exit") || key.equals("back"))) { - return; - } else if (key.equals("y")) { - File profile = new File("json/profiles/" + profileName); - deleteDirectory(profile); - QueueProvider.offer(profileName + " has been deleted."); - return; - } else { - QueueProvider.offer(profileName + " will NOT be deleted."); - } - } else { - QueueProvider.offer("That user doesn't exist. Try again."); - } - } - } - public static boolean deleteDirectory(File directory) { System.out.println(directory); if(directory.exists()){ @@ -188,19 +73,4 @@ public static List listProfiles() { return profiles; } } - - private static void listProfiles_old() { - if (isProfileDirEmpty()) { - QueueProvider.offer("No profiles found."); - return; - } - File file = new File("json/profiles"); - String[] profiles = file.list(); - QueueProvider.offer("Profiles:"); - for (String name : profiles) { - if (new File("json/profiles/" + name).isDirectory()) { - QueueProvider.offer(" " + name); - } - } - } } From b4f6dbbebe574e9a2d1cb64f35afdcdd08d40bf1 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 4 May 2019 19:52:03 +0300 Subject: [PATCH 12/35] Load character name - no implementation --- .../game/CharacterNameController.java | 52 +++++++++++++++++++ src/main/java/com/jadventure/game/Game.java | 47 +++++++++++------ .../java/com/jadventure/game/JAdventure.java | 22 ++++++++ .../jadventure/game/NewClassController.java | 4 +- .../game/ProfileMenuController.java | 2 +- .../jadventure/game/view/CharacterName.fxml | 46 ++++++++++++++++ 6 files changed, 153 insertions(+), 20 deletions(-) create mode 100644 src/main/java/com/jadventure/game/CharacterNameController.java create mode 100644 src/main/resources/com/jadventure/game/view/CharacterName.fxml diff --git a/src/main/java/com/jadventure/game/CharacterNameController.java b/src/main/java/com/jadventure/game/CharacterNameController.java new file mode 100644 index 00000000..c3a297f5 --- /dev/null +++ b/src/main/java/com/jadventure/game/CharacterNameController.java @@ -0,0 +1,52 @@ +package com.jadventure.game; + +import com.jadventure.game.entities.Player; +import javafx.fxml.FXML; +import javafx.scene.control.MenuItem; +import javafx.stage.WindowEvent; + +public class CharacterNameController { + // Reference to the main application. + private JAdventure jAdventure; + private Player player; + + public CharacterNameController() { + } + + @FXML + private MenuItem back; + @FXML + private MenuItem close; + @FXML + private MenuItem github; + + @FXML + public void goToMainMenu() { + jAdventure.loadMainMenu(); + } + + @FXML + public void goToGithub() { + // Goes to https://github.com/Progether/JAdventure + } + + @FXML + public void quitGame() throws Exception { + jAdventure.getPrimaryStage().fireEvent( + new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); + } + + /** + * Is called by the main application to give a reference back to itself. + * + * @param jAdventure + */ + public void setMainApp(JAdventure jAdventure) { + this.jAdventure = jAdventure; + // TODO init + } + + public void setPlayer(Player player) { + this.player = player; + } +} diff --git a/src/main/java/com/jadventure/game/Game.java b/src/main/java/com/jadventure/game/Game.java index 27e91685..aa486066 100644 --- a/src/main/java/com/jadventure/game/Game.java +++ b/src/main/java/com/jadventure/game/Game.java @@ -19,23 +19,25 @@ public class Game { public Monster monster; Player player = null; - public Game(Player player, String playerType) throws DeathException { - this.parser = new CommandParser(player); - this.player = player; - switch (playerType) { - case "new": - newGameStart(player); - break; - case "old": - QueueProvider.offer("Welcome back, " + player.getName() + "!"); - QueueProvider.offer(""); - player.getLocation().print(); - gamePrompt(player); - break; - default: - QueueProvider.offer("Invalid player type"); - break; - } + public Game(Player player, String playerType, JAdventure jAdventure) throws DeathException { + + this.parser = new CommandParser(player); + this.player = player; + switch (playerType) { + case "new": + jAdventure.loadCharacterName(player); + //newGameStart(player); + break; + case "old": + QueueProvider.offer("Welcome back, " + player.getName() + "!"); + QueueProvider.offer(""); + player.getLocation().print(); + gamePrompt(player); + break; + default: + QueueProvider.offer("Invalid player type"); + break; + } } /** @@ -44,6 +46,17 @@ public Game(Player player, String playerType) throws DeathException { * character and welcomes him / her. After that, it goes to the normal game prompt. */ public void newGameStart(Player player) throws DeathException { + + //player.setName(userInput); + LocationRepository locationRepo = GameBeans.getLocationRepository(player.getName()); + this.player.setLocation(locationRepo.getInitialLocation()); + player.save(); + QueueProvider.offer("Welcome to Silliya, " + player.getName() + "."); + player.getLocation().print(); + gamePrompt(player); + } + + public void newGameStart_old(Player player) throws DeathException { QueueProvider.offer(player.getIntro()); String userInput = QueueProvider.take(); player.setName(userInput); diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index cb2a45e5..b6d47597 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -7,6 +7,7 @@ import java.util.Optional; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.jadventure.game.entities.Player; import com.jadventure.game.menus.MainMenu; import javafx.application.Application; import javafx.application.Platform; @@ -181,6 +182,27 @@ public void loadNewClass() { } } + /** + * Shows CharacterName scene + * @param player + */ + public void loadCharacterName(Player player) { + try { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/CharacterName.fxml")); + root = (BorderPane) loader.load(); + Scene scene = new Scene(root); + primaryStage.setScene(scene); + setStageSize(); + primaryStage.show(); + CharacterNameController controller = loader.getController(); + controller.setMainApp(this); + controller.setPlayer(player); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void close(WindowEvent e) { e.consume(); ButtonType save = new ButtonType("Save"); diff --git a/src/main/java/com/jadventure/game/NewClassController.java b/src/main/java/com/jadventure/game/NewClassController.java index 72d66740..1bfd8d92 100644 --- a/src/main/java/com/jadventure/game/NewClassController.java +++ b/src/main/java/com/jadventure/game/NewClassController.java @@ -27,13 +27,13 @@ public NewClassController() { @FXML public void newRecruit() throws DeathException { Player player = Player.getInstance("recruit"); - new Game(player, "new"); + new Game(player, "new", jAdventure); } @FXML public void newSewerRat() throws DeathException { Player player = Player.getInstance("sewerrat"); - new Game(player, "new"); + new Game(player, "new", jAdventure); } @FXML diff --git a/src/main/java/com/jadventure/game/ProfileMenuController.java b/src/main/java/com/jadventure/game/ProfileMenuController.java index 612a22c6..93fbe8cf 100644 --- a/src/main/java/com/jadventure/game/ProfileMenuController.java +++ b/src/main/java/com/jadventure/game/ProfileMenuController.java @@ -83,7 +83,7 @@ public void handle(MouseEvent e) { Player player = null; player = Player.load(profileName); try { - new Game(player, "old"); + new Game(player, "old", jAdventure); } catch (DeathException e1) { e1.printStackTrace(); } diff --git a/src/main/resources/com/jadventure/game/view/CharacterName.fxml b/src/main/resources/com/jadventure/game/view/CharacterName.fxml new file mode 100644 index 00000000..e111aad7 --- /dev/null +++ b/src/main/resources/com/jadventure/game/view/CharacterName.fxml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + +
+
From 80ee17bb686d398f2667e1085734f0d25ba0f07b Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Mon, 6 May 2019 14:12:34 +0300 Subject: [PATCH 13/35] Complete character creation + first save (profile loading works properly) --- .../game/CharacterNameController.java | 26 ++++++++++++++++++- src/main/java/com/jadventure/game/Game.java | 10 +++---- .../java/com/jadventure/game/JAdventure.java | 4 ++- .../jadventure/game/MainMenuController.java | 1 - .../jadventure/game/NewClassController.java | 1 - .../jadventure/game/view/CharacterName.fxml | 25 ++++++++++++++++-- 6 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/jadventure/game/CharacterNameController.java b/src/main/java/com/jadventure/game/CharacterNameController.java index c3a297f5..bace1086 100644 --- a/src/main/java/com/jadventure/game/CharacterNameController.java +++ b/src/main/java/com/jadventure/game/CharacterNameController.java @@ -2,13 +2,17 @@ import com.jadventure.game.entities.Player; import javafx.fxml.FXML; +import javafx.scene.control.Button; import javafx.scene.control.MenuItem; +import javafx.scene.control.TextField; +import javafx.scene.text.Text; import javafx.stage.WindowEvent; public class CharacterNameController { // Reference to the main application. private JAdventure jAdventure; private Player player; + private Game game; public CharacterNameController() { } @@ -19,6 +23,18 @@ public CharacterNameController() { private MenuItem close; @FXML private MenuItem github; + @FXML + private Text intro; + @FXML + private TextField name; + @FXML + private Button create; + + @FXML + public void createCharacter() throws DeathException { + player.setName(name.getText()); + game.newGameStart(player); + } @FXML public void goToMainMenu() { @@ -36,6 +52,10 @@ public void quitGame() throws Exception { new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); } + public void showIntro() { + intro.setText(player.getIntro()); + } + /** * Is called by the main application to give a reference back to itself. * @@ -43,10 +63,14 @@ public void quitGame() throws Exception { */ public void setMainApp(JAdventure jAdventure) { this.jAdventure = jAdventure; - // TODO init } public void setPlayer(Player player) { this.player = player; + showIntro(); + } + + public void setGame(Game game) { + this.game = game; } } diff --git a/src/main/java/com/jadventure/game/Game.java b/src/main/java/com/jadventure/game/Game.java index aa486066..ebef3427 100644 --- a/src/main/java/com/jadventure/game/Game.java +++ b/src/main/java/com/jadventure/game/Game.java @@ -25,7 +25,7 @@ public Game(Player player, String playerType, JAdventure jAdventure) throws Deat this.player = player; switch (playerType) { case "new": - jAdventure.loadCharacterName(player); + jAdventure.loadCharacterName(player, this); //newGameStart(player); break; case "old": @@ -46,14 +46,12 @@ public Game(Player player, String playerType, JAdventure jAdventure) throws Deat * character and welcomes him / her. After that, it goes to the normal game prompt. */ public void newGameStart(Player player) throws DeathException { - - //player.setName(userInput); LocationRepository locationRepo = GameBeans.getLocationRepository(player.getName()); this.player.setLocation(locationRepo.getInitialLocation()); player.save(); - QueueProvider.offer("Welcome to Silliya, " + player.getName() + "."); - player.getLocation().print(); - gamePrompt(player); + //QueueProvider.offer("Welcome to Silliya, " + player.getName() + "."); + //player.getLocation().print(); + //gamePrompt(player); } public void newGameStart_old(Player player) throws DeathException { diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index b6d47597..95634fde 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -185,8 +185,9 @@ public void loadNewClass() { /** * Shows CharacterName scene * @param player + * @param game */ - public void loadCharacterName(Player player) { + public void loadCharacterName(Player player, Game game) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/CharacterName.fxml")); @@ -198,6 +199,7 @@ public void loadCharacterName(Player player) { CharacterNameController controller = loader.getController(); controller.setMainApp(this); controller.setPlayer(player); + controller.setGame(game); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/jadventure/game/MainMenuController.java b/src/main/java/com/jadventure/game/MainMenuController.java index 0287a47f..8b8bbfe8 100644 --- a/src/main/java/com/jadventure/game/MainMenuController.java +++ b/src/main/java/com/jadventure/game/MainMenuController.java @@ -52,6 +52,5 @@ public void quitGame() throws Exception { */ public void setMainApp(JAdventure jAdventure) { this.jAdventure = jAdventure; - // TODO init } } diff --git a/src/main/java/com/jadventure/game/NewClassController.java b/src/main/java/com/jadventure/game/NewClassController.java index 1bfd8d92..1af90b30 100644 --- a/src/main/java/com/jadventure/game/NewClassController.java +++ b/src/main/java/com/jadventure/game/NewClassController.java @@ -59,6 +59,5 @@ public void quitGame() throws Exception { */ public void setMainApp(JAdventure jAdventure) { this.jAdventure = jAdventure; - // TODO init } } diff --git a/src/main/resources/com/jadventure/game/view/CharacterName.fxml b/src/main/resources/com/jadventure/game/view/CharacterName.fxml index e111aad7..c091b931 100644 --- a/src/main/resources/com/jadventure/game/view/CharacterName.fxml +++ b/src/main/resources/com/jadventure/game/view/CharacterName.fxml @@ -1,15 +1,19 @@ + + + + - + @@ -39,7 +43,24 @@ - + + + + + + + + + + + + + +
From 50750557c762f7fde492ad07490faa67c7e35270 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 10 May 2019 01:35:43 +0300 Subject: [PATCH 14/35] Add working welcome scene --- .../game/CharacterNameController.java | 4 +- .../java/com/jadventure/game/JAdventure.java | 42 +++++++++++ .../jadventure/game/NewClassController.java | 3 +- .../jadventure/game/WelcomeController.java | 73 +++++++++++++++++++ .../com/jadventure/game/view/Welcome.fxml | 60 +++++++++++++++ 5 files changed, 180 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/jadventure/game/WelcomeController.java create mode 100644 src/main/resources/com/jadventure/game/view/Welcome.fxml diff --git a/src/main/java/com/jadventure/game/CharacterNameController.java b/src/main/java/com/jadventure/game/CharacterNameController.java index bace1086..1f10197f 100644 --- a/src/main/java/com/jadventure/game/CharacterNameController.java +++ b/src/main/java/com/jadventure/game/CharacterNameController.java @@ -9,7 +9,8 @@ import javafx.stage.WindowEvent; public class CharacterNameController { - // Reference to the main application. + + // Reference to the main application. private JAdventure jAdventure; private Player player; private Game game; @@ -34,6 +35,7 @@ public CharacterNameController() { public void createCharacter() throws DeathException { player.setName(name.getText()); game.newGameStart(player); + jAdventure.loadWelcome(player, game); } @FXML diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 95634fde..527ba0ed 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -205,6 +205,48 @@ public void loadCharacterName(Player player, Game game) { } } + /** + * Shows Welcome scene + * @param player + * @param game + */ + public void loadWelcome(Player player, Game game) { + try { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/Welcome.fxml")); + root = (BorderPane) loader.load(); + Scene scene = new Scene(root); + primaryStage.setScene(scene); + setStageSize(); + primaryStage.show(); + WelcomeController controller = loader.getController(); + controller.setMainApp(this); + controller.setPlayer(player); + controller.setGame(game); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Shows Game scene + */ + public void loadGame() { + try { + FXMLLoader loader = new FXMLLoader(); + loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/Game.fxml")); + root = (BorderPane) loader.load(); + Scene scene = new Scene(root); + primaryStage.setScene(scene); + setStageSize(); + primaryStage.show(); + CharacterNameController controller = loader.getController(); + controller.setMainApp(this); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void close(WindowEvent e) { e.consume(); ButtonType save = new ButtonType("Save"); diff --git a/src/main/java/com/jadventure/game/NewClassController.java b/src/main/java/com/jadventure/game/NewClassController.java index 1af90b30..9b2361e3 100644 --- a/src/main/java/com/jadventure/game/NewClassController.java +++ b/src/main/java/com/jadventure/game/NewClassController.java @@ -7,7 +7,8 @@ import javafx.stage.WindowEvent; public class NewClassController { - // Reference to the main application. + + // Reference to the main application. private JAdventure jAdventure; public NewClassController() { diff --git a/src/main/java/com/jadventure/game/WelcomeController.java b/src/main/java/com/jadventure/game/WelcomeController.java new file mode 100644 index 00000000..93bbd489 --- /dev/null +++ b/src/main/java/com/jadventure/game/WelcomeController.java @@ -0,0 +1,73 @@ +package com.jadventure.game; + +import com.jadventure.game.entities.Player; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.MenuItem; +import javafx.scene.text.Text; +import javafx.stage.WindowEvent; + +public class WelcomeController { + + // Reference to the main application. + private JAdventure jAdventure; + private Player player; + private Game game; + + public WelcomeController() { + } + + @FXML + private MenuItem back; + @FXML + private MenuItem close; + @FXML + private MenuItem github; + @FXML + private Text welcome; + @FXML + private Button cont; + + @FXML + public void play() { + jAdventure.loadGame(); + } + + @FXML + public void goToMainMenu() { + jAdventure.loadMainMenu(); + } + + @FXML + public void goToGithub() { + // Goes to https://github.com/Progether/JAdventure + } + + @FXML + public void quitGame() throws Exception { + jAdventure.getPrimaryStage().fireEvent( + new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); + } + + public void showIntro() { + welcome.setText("Welcome to Silliya," + player.getName() + "!"); + } + + /** + * Is called by the main application to give a reference back to itself. + * + * @param jAdventure + */ + public void setMainApp(JAdventure jAdventure) { + this.jAdventure = jAdventure; + } + + public void setPlayer(Player player) { + this.player = player; + showIntro(); + } + + public void setGame(Game game) { + this.game = game; + } +} diff --git a/src/main/resources/com/jadventure/game/view/Welcome.fxml b/src/main/resources/com/jadventure/game/view/Welcome.fxml new file mode 100644 index 00000000..2006738c --- /dev/null +++ b/src/main/resources/com/jadventure/game/view/Welcome.fxml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
+
From daacd92151364f8e56018a17f968e5f2206fda62 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 10 May 2019 14:40:14 +0300 Subject: [PATCH 15/35] Add welcome funcionality when loading profile --- .../game/CharacterNameController.java | 2 +- src/main/java/com/jadventure/game/Game.java | 8 +++----- .../java/com/jadventure/game/JAdventure.java | 8 +++++--- .../com/jadventure/game/WelcomeController.java | 18 +++++++++++------- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/jadventure/game/CharacterNameController.java b/src/main/java/com/jadventure/game/CharacterNameController.java index 1f10197f..783f9824 100644 --- a/src/main/java/com/jadventure/game/CharacterNameController.java +++ b/src/main/java/com/jadventure/game/CharacterNameController.java @@ -35,7 +35,7 @@ public CharacterNameController() { public void createCharacter() throws DeathException { player.setName(name.getText()); game.newGameStart(player); - jAdventure.loadWelcome(player, game); + jAdventure.loadWelcome(player, "new"); } @FXML diff --git a/src/main/java/com/jadventure/game/Game.java b/src/main/java/com/jadventure/game/Game.java index ebef3427..64a6af4d 100644 --- a/src/main/java/com/jadventure/game/Game.java +++ b/src/main/java/com/jadventure/game/Game.java @@ -26,13 +26,11 @@ public Game(Player player, String playerType, JAdventure jAdventure) throws Deat switch (playerType) { case "new": jAdventure.loadCharacterName(player, this); - //newGameStart(player); break; case "old": - QueueProvider.offer("Welcome back, " + player.getName() + "!"); - QueueProvider.offer(""); - player.getLocation().print(); - gamePrompt(player); + jAdventure.loadWelcome(player, "old"); + //player.getLocation().print(); + //gamePrompt(player); break; default: QueueProvider.offer("Invalid player type"); diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 527ba0ed..f978b7a2 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -208,9 +208,10 @@ public void loadCharacterName(Player player, Game game) { /** * Shows Welcome scene * @param player + * @param type * @param game */ - public void loadWelcome(Player player, Game game) { + public void loadWelcome(Player player, String type) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/Welcome.fxml")); @@ -222,7 +223,7 @@ public void loadWelcome(Player player, Game game) { WelcomeController controller = loader.getController(); controller.setMainApp(this); controller.setPlayer(player); - controller.setGame(game); + controller.setType(type); } catch (IOException e) { e.printStackTrace(); } @@ -231,7 +232,7 @@ public void loadWelcome(Player player, Game game) { /** * Shows Game scene */ - public void loadGame() { + public void loadGame(Player player) { try { FXMLLoader loader = new FXMLLoader(); loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/Game.fxml")); @@ -242,6 +243,7 @@ public void loadGame() { primaryStage.show(); CharacterNameController controller = loader.getController(); controller.setMainApp(this); + controller.setPlayer(player); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/com/jadventure/game/WelcomeController.java b/src/main/java/com/jadventure/game/WelcomeController.java index 93bbd489..fa5f3439 100644 --- a/src/main/java/com/jadventure/game/WelcomeController.java +++ b/src/main/java/com/jadventure/game/WelcomeController.java @@ -12,7 +12,7 @@ public class WelcomeController { // Reference to the main application. private JAdventure jAdventure; private Player player; - private Game game; + private String type; public WelcomeController() { } @@ -30,7 +30,7 @@ public WelcomeController() { @FXML public void play() { - jAdventure.loadGame(); + jAdventure.loadGame(player); } @FXML @@ -49,8 +49,12 @@ public void quitGame() throws Exception { new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); } - public void showIntro() { - welcome.setText("Welcome to Silliya," + player.getName() + "!"); + public void showWelcome() { + if (type.equals("new")) { + welcome.setText("Welcome to Silliya, " + player.getName() + "!"); + } else if (type.equals("old")) { + welcome.setText("Welcome back, " + player.getName() + "!"); + } } /** @@ -64,10 +68,10 @@ public void setMainApp(JAdventure jAdventure) { public void setPlayer(Player player) { this.player = player; - showIntro(); + showWelcome(); } - public void setGame(Game game) { - this.game = game; + public void setType(String type) { + this.type = type; } } From 4389e6ab650c612799fa1041e596a7b37dcda13b Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 10 May 2019 15:59:01 +0300 Subject: [PATCH 16/35] Add empty Game scene with working save function --- .../com/jadventure/game/GameController.java | 59 +++++++++++++++++++ .../java/com/jadventure/game/JAdventure.java | 2 +- .../jadventure/game/WelcomeController.java | 2 +- .../com/jadventure/game/view/Game.fxml | 27 +++++++++ 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/jadventure/game/GameController.java create mode 100644 src/main/resources/com/jadventure/game/view/Game.fxml diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java new file mode 100644 index 00000000..7e16e1cd --- /dev/null +++ b/src/main/java/com/jadventure/game/GameController.java @@ -0,0 +1,59 @@ +package com.jadventure.game; + +import com.jadventure.game.entities.Player; +import javafx.fxml.FXML; +import javafx.scene.control.MenuItem; +import javafx.stage.WindowEvent; + +public class GameController { + + // Reference to the main application. + private JAdventure jAdventure; + private Player player; + + public GameController() { + } + + @FXML + private MenuItem save; + @FXML + private MenuItem back; + @FXML + private MenuItem close; + @FXML + private MenuItem github; + + @FXML + public void saveGame() { + player.save(); + } + + @FXML + public void goToMainMenu() { + jAdventure.loadMainMenu(); + } + + @FXML + public void goToGithub() { + // Goes to https://github.com/Progether/JAdventure + } + + @FXML + public void quitGame() throws Exception { + jAdventure.getPrimaryStage().fireEvent( + new WindowEvent(jAdventure.getPrimaryStage(), WindowEvent.WINDOW_CLOSE_REQUEST)); + } + + /** + * Is called by the main application to give a reference back to itself. + * + * @param jAdventure + */ + public void setMainApp(JAdventure jAdventure) { + this.jAdventure = jAdventure; + } + + public void setPlayer(Player player) { + this.player = player; + } +} diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index f978b7a2..2918d719 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -272,7 +272,7 @@ public void close(WindowEvent e) { ex.printStackTrace(); } } else if (selection.equals("Save")) { - // Save game + // TODO Save game try { Platform.exit(); stop(); diff --git a/src/main/java/com/jadventure/game/WelcomeController.java b/src/main/java/com/jadventure/game/WelcomeController.java index fa5f3439..665d00d4 100644 --- a/src/main/java/com/jadventure/game/WelcomeController.java +++ b/src/main/java/com/jadventure/game/WelcomeController.java @@ -68,10 +68,10 @@ public void setMainApp(JAdventure jAdventure) { public void setPlayer(Player player) { this.player = player; - showWelcome(); } public void setType(String type) { this.type = type; + showWelcome(); } } diff --git a/src/main/resources/com/jadventure/game/view/Game.fxml b/src/main/resources/com/jadventure/game/view/Game.fxml new file mode 100644 index 00000000..975e7b1d --- /dev/null +++ b/src/main/resources/com/jadventure/game/view/Game.fxml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From cff392db3f8c7ad788527ace7233665093f09e15 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Fri, 10 May 2019 17:55:31 +0300 Subject: [PATCH 17/35] Create location descriptor and health bar --- .../com/jadventure/game/GameController.java | 36 ++++++++++- .../java/com/jadventure/game/JAdventure.java | 3 +- .../com/jadventure/game/css/game.css | 4 ++ .../com/jadventure/game/view/Game.fxml | 62 +++++++++++++++++++ 4 files changed, 103 insertions(+), 2 deletions(-) create mode 100644 src/main/resources/com/jadventure/game/css/game.css diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index 7e16e1cd..b9f97168 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -1,8 +1,15 @@ package com.jadventure.game; import com.jadventure.game.entities.Player; +import javafx.beans.binding.DoubleBinding; +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleDoubleProperty; import javafx.fxml.FXML; import javafx.scene.control.MenuItem; +import javafx.scene.control.ProgressBar; +import javafx.scene.paint.Color; +import javafx.scene.shape.Rectangle; +import javafx.scene.text.Text; import javafx.stage.WindowEvent; public class GameController { @@ -22,7 +29,33 @@ public GameController() { private MenuItem close; @FXML private MenuItem github; - + @FXML + private Text locationTitle; + @FXML + private Text locationDesc; + @FXML + private ProgressBar health; + @FXML + private Text hpString; + + public void loadState() { + loadCurrentLocation(); + loadHealthBar(); + } + + public void loadCurrentLocation() { + locationTitle.setText(player.getLocation().getTitle()); + locationDesc.setText(player.getLocation().getDescription()); + } + + public void loadHealthBar() { + int currentHealth = player.getHealth(); + int maxHealth = player.getHealthMax(); + double healthPercentage = (double) currentHealth / (double) maxHealth; + health.setProgress(healthPercentage); + hpString.setText(currentHealth + "/" + maxHealth); + } + @FXML public void saveGame() { player.save(); @@ -55,5 +88,6 @@ public void setMainApp(JAdventure jAdventure) { public void setPlayer(Player player) { this.player = player; + loadState(); } } diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 2918d719..0420cc58 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -238,10 +238,11 @@ public void loadGame(Player player) { loader.setLocation(JAdventure.class.getResource("/com/jadventure/game/view/Game.fxml")); root = (BorderPane) loader.load(); Scene scene = new Scene(root); + scene.getStylesheets().add(getClass().getResource("/com/jadventure/game/css/game.css").toExternalForm()); primaryStage.setScene(scene); setStageSize(); primaryStage.show(); - CharacterNameController controller = loader.getController(); + GameController controller = loader.getController(); controller.setMainApp(this); controller.setPlayer(player); } catch (IOException e) { diff --git a/src/main/resources/com/jadventure/game/css/game.css b/src/main/resources/com/jadventure/game/css/game.css new file mode 100644 index 00000000..14dfa250 --- /dev/null +++ b/src/main/resources/com/jadventure/game/css/game.css @@ -0,0 +1,4 @@ +.health-bar { + -fx-box-border: red; + -fx-accent: red; +} diff --git a/src/main/resources/com/jadventure/game/view/Game.fxml b/src/main/resources/com/jadventure/game/view/Game.fxml index 975e7b1d..2b6f8271 100644 --- a/src/main/resources/com/jadventure/game/view/Game.fxml +++ b/src/main/resources/com/jadventure/game/view/Game.fxml @@ -1,9 +1,16 @@ + + + + + + + @@ -24,4 +31,59 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
From f59ff4e29b2c038753e6291378163553ca4aa8b8 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 11 May 2019 15:28:18 +0300 Subject: [PATCH 18/35] Add directional buttons --- .../com/jadventure/game/GameController.java | 34 ++++++++ .../com/jadventure/game/images/cross.png | Bin 0 -> 1767 bytes .../com/jadventure/game/images/down.png | Bin 0 -> 1748 bytes .../com/jadventure/game/images/up.png | Bin 0 -> 1715 bytes .../com/jadventure/game/view/Game.fxml | 77 +++++++++++++++++- 5 files changed, 109 insertions(+), 2 deletions(-) create mode 100755 src/main/resources/com/jadventure/game/images/cross.png create mode 100755 src/main/resources/com/jadventure/game/images/down.png create mode 100755 src/main/resources/com/jadventure/game/images/up.png diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index b9f97168..4a949593 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -5,8 +5,10 @@ import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import javafx.fxml.FXML; +import javafx.scene.control.Button; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressBar; +import javafx.scene.image.ImageView; import javafx.scene.paint.Color; import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; @@ -37,6 +39,38 @@ public GameController() { private ProgressBar health; @FXML private Text hpString; + @FXML + private ImageView up; + @FXML + private ImageView down; + @FXML + private Button north; + @FXML + private Button west; + @FXML + private Button south; + @FXML + private Button east; + + @FXML + void goDown() { + + } + + @FXML + void goEast() { + + } + + @FXML + void goNorth() { + + } + + @FXML + void goSouth() { + + } public void loadState() { loadCurrentLocation(); diff --git a/src/main/resources/com/jadventure/game/images/cross.png b/src/main/resources/com/jadventure/game/images/cross.png new file mode 100755 index 0000000000000000000000000000000000000000..e17c5eb53bcac5c392f69f24ab1a87b812f5dab1 GIT binary patch literal 1767 zcmX|?dpO%?8^`0U;uKbCkyghgJ*IW)7LiQr5IUp9Ix3-|8hst&@FR&cHKjCZN2@Lb zQPZszMX5QIPP<&MN}H%klTvBlS$>m=&`?x(fA;p>AJ6mrbKm!M-_Q5@e(utffkYD{ zYag`~G~1F**!AHzTG7!bF);T< zvaC^7sx;Q%Rpu&hdU0-c_By7g7@cVBBYK|1l0blKsgXAg`g>uA!@|S={aNo&$g>iR>dUW`*tNd2e_C}Hm2T*WrrFRx z9Xx!P4}Q5@iS2dLo+$^l>$d|%saiq=*Akj(a~1r9sD$I(-KEZ0EEDJEwv<0QIvRRS zB9V-b3Is1>b8`u9a5y|YoJ0x`jEx18T{C|nWuVyPw&1KuEsw%n4u``t>SiGscgyI& zdIbIft}OCn9=p$QeV5FFtqMDQe{PY*%AkhjJy*5im98r)RkGvdr`aChz$Ft`(dvn& zPQTS}xP0>cEVigUD|)foyU(Qo?on1jQ};|&H`pHx+z>_eor5F@KnO)0XM_d@2GzAc znv!MVwd;-|Wq=T2g`Nge`dqk3xTed^NCaoG-YWwL6`u7sZ`x&Q{SZgj2MWwqiN3zR zKNE?>mlYM3R+@@qf|I!MBMzC9P=#w(WpcSZ<$zg`9?IJK=h?CV#=)w}0q@yj>*B&7 z_3*YUk#MC6N_-<8&5&W);GVZO+?WIR987H6F<*rK#^;AnRd%o54cw(BYINUpjOw}@ zA+!e&J!l|6{;why!^cc3>JmnEWBZdw#HM9ZYneiwZ5I6_%EcoT`Tz?*QcMtPa(u^gmzT4b3Q zuV=`A4dI+=hqbqHfbApaRbx>Zi{S2lLj5^+ONePGX`B16?|!#| zLVeZIjf2a>A}}D=OU-SHc|kq3SPw}ik#`bMqPnV13@8=$@%`G0sV@(gO-wY7u1F3xXcw^21YFTj=mc zLned#xap}Dl+)2LwM=bZnHr_j?c7`K@qHa->-1E_*X+MM;Wc0p#>3` zdvvQTo-lXjBQcH1T%`aPX5UM|i1OeqFIxe&r@olY{T9v=pZTBd4}!Z39^_k2?OTgb zolfTBe1k5UX$7ij$HnygZhdiob6Le?)0B12Cd9U4POOcE2B-b0!~Y{F z@@iuQhq6eq8fsd~=GIbfb$PrWU%!3Slf9ut%^2$(dR|;y9OrjAu9-#D6;-*HHcG#x z93CEye>>g~Xl;RET!^-4leTwucE&~u8V+4uT~)-nmMdUslD?YsISSEMzrMciNQ9VS zh`vQNY$+5tF}gV{Xg2X<<{BhJRT6q#hE7L}HF*@aiSm~xkB^Th#jtj-4xOEynR2;o zwzjs+`ue(ATwF8@3k!*&4t2SQdugK&kZo+v1w1k4xd+3|(b19F+}z9rE30UWHffta zda$QD>>=Bdd}q>hdV2a5F|L56iN5GFi*5K2d`J`iS>TO?s&q4S{**ItG- zw%Yvgk`rn0{QSHnjT=oQ?3I<3+{256t=Mey2Vb2+ltvr2&PdXE9I{!4G`8FP!e=M& z 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 JPDHLkV1jJ5Kd%4) literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/view/Game.fxml b/src/main/resources/com/jadventure/game/view/Game.fxml index 2b6f8271..b3d0e290 100644 --- a/src/main/resources/com/jadventure/game/view/Game.fxml +++ b/src/main/resources/com/jadventure/game/view/Game.fxml @@ -1,10 +1,13 @@ + + + @@ -32,18 +35,21 @@
- + + + + - + @@ -83,6 +89,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
From 79ecd40f1b3c78561a7d8f2b66deed184ce45c4a Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 11 May 2019 15:34:10 +0300 Subject: [PATCH 19/35] Add 2 directional methods. Cleanup imports --- .../java/com/jadventure/game/GameController.java | 14 +++++++++----- .../resources/com/jadventure/game/view/Game.fxml | 10 ++++++++-- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index 4a949593..3d7677c6 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -1,16 +1,11 @@ package com.jadventure.game; import com.jadventure.game.entities.Player; -import javafx.beans.binding.DoubleBinding; -import javafx.beans.property.DoubleProperty; -import javafx.beans.property.SimpleDoubleProperty; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressBar; import javafx.scene.image.ImageView; -import javafx.scene.paint.Color; -import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.stage.WindowEvent; @@ -52,6 +47,10 @@ public GameController() { @FXML private Button east; + @FXML + void goUp() { + + } @FXML void goDown() { @@ -59,6 +58,11 @@ void goDown() { @FXML void goEast() { + + } + + @FXML + void goWest() { } diff --git a/src/main/resources/com/jadventure/game/view/Game.fxml b/src/main/resources/com/jadventure/game/view/Game.fxml index b3d0e290..6a347047 100644 --- a/src/main/resources/com/jadventure/game/view/Game.fxml +++ b/src/main/resources/com/jadventure/game/view/Game.fxml @@ -122,15 +122,21 @@ - + + + + - + + + +
From 41abaaabcdde614a92a180f3e95c25322cf55c61 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Sat, 11 May 2019 17:26:17 +0300 Subject: [PATCH 20/35] Allign new directional buttons correctly --- .../com/jadventure/game/GameController.java | 119 +++++++++++++++--- .../com/jadventure/game/images/east.png | Bin 0 -> 2143 bytes .../com/jadventure/game/images/north.png | Bin 0 -> 2012 bytes .../com/jadventure/game/images/south.png | Bin 0 -> 2258 bytes .../com/jadventure/game/images/west.png | Bin 0 -> 2053 bytes .../com/jadventure/game/view/Game.fxml | 119 ++++++++++-------- 6 files changed, 168 insertions(+), 70 deletions(-) create mode 100644 src/main/resources/com/jadventure/game/images/east.png create mode 100644 src/main/resources/com/jadventure/game/images/north.png create mode 100644 src/main/resources/com/jadventure/game/images/south.png create mode 100644 src/main/resources/com/jadventure/game/images/west.png diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index 3d7677c6..72985abe 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -1,11 +1,21 @@ package com.jadventure.game; +import java.util.List; +import java.util.Map; +import java.util.Random; import com.jadventure.game.entities.Player; +import com.jadventure.game.monsters.Monster; +import com.jadventure.game.monsters.MonsterFactory; +import com.jadventure.game.navigation.Direction; +import com.jadventure.game.navigation.ILocation; +import com.jadventure.game.navigation.LocationType; +import com.jadventure.game.repository.ItemRepository; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressBar; import javafx.scene.image.ImageView; +import javafx.scene.layout.TilePane; import javafx.scene.text.Text; import javafx.stage.WindowEvent; @@ -39,41 +49,118 @@ public GameController() { @FXML private ImageView down; @FXML - private Button north; + private ImageView north; @FXML - private Button west; + private ImageView west; @FXML - private Button south; + private ImageView south; @FXML - private Button east; + private ImageView east; + @FXML + private TilePane minimap; @FXML - void goUp() { - + void goUp() throws DeathException { + command_g("up"); } + @FXML - void goDown() { - + void goDown() throws DeathException { + command_g("down"); } @FXML - void goEast() { - + void goEast() throws DeathException { + command_g("east"); } @FXML - void goWest() { - + void goWest() throws DeathException { + command_g("west"); } @FXML - void goNorth() { - + void goNorth() throws DeathException { + command_g("north"); } @FXML - void goSouth() { - + void goSouth() throws DeathException { + command_g("south"); + } + + public void command_g(String arg) throws DeathException { + ILocation location = player.getLocation(); + try { + Direction direction = Direction.valueOf(arg.toUpperCase()); + Map exits = location.getExits(); + if (exits.containsKey(direction)) { + ILocation newLocation = exits.get(Direction.valueOf(arg.toUpperCase())); + if (!newLocation.getLocationType().equals(LocationType.WALL)) { + player.setLocation(newLocation); + if ("test".equals(player.getName())) { + QueueProvider.offer(player.getLocation().getCoordinate().toString()); + } + player.getLocation().print(); + Random random = new Random(); + if (player.getLocation().getMonsters().size() == 0) { + MonsterFactory monsterFactory = new MonsterFactory(); + int upperBound = random.nextInt(player.getLocation().getDangerRating() + 1); + for (int i = 0; i < upperBound; i++) { + Monster monster = monsterFactory.generateMonster(player); + player.getLocation().addMonster(monster); + } + } + if (player.getLocation().getItems().size() == 0) { + int chance = random.nextInt(100); + if (chance < 60) { + addItemToLocation(); + } + } + if (random.nextDouble() < 0.5) { + List monsters = player.getLocation().getMonsters(); + if (monsters.size() > 0) { + int posMonster = random.nextInt(monsters.size()); + String monster = monsters.get(posMonster).monsterType; + QueueProvider.offer("A " + monster + " is attacking you!"); + player.attack(monster); + } + } + } else { + QueueProvider.offer("You cannot walk through walls."); + } + } else { + QueueProvider.offer("The is no exit that way."); + } + } catch (IllegalArgumentException ex) { + QueueProvider.offer("That direction doesn't exist"); + } catch (NullPointerException ex) { + QueueProvider.offer("That direction doesn't exist"); + } + } + + private void addItemToLocation() { + ItemRepository itemRepo = GameBeans.getItemRepository(); + if (player.getHealth() < player.getHealthMax()/3) { + player.getLocation().addItem(itemRepo.getRandomFood(player.getLevel())); + } else { + Random rand = new Random(); + int startIndex = rand.nextInt(3); + switch (startIndex) { + case 0: + player.getLocation().addItem(itemRepo.getRandomWeapon(player.getLevel())); + break; + case 1: + player.getLocation().addItem(itemRepo.getRandomFood(player.getLevel())); + break; + case 2: + player.getLocation().addItem(itemRepo.getRandomArmour(player.getLevel())); + break; + case 3: + player.getLocation().addItem(itemRepo.getRandomPotion(player.getLevel())); + break; + } + } } public void loadState() { diff --git a/src/main/resources/com/jadventure/game/images/east.png b/src/main/resources/com/jadventure/game/images/east.png new file mode 100644 index 0000000000000000000000000000000000000000..52f626316194a5e0523623182f9918a83d8db77b GIT binary patch literal 2143 zcmV-l2%z_gP)0Wm(%F?6@LP!8jFs39@P-@ZA zc9_09|AO3`nbLQs$VqOX?L6*xzH`n!=iF;h6h%P~<@EFv@pv4SN(Gfl1q{Q0VHh}_ zP7DnV_43tV^?X=1o5knPpRv2Ui)b{8Xf)dN9*@TZQ4}#YHin6b2@DJj=r$jN9?XTq zVMHPkL?V%{CnSm@CMPE`Jv|Mp)%x$ig~MTlLLtQCan1K`w;OJ^8!nd%Hk%DDm+R8K zsZ9*^Vb=tu){Zf*`wpFZs^xNJ6yckkY5%uf&mc)eaYolaeS_xtzn8jzwW z;?=8H5ClPga0dqmc>Ve{Wy|SwVq|1Q*8orper3CMPHL0~d)zu(GlO zNs_1*hlhu8Rr34yZ|v>up;RgX0OsfCTQbw8;KJcBR#sLn)(w`$2(a<-aqv73MNzJNa2$v6@o_jD4yyDIA3k)(+`+*C z78VvDNfKC=#givbz;PV@wUkOFY;SK<7kTmGMO`0c>N)cA@-hV$2n5jA*Y{5ts~$$9 z5rIH}DtdKwRTEX4f?Ho-r>T?A=Y!pDr@7&E7!1SU(W6ITSr(Ec;qBYEt%2Lw*`c;P zI5-Hm+kGtM<}d0Jqx>0QmUv zBXYT1eQ@D$n4078@Gy)<J-l8oHP83&-`596sC7D>a5x;-nl&=aW;5>GxkJfO zv&X1?jifn(Aatcov)K%u=V34yu7o|0$3p>q`t<2CxQ&es0D#3}0mpG&X%hfOM@RAC z!2{Usb|{L{^XPfw#trIwm%x!s-{bMy8f*@Qlx4XLw z05F@)FqurcXtLULY&IKwJ|9L#MreN6EA|K;R{eqanjTV*9iHdma5xZ;$8mgojBGZm z8+)W3p#gVtasmL9wQfaimW{ezJkR6j&!0#n5-1c3x`C4<3AtSE0vuTa`uh5GVXhT$ zq>TFSzyHwR-;d+tVu3+wBlV5vf!P$H&LCAZ=F| zhS8KpEQyi;U@#bZ?sJXA>2yL-6dWBLbqtV5rBVT_?h0EhmVd$=(R3^p!`9XotX8Wg z>*yHV?c2BM7m_5wZns}4I7LyAOeV3pxrsy~0YMOSiP{XqfK_Ygs(mh>&tq?I58u9h z!>wDl;Pd(D{oM+~FqZ?0UOw08Im84vH#cc8F&d3szgvAj%d!{XL{UUE8ig#&U2i@# zVy;rDAel^JdwUz{bQ(iLLol1oy0N7$cYHqI1vrn#gJ?90d_Lc^bxxLL?C%usX6 zX0t6-+GJAd0Ra8|{j}v)>l*d7)xhdq*Jv)KQi+07x7Hc;=APg0rim=h5x?JGa~rv4 zsxUu4Pgi+amg!z}z0luk!03eGTHh;*f^<4fcU)h-eA(W%@#5klIF6$aA^_Wol+A#4 z>ThRfXEX*ZEiKhOQNc9oPAxAlQ-Eh@XKexO21vc@NmW7Sv9Pd!(b3V)HvC0V)BsE- zlP&idI|(R_q*yE>kw|EOO-)TTE?ApAv>IS4l|m|&(zR4+#G0ZgkR%C-M1sDv6<|Oc zCy3(lI2IQd>E+9>9^B-2L6+F+wX0tV1r&Y{n&z-5%d&8}T;MnkCX=ac=19_z$z(Ks?eTc_ zEU;KCFdB`t)om~sP$(2oDwR+y7HOhDOivAJYHI50&s)}Fa${oykw`>iN}WhB7(_4_ z?1-tJfU5?&ySq!zIX46A_xtG?=RhFPmQP(dxLT4(Bye(aLiev74hOtmZ?9jA{{f6| V-+mn`C$azl002ovPDHLkV1kz2{e%Dj literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/images/north.png b/src/main/resources/com/jadventure/game/images/north.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e29931d9e67b13ae38fcbfc0853cfc149a370e GIT binary patch literal 2012 zcmV<22P622P)%(EnU~GQ`hZQ5K(&=$+$Ey~=<$q7Dv`h>&7!-WSEkH?YA zJ=PVoNyd&sg(`T~IfZr;3!L?VGeATZZJTCEnU)hcSW zngeLDSVW;vKrk4*T5x-NdpI~aAivkv)^O*}9anbdm0quh^Ye3@pPv(u@pv4iQV9o_|*!}<9+>D%7kMxjvf4qT;DL8(-Nq9_1> zR4Rq7tu1gIhkqfBMgu1&C+KuK#1>1X(&FG`S;m_;ZwRpa_wOT>O5tCNuIu>v^(&gq z=1c%bg0ll-Sr$*8Ji*G!3jR+yJw3&bA3vrB=nAggZsXOfSE$u$U|ANAA3p}q^SBQ3 z{rh(UuvjdjSS*hGFYVU3v$I3u*Vfh+g25n6)4UdKYikS9XcPcYE|+n9d^|mK2L}h( z+uH*G+`fGq>2w;`O>|v{BuP*d1w7B=!-o&9n&n`wR;yuue;)uK2m(^6)U{#E-WZ0# z=H?~=Ia|QSD<3|91&*#I98#k^sYxcIWu>k;(Bx#5}+Ojo^wL~IuC9}+N94LzN z{JGI+l(6^t^XFl3M@L5h0ES@@jYd76T>!{rGFVwzxf1pgi3G7dE1M$VEX1p;tDtGx z^Vt;y0qJxanM?)@!(7SpEwRTvT2T~|?F)k7`K&SwgG?p^!!RHS0@l~pJ%0zsaadkn z1^|5f_U&&C#s0&}M7)%EJdR*62wm67s-j-6lPupW5d;D4cH7}pSo<1{rfFg$UdZzD zGLp$848tIO9LFJ@PUGzC%+q&SEA?8fMlu)LV$SdPduj(3OEgWxFbqdqU0nsw^PaxX z@Ao@aG>+2V($bQrGr6|5hHyAc)NxQ!sT34N87d6TT@0cqFbo63Fi6tRS~|+ItY`Md zaU7D#BuvwEsN|p;MIsTheDOm3em_)I{R_@MAg`EPUtfpM=NrkICDCXUjYh+B=Q31r z?)UqiFc%C45e|n(GG-TsVUS29P_0%ydH3KmSo?)VnWJeMi9~|v{O-7<`3vpKhOvA>sq6Gain$H(Y)yK^(g^SmR)S|nAgR4Q}b+wFGA zcTp7of&&0e(_k0|Xqui&9ZpYAJ&Td^Op;wCtzr?I&1T6TR8^g8H|5u_UycD$6g9Uq z5Cj1%JNuq!yWIu=$7Tu3^E^aRge=Qwx7%dtFiYAK4u=UKilQ9g#sRee**^#K(`ie6 znx+8&o<4o*T&zBS{+v*&>-tn{D7Tjn0-401eL~!>S+RFgQ&pAN{t&oaE=M{PMVTt& zA2+DMPq*gwjKS;H_etZiz}bNja6HcwfU2s(FpQ}fGfi{sfX6X6E6bx;w8m@g9k`bE ztPA~qe9DuZI3Z__IkbEL>rsd;f!NxoV~d@ z9{ZRq60BXjWAYB}n;gZ-vyLen%7+X{sO3EU&W@jOpv zpx5g`RaL^8+e}VkXc|`MiHH4u9~T!FMB`q*d^z3zTrQU*UZ>OPIMSL$2JU8a^MEu> z6RlQ@q>80dY2?PJYp(V7?OQ^#s;WZ(XHmCFo^e+86h$G~(4^xV^r({DyLay#_IG)C zIoFKOGWc=q_WOPO{{5SbBbUoL;`7wtEM4B+-6a59trn@nPx72zgVuE&jYflL(88w~ zEU8o~*xlVFwLrh$kF~WmFbo5lrpIO=(*$O>+|usER8>W@*(5erC=^`X{#@X!jC*Hi zhm@*mnnoxTf*=Spfg6lpc0hvxTGKQ~Wz6#AlT>kLaF*B)16bvOa5#*Wm6fsi<0SU% z;51D`v)OcPMTw$_QmNz`%RB=I06%~J#P05{bHjmUNfpcI^UVy-FbpV)0##K>5^S-R z&*#UUHSrXjC6Xjze}8{ytCr(91Ofr_Nl_Fzrbtl~G);r9>o5!h-ENnhy&Oy?^7%aS z`TRnMdlo(^Td7oVcz8Ipt2vK|qKJGxk7v)G%~cWb9NZw#qoX6pvJ6?4hfdKBij~P{ uvsu@y{#t<>>V$_8((Ty>Y#04hk&OlT` z4NU+;Y1L9u-hG$Sna;l;b8SnX(;E0sazmN9GxvV;opbMbT$vyU0{)Riqfz|$@dG^1 zBauh|04R!rTrNjzYb*Y>D9ZV=`T2Rw%*?>yaA0zxH%q=f3p;RhU`o!aL1Ofs0{eA=j0c>t=A`*$D^y%p6z?CakN>bmV!EJAEU3*;>8Q1ehkCF zYPG^_HkZ{_yk0MyPA8(#C{fqJ!9kopeY*VMVzC$=K75F&sVM+}QmI5sOAC%3J^D{q zyQQTi{QUWoFln>dFgQ3^K5(&E3^#Aygv;du0O<94oH%hpvieEcPQHHqieNAZ0BCM* z#>mJBDl02X1D6iWVzJ=(@#8oMnVXx#%F0Sn0JDNi2iDfsh9gIg;2_20@nCUrv0#8% z!Ck+8od9cXZAE>3Jr0BX{{0&Z3kwC=AeHIjlP6CIu$GnP($8orK?;ZevrfD=a zH60qp(py_w8x)E?*ZBVZ`}x)K?c29lU0nqLSglr26oo`0aVQ%_QLtLA005WEg^wRU zW(OCK$MN#zO8`J!T^(4KJ+!QeO|REOtJMMko<4n=J>+@!?j3Qf%w{u*zYe>Y&1U%h zeypypVsdg4XU?42&)np z*W=TtPcWHG1?O0T!64@6=V3G&OCCS{c}21cmBTYpsZ^MspGQYWN8Y}PL;`lZ9cs0@ ztX`3bNug4y%Ep|yB+t#w!D6uxpD&xNudl=7@u0rGzAR(!?CbylNjXwYO-S<~zFWgC;@IPxxw z#j*!ZL@5HKX}a{%kxT};T#nt{U3fg6l(f4b2ynSvsI07nOeQ0&mCByT8URxMqLfM{ z$wh?2VafU~PEID1k-yc|)mU6yL@X8~wiXNq;dZ-;FDUj;1}|m&a5xMAICbh&YRJ>u z+e?@$HkQgX!St=c>2!kQIB*;Xr_%|oR=e++Oz$XW9%4o4(xpqO;KaNG$8p5=3S}zO z3H6O7m+tbsNQad0CqN`W05^(W&ykN!( zb!bDO5LsyQsd6^;%ru{!ogK26T)cQObKbJKxf#cf9U~>&LhMWY+Q}{bx+t}^wK-YK z_r7d)C}t7b+uO+&kTK&dR!m~C7-F%QB*t>7RxbOL!eBTYh8We{x^*jeI^AluqPx4B zc)oGT9%;ab)?waN$D6AbDR2YhYji6h)Ce>7a9%$sacPcQ6=) zAP8Vt7MCwyF04LB(=#^R&Z zYQ^o_w@I`hh7wZUq(W^j+rF0`+=}xV8XC%(v!Sxx=;`S}Utb>pAQTFb{ZGn*B6T53 zmp~vufc5wH%+No=kkwT$RV3I zZ{FbX z)oMZ0v?Oq$Pza$=h%hDA-R|DKi?+5lX^T`The_>rJ03lH1dqp)lCx(R1~g5BVHn6{ zGE`Pp65Hf?o&>L=n-_^hQk(^g#ey3*ZjeYtaz>yWXPkfi`i1fFalC*3o}3Mll8*1~ z?S;)|gVAU#i+3X{_W|y$tt~j6PAo1i!fv-?V`C#_f1+s`EX%@RFrc%u6YcHoXl!iE gnk73_;0}}g2WZDjUy7j(LI3~&07*qoM6N<$g4=61v;Y7A literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/images/west.png b/src/main/resources/com/jadventure/game/images/west.png new file mode 100644 index 0000000000000000000000000000000000000000..0f9549d12bcf920d723a6bbfdf4ca0c88464f942 GIT binary patch literal 2053 zcmV+g2>SPlP)f4Y>Zwf;i+?4RN(DcE z{zRox83+3ty+-^7G@wj1o>Lg634Vvs@ z3kwVIcs$TF?anoy&qqDBD2fn8vA0^vvW(}?pF@^q_aw80O-zKE|;UM zMWfOG3)V=BMx&HHz3ox|{{H=Y06-uRfX!yZ_4W0w*o@QZ1OU`(wUPVaI1X;N8<&@t z$mMc0f?x<@a(0`UnYoqKwpy)-L?U?d zgUjWDq9~9g=|6BpC0#DpL|Ah;9GIP*MI;h|&1R#Z^kT-i9LGUX6iOCLYz_cDjhJ?| z#7LWoAAaJ$_Gw)A2KbA&xTS*$(?G|Nje30;~hGBYwGMhPz#bStTShMur>2!kUdGI_ByWKu?e`YY}a5(7q zzkmN4!Hv3lUaxmx6`Uk5?PEJnn z?%g{qFE3+lZEdJ4KeL#-yu38rdb9fQyjH7Gdl^>zem}fkFaG@bgQKG(Jbn5Uu~>|{ z=i9J3{Q~hk4_1G3OnNl+BU;Bm&;ydOMxfJ&u;j~_oG7K`EG!-sIY-3E7Uw$0V+br3u>Dj+`;MKR^X zPh@Ip3b9xW<#HLhTn>do0gXlj&1Tck%!mp!O{2`MuCD$Ej{KkiT3M}D z+`D%Vv$M1K@#6_)f|_tR$zMZcsy8ITB1>N zu~_W5NUiqRuaPTueIAdxu#Jrk3Qkqkf$Yj+v9z^rY__&gD1?QD1r&=#{QC9FuppiK z>t}03y_3mg`zB73?XoQ6;^LxXs#ovwM^V{MUX@(#bkc&>XWcw1VU6c`gNZTvKu^!! z)zwwURqCa3`jzj+UN;r)^k3_<*7?-ybu=0c0KoS4cK1tJeRBQc;-XEj%?L%hO?nt1 z^JzAlH0vq|LR&hEX${j~ym$fNCINqWdD-#w(9fRwIh9_HrrM5=q-7^uA zN~NgYR;yL2o@N}d$Fa}WaqIOu6h#35Y;JBEY^`Ss>(#4QZR$D9WJa;MLHpM<4XUcr zs{}z1u(h={SPF}%=kD$1#*Ry=1t4|jM0qJy_c6fe% zj%KsjcjF#(vZFW@RaJ3%dP?WeuWX~|hLuXC3;@gJGCjYUVMl{F9ep@+a&kg}rPJxY z^(aHvp^!ThpU(%2#R7(544=LBx?WDA+v$U74Y9Fd3T+0iAd(~rFJHc-gV<~~1OfrL zTrLB+UYqi;;1oqMXbUkFQ!9vw$g+$~CS%B?a2yAY<0!~(``s|$6h*=5>8T;DwYj;8 zt*x!e)PCtj6h-Xq?HP(i?RGo-em^`O53E+}(BQ7Ft{}@Y&d$yZcFprV(&==^eQYA& z^tQOazu#67>u@;Wa=GAiI>E9mtX3-=4hN0Z>h(IVudh+7)lje3Y10eO^Vr_r9;>L- zVn&U#D2mACavjShhRxC>5(y-e$&r|v2sph>=JR>v^La>;)U|k94~En?3xY6G!RW1l j>*Z - @@ -12,6 +11,7 @@ + @@ -35,23 +35,19 @@
- + - - - - - - - + + + - + - + @@ -60,12 +56,6 @@ - - - - - - @@ -87,75 +77,93 @@ + + + + + + + - + - + - + - + - - + + - + - - - - - - + - + + + - - + + + - + - + - - - - + - + + + + + + + + + + + - - - - + - - - + - - - + + -
From 73619a7ba37a8bde6ab3b534abd070c35680a704 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Tue, 14 May 2019 23:57:20 +0300 Subject: [PATCH 21/35] Create minimap tiles --- .../com/jadventure/game/GameController.java | 40 +++++++++++- .../jadventure/game/images/stairs_down.png | Bin 0 -> 218 bytes .../com/jadventure/game/images/stairs_up.png | Bin 0 -> 245 bytes .../com/jadventure/game/view/Game.fxml | 61 ++++++++++++++++-- 4 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/com/jadventure/game/images/stairs_down.png create mode 100644 src/main/resources/com/jadventure/game/images/stairs_up.png diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index 72985abe..8d1c1cb6 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -11,11 +11,14 @@ import com.jadventure.game.navigation.LocationType; import com.jadventure.game.repository.ItemRepository; import javafx.fxml.FXML; -import javafx.scene.control.Button; +import javafx.geometry.NodeOrientation; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressBar; +import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.layout.AnchorPane; import javafx.scene.layout.TilePane; +import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.stage.WindowEvent; @@ -58,7 +61,23 @@ public GameController() { private ImageView east; @FXML private TilePane minimap; - + @FXML + private AnchorPane northTile; + @FXML + private AnchorPane westTile; + @FXML + private AnchorPane eastTile; + @FXML + private AnchorPane southTile; + @FXML + private AnchorPane middleTile; + @FXML + private ImageView playerImage; + @FXML + private ImageView stairsUp; + @FXML + private ImageView stairsDown; + @FXML void goUp() throws DeathException { command_g("up"); @@ -166,6 +185,7 @@ private void addItemToLocation() { public void loadState() { loadCurrentLocation(); loadHealthBar(); + loadMinimap(); } public void loadCurrentLocation() { @@ -181,6 +201,22 @@ public void loadHealthBar() { hpString.setText(currentHealth + "/" + maxHealth); } + public void loadMinimap() { + loadPlayerImage(); + } + + public void loadPlayerImage() { + String characterClass = ""; + if (player.getCurrentCharacterType().equals("Recruit")) { + characterClass = "hero_idle-l_300"; + playerImage.setNodeOrientation(NodeOrientation.LEFT_TO_RIGHT); + } else if (player.getCurrentCharacterType().equals("Sewer Rat")) { + characterClass = "Rat_Idle"; + playerImage.setNodeOrientation(NodeOrientation.RIGHT_TO_LEFT); + } + playerImage.setImage(new Image("/com/jadventure/game/images/" + characterClass + ".gif"));; + } + @FXML public void saveGame() { player.save(); diff --git a/src/main/resources/com/jadventure/game/images/stairs_down.png b/src/main/resources/com/jadventure/game/images/stairs_down.png new file mode 100644 index 0000000000000000000000000000000000000000..1573dd43ab9b4201786ad150052c791fbbe3e73f GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#F)N>ljLO!8&i6ne+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vi~)>EaloaXxtqZ&A7eOPoywQ~G8D0|S}3?ZW%nLX~qxcz=l2{{6xlIj6JHSRv%ll}uIYady;g5mm*NcKI^>p=fS?83{ F1OTK$JYoO< literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/images/stairs_up.png b/src/main/resources/com/jadventure/game/images/stairs_up.png new file mode 100644 index 0000000000000000000000000000000000000000..78870c271fd035f3d29f1884b714e845cf9a2e8d GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>{XE z)7O>#F)N>lk-62)gR(#&+02lL66gHf+|;}hAeVu`xhOTUBsE2$JhLQ2!QIn0AVn{g z9Vnjd>Eak-aXNWQ(8T}e8)OZP3=9lx_Wo^Pluvm0>~Ul9zPewB9JCS+Du18f*x2Y8 z6$&I98wIC(&ydhy(a=*kZmr`I^+o=bD9`(V>)cN&+FNkGV=^@{y4-!AUJ gQ`uEZn7eox81lABZM2t?O9r{e)78&qol`;+07r#PRsaA1 literal 0 HcmV?d00001 diff --git a/src/main/resources/com/jadventure/game/view/Game.fxml b/src/main/resources/com/jadventure/game/view/Game.fxml index abbc8164..64b1df05 100644 --- a/src/main/resources/com/jadventure/game/view/Game.fxml +++ b/src/main/resources/com/jadventure/game/view/Game.fxml @@ -7,11 +7,11 @@ + - @@ -51,11 +51,61 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -77,13 +127,12 @@ - - + - +
From 6403e926d8845471d4febced71a66e9c022be386 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Thu, 16 May 2019 12:35:49 +0300 Subject: [PATCH 22/35] Color code minimap exits + reload after moving --- .../com/jadventure/game/GameController.java | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index 8d1c1cb6..6619cdf1 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -155,6 +155,8 @@ public void command_g(String arg) throws DeathException { QueueProvider.offer("That direction doesn't exist"); } catch (NullPointerException ex) { QueueProvider.offer("That direction doesn't exist"); + } finally { + jAdventure.loadGame(player); } } @@ -203,6 +205,7 @@ public void loadHealthBar() { public void loadMinimap() { loadPlayerImage(); + loadPossibleExits(); } public void loadPlayerImage() { @@ -217,6 +220,40 @@ public void loadPlayerImage() { playerImage.setImage(new Image("/com/jadventure/game/images/" + characterClass + ".gif"));; } + public void loadPossibleExits() { + Map exits = player.getLocation().getExits(); + if ((exits.get(Direction.NORTH) != null) && !(exits.get(Direction.NORTH).getLocationType().equals(LocationType.WALL))) { + northTile.setStyle("-fx-background-color: saddlebrown;"); + } else { + northTile.setStyle("-fx-background-color: gray;"); + } + if ((exits.get(Direction.SOUTH) != null) && !(exits.get(Direction.SOUTH).getLocationType().equals(LocationType.WALL))) { + southTile.setStyle("-fx-background-color: saddlebrown;"); + } else { + southTile.setStyle("-fx-background-color: gray;"); + } + if ((exits.get(Direction.EAST) != null) && !(exits.get(Direction.EAST).getLocationType().equals(LocationType.WALL))) { + eastTile.setStyle("-fx-background-color: saddlebrown;"); + } else { + eastTile.setStyle("-fx-background-color: gray;"); + } + if ((exits.get(Direction.WEST) != null) && !(exits.get(Direction.WEST).getLocationType().equals(LocationType.WALL))) { + westTile.setStyle("-fx-background-color: saddlebrown;"); + } else { + westTile.setStyle("-fx-background-color: gray;"); + } + if (exits.get(Direction.UP) != null) { + stairsUp.setVisible(true); + } else { + stairsUp.setVisible(false); + } + if (exits.get(Direction.DOWN) != null) { + stairsDown.setVisible(true); + } else { + stairsDown.setVisible(false); + } + } + @FXML public void saveGame() { player.save(); From be229d1c3ce08a6a760cc51d2b44abf70f4976de Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Thu, 16 May 2019 12:58:39 +0300 Subject: [PATCH 23/35] Remove save option from alert on close request --- .../java/com/jadventure/game/JAdventure.java | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/jadventure/game/JAdventure.java b/src/main/java/com/jadventure/game/JAdventure.java index 0420cc58..84674fa3 100644 --- a/src/main/java/com/jadventure/game/JAdventure.java +++ b/src/main/java/com/jadventure/game/JAdventure.java @@ -252,28 +252,18 @@ public void loadGame(Player player) { public void close(WindowEvent e) { e.consume(); - ButtonType save = new ButtonType("Save"); - ButtonType dontSave = new ButtonType("Don't save"); + ButtonType yes = new ButtonType("Yes"); ButtonType cancel = new ButtonType("Cancel"); - Alert alert = new Alert(AlertType.CONFIRMATION, - "", - save, dontSave, cancel); + Alert alert = new Alert(AlertType.CONFIRMATION, "", + yes, cancel); alert.initOwner(getPrimaryStage()); alert.setTitle("Quit"); alert.setHeaderText("Are you sure you want to quit?"); - alert.setContentText("Do you want to save your current progress?"); + alert.setContentText("All unsaved progress will be lost."); alert.setGraphic(null); Optional clicked = alert.showAndWait(); String selection = clicked.get().getText(); - if (selection.equals("Don't save")) { - try { - Platform.exit(); - stop(); - } catch (Exception ex) { - ex.printStackTrace(); - } - } else if (selection.equals("Save")) { - // TODO Save game + if (selection.equals("Yes")) { try { Platform.exit(); stop(); From 115a1bb39ac6ecf1be6fedc6dd89cf918fe94343 Mon Sep 17 00:00:00 2001 From: Christos-Michail Faltsetas Date: Thu, 16 May 2019 15:33:44 +0300 Subject: [PATCH 24/35] Setup simple terminal chat --- .../com/jadventure/game/GameController.java | 13 +- .../com/jadventure/game/images/send.png | Bin 0 -> 1058 bytes .../com/jadventure/game/view/Game.fxml | 192 +++++++++++------- 3 files changed, 135 insertions(+), 70 deletions(-) create mode 100644 src/main/resources/com/jadventure/game/images/send.png diff --git a/src/main/java/com/jadventure/game/GameController.java b/src/main/java/com/jadventure/game/GameController.java index 6619cdf1..e2d164b5 100644 --- a/src/main/java/com/jadventure/game/GameController.java +++ b/src/main/java/com/jadventure/game/GameController.java @@ -14,11 +14,12 @@ import javafx.geometry.NodeOrientation; import javafx.scene.control.MenuItem; import javafx.scene.control.ProgressBar; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.AnchorPane; import javafx.scene.layout.TilePane; -import javafx.scene.shape.Rectangle; import javafx.scene.text.Text; import javafx.stage.WindowEvent; @@ -77,6 +78,10 @@ public GameController() { private ImageView stairsUp; @FXML private ImageView stairsDown; + @FXML + private TextArea terminal; + @FXML + private TextField send; @FXML void goUp() throws DeathException { @@ -254,6 +259,12 @@ public void loadPossibleExits() { } } + @FXML + public void sendInput() { + terminal.setText(terminal.getText().concat(send.getText() + "\n\n")); + send.setText(""); + } + @FXML public void saveGame() { player.save(); diff --git a/src/main/resources/com/jadventure/game/images/send.png b/src/main/resources/com/jadventure/game/images/send.png new file mode 100644 index 0000000000000000000000000000000000000000..645fbe2787ee87516f2770f1b0571953f9ec3d1a GIT binary patch literal 1058 zcmV+-1l{|IP)uwarA48~#RDAsvJE&Bo;NTEYuug5JfQ!XNI@v$P|3DlZI!Fs092~TZ z&_V0yP^2y@jnq=b`lFD<6cZuzy@Rw^zFfZdUfSA}JWyytDf#3*=Y3924(K=S?Celc z6e$45eIk(vJvuu2jzb41rBu^2NRotnJ`X_<5C{a|Bz=B-TW=di_5?aKqAtbK!a$j^j8G zLcp?Yf59;f13?gw$z<^O_=vHwF)$3%A8;Oz2Moi&vMgjW85|rOz_x98z25%Ix##C+ zq*5uIo}OZ8XsGK2dRG$T_VyN~QVGFe5KBu-&@>IUZTHV^X;~J|&(E>HzmNC#cMwAQ z&k8h6!{Ol}(&;q3UT;T3^~bidQmKT!y**rAU3JVle%!<_E-ny{$5E|TK?rH9b@W7q zVp$f_=`_;mbX%>Xr^>HVsf1K2g<7qKiHQkkSizsl@ApHNW%ztP06?``bv_)&agb#h zq9``c)oQi&uAFI_czu2SXM-Ib9c|wAKUFv!#>&b{(-JJpLa|sxrBeB;|KWKa3akwW`~cb>Un%7tV!q;aoT;!}Zfk ze&B2V5&#%N2oy#6I$)f=kd5nC6b0dM7;GdGK{A=d^71kSL4aWxFijKndfhQlEX#uD zc?=H^BbUoT*Y&S?OI20r+}s>Y(?m2Hg&+uyT{%TjaB^~j)zwvGvsnyKN@+fyha^eR zG!2W3i + + + @@ -45,6 +48,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -135,89 +240,38 @@ - + - + - - + - + + +