From 7acbc45663dace85ce864c81fea7ea787e47f4c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Wed, 17 Aug 2022 14:23:49 +0200 Subject: [PATCH] Create Game Menu --- project.bep | 3 +- .../demo/gui/GameMenuWindow.java | 32 ++++++++++ .../demo/map/BaseMapHandler.java | 4 ++ .../demo/menu/MenuManager.java | 46 ++++++++++++++ .../demo/runner/DemoRunner.java | 9 +++ .../56ca6b39-f949-4212-9c23-312db25887e0.xml | 63 +++++++++++++++++++ 6 files changed, 156 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/GameMenuWindow.java create mode 100644 widgets/56ca6b39-f949-4212-9c23-312db25887e0.xml diff --git a/project.bep b/project.bep index 1b38301..ffff3af 100644 --- a/project.bep +++ b/project.bep @@ -5,4 +5,5 @@ $d314b030-f865-432e-a356-3845f8aac7bc(d314b030-f865-432e-a356-3845f8aac7bc.png $815a5c5c-4979-42f5-a42a-ccbbff9a97e5(815a5c5c-4979-42f5-a42a-ccbbff9a97e5.pngLuna (:` $2261c04f-b02e-4486-b388-8a0fa41622e9(2261c04f-b02e-4486-b388-8a0fa41622e9.ttfRoboto RegularB\ $ab9d40b4-eb28-45d7-bff2-9432a05eb41a(ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml -Start Menu \ No newline at end of file +Start MenuB[ +$56ca6b39-f949-4212-9c23-312db25887e0(56ca6b39-f949-4212-9c23-312db25887e0.xml Game Menu \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/GameMenuWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/GameMenuWindow.java new file mode 100644 index 0000000..e8175e5 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/GameMenuWindow.java @@ -0,0 +1,32 @@ +package com.bartlomiejpluta.demo.gui; + +import lombok.*; +import com.bartlomiejpluta.base.api.context.Context; +import com.bartlomiejpluta.base.api.screen.Screen; +import com.bartlomiejpluta.base.api.gui.*; +import com.bartlomiejpluta.base.lib.gui.*; + + +public class GameMenuWindow extends DecoratedWindow implements Inflatable { + + @Ref("resume_game") + @Getter + private Button resumeGameBtn; + + @Ref("start_menu") + @Getter + private Button startMenuBtn; + + @Ref("exit") + @Getter + private Button exitBtn; + + public GameMenuWindow(Context context, GUI gui) { + super(context, gui); + } + + @Override + public void onInflate() { + resumeGameBtn.focus(); + } +} \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java index b17d35f..f4dc753 100644 --- a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java +++ b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java @@ -37,6 +37,10 @@ public abstract class BaseMapHandler implements MapHandler { @Override public void input(Input input) { + if(context.isPaused()) { + return; + } + if(input.isKeyPressed(Key.KEY_DOWN)) { mainLayer.pushMovement(player.prepareMovement(Direction.DOWN)); } else if(input.isKeyPressed(Key.KEY_UP)) { diff --git a/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java b/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java index 54bffa2..8aea10e 100644 --- a/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java +++ b/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java @@ -2,8 +2,11 @@ package com.bartlomiejpluta.demo.menu; import lombok.*; +import java.util.function.*; + import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.screen.Screen; +import com.bartlomiejpluta.base.api.input.*; import com.bartlomiejpluta.base.api.gui.*; import com.bartlomiejpluta.base.lib.gui.*; @@ -17,6 +20,9 @@ public class MenuManager { private final WindowManager manager; private final StartMenuWindow startMenu; + private final GameMenuWindow gameMenu; + + private final Consumer gameMenuHandler = this::handleGameMenuKeyEvent; public MenuManager(@NonNull DemoRunner runner, @NonNull Context context) { this.runner = runner; @@ -29,6 +35,29 @@ public class MenuManager { this.startMenu = (StartMenuWindow) gui.inflateWindow("ab9d40b4-eb28-45d7-bff2-9432a05eb41a"); this.startMenu.getNewGameBtn().setAction(runner::newGame); this.startMenu.getExitBtn().setAction(runner::exit); + + this.gameMenu = (GameMenuWindow) gui.inflateWindow("56ca6b39-f949-4212-9c23-312db25887e0"); + this.gameMenu.getResumeGameBtn().setAction(this::resumeGame); + this.gameMenu.getStartMenuBtn().setAction(runner::returnToStartMenu); + this.gameMenu.getExitBtn().setAction(runner::exit); + } + + private void handleGameMenuKeyEvent(KeyEvent event) { + if (event.getKey() == Key.KEY_ESCAPE && event.getAction() == KeyAction.PRESS) { + if(manager.size() > 0) { + manager.close(); + } else { + manager.open(gameMenu); + } + + if(manager.size() > 0) { + context.pause(); + } else { + context.resume(); + } + + event.consume(); + } } public void showStartMenu() { @@ -36,7 +65,24 @@ public class MenuManager { manager.open(startMenu); } + public void enableGameMenu() { + manager.closeAll(); + + context.getInput().addKeyEventHandler(gameMenuHandler); + manager.setDisplayMode(DisplayMode.DISPLAY_STACK); + } + + public void disableGameMenu() { + context.getInput().removeKeyEventHandler(gameMenuHandler); + manager.setDisplayMode(DisplayMode.DISPLAY_TOP); + } + public void closeAll() { manager.closeAll(); } + + private void resumeGame() { + manager.closeAll(); + context.resume(); + } } \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java index 48a06a2..8cb74cc 100644 --- a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java +++ b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java @@ -67,12 +67,21 @@ public class DemoRunner implements GameRunner { public void newGame() { menu.closeAll(); + menu.enableGameMenu(); resetPlayer(); context.openMap(ForrestTempleHandler.UID); context.getMap().getObjectLayer(ForrestTempleHandler.MAIN_LAYER).addEntity(this.player); context.resume(); } + public void returnToStartMenu() { + menu.closeAll(); + context.pause(); + context.closeMap(); + menu.disableGameMenu(); + menu.showStartMenu(); + } + public void exit() { context.close(); } diff --git a/widgets/56ca6b39-f949-4212-9c23-312db25887e0.xml b/widgets/56ca6b39-f949-4212-9c23-312db25887e0.xml new file mode 100644 index 0000000..3520360 --- /dev/null +++ b/widgets/56ca6b39-f949-4212-9c23-312db25887e0.xml @@ -0,0 +1,63 @@ + + + + + + + Game Menu + + + + Resume game + + Back to start menu + + Exit + + + + + + \ No newline at end of file