From bef6296b225640622d2892424dd7af07d3cab913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Wed, 17 Aug 2022 13:58:44 +0200 Subject: [PATCH] Create Start Menu --- project.bep | 4 +- .../com/bartlomiejpluta/demo/gui/Button.java | 47 ++++++++++++++++ .../demo/gui/DecoratedWindow.java | 35 ++++++++++++ .../demo/gui/StartMenuWindow.java | 27 ++++++++++ .../demo/menu/MenuManager.java | 42 +++++++++++++++ .../demo/runner/DemoRunner.java | 32 +++++++---- .../ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml | 53 +++++++++++++++++++ 7 files changed, 229 insertions(+), 11 deletions(-) create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/Button.java create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java create mode 100644 src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java create mode 100644 src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java create mode 100644 widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml diff --git a/project.bep b/project.bep index d5c7fd8..1b38301 100644 --- a/project.bep +++ b/project.bep @@ -3,4 +3,6 @@ $f845355e-b9ad-4884-a217-dd3a4c18a3fa(f845355e-b9ad-4884-a217-dd3a4c18a3fa.datForrest Temple"d $d314b030-f865-432e-a356-3845f8aac7bc(d314b030-f865-432e-a356-3845f8aac7bc.pngForrest Temple ](2Z $815a5c5c-4979-42f5-a42a-ccbbff9a97e5(815a5c5c-4979-42f5-a42a-ccbbff9a97e5.pngLuna (:` -$2261c04f-b02e-4486-b388-8a0fa41622e9(2261c04f-b02e-4486-b388-8a0fa41622e9.ttfRoboto Regular \ No newline at end of file +$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 diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/Button.java b/src/main/java/com/bartlomiejpluta/demo/gui/Button.java new file mode 100644 index 0000000..1d2bf31 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/Button.java @@ -0,0 +1,47 @@ +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.input.*; +import com.bartlomiejpluta.base.api.gui.*; +import com.bartlomiejpluta.base.lib.gui.*; + +public class Button extends Label { + private Color color; + + @Setter + private Runnable action; + + public Button(Context context, GUI gui) { + super(context, gui); + this.color = gui.createColor(); + this.color.setRGBA(1, 1, 1, 0); + + setText(""); + setFontSize(17f); + setAlignment(GUI.ALIGN_TOP | GUI.ALIGN_CENTER); + setColor(0.4f, 0.7f, 0.0f, 1f); + setPadding(10f); + addEventListener(KeyEvent.TYPE, this::handleKeyEvent); + } + + private void handleKeyEvent(KeyEvent event) { + if(event.getKey() == Key.KEY_ENTER && event.getAction() == KeyAction.PRESS && action != null) { + event.consume(); + action.run(); + } + } + + @Override + public void draw(Screen screen, GUI gui) { + color.setAlpha(focused ? 0.7f : 0f); + + gui.beginPath(); + gui.drawRectangle(x, y, getWidth(), getHeight()); + gui.setFillColor(color); + gui.fill(); + + super.draw(screen, gui); + } +} \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java new file mode 100644 index 0000000..26680da --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/DecoratedWindow.java @@ -0,0 +1,35 @@ +package com.bartlomiejpluta.demo.gui; + +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 abstract class DecoratedWindow extends BaseWindow { + private Paint paint; + private Color inner; + private Color outer; + + public DecoratedWindow(Context context, GUI gui) { + super(context, gui); + + this.inner = gui.createColor(); + this.outer = gui.createColor(); + this.paint = gui.createPaint(); + + inner.setRGBA(0.1f, 0.1f, 0.1f, 1f); + outer.setRGBA(0.2f, 0.2f, 0.2f, 1f); + } + + @Override + public void draw(Screen screen, GUI gui) { + gui.beginPath(); + gui.drawRectangle(x, y, getWidth(), getHeight()); + gui.setFillPaint(paint); + gui.boxGradient(x, y, getWidth(), getHeight(), 10f, 100f, inner, outer, paint); + gui.fill(); + gui.stroke(); + + super.draw(screen, gui); + } +} \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java b/src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java new file mode 100644 index 0000000..c3ab760 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/gui/StartMenuWindow.java @@ -0,0 +1,27 @@ +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 StartMenuWindow extends DecoratedWindow implements Inflatable { + + @Ref("new_game") + @Getter + private Button newGameBtn; + + @Ref("exit") + @Getter + private Button exitBtn; + + public StartMenuWindow(Context context, GUI gui) { + super(context, gui); + } + + @Override + public void onInflate() { + newGameBtn.focus(); + } +} \ No newline at end of file diff --git a/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java b/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java new file mode 100644 index 0000000..54bffa2 --- /dev/null +++ b/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java @@ -0,0 +1,42 @@ +package com.bartlomiejpluta.demo.menu; + +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.*; + +import com.bartlomiejpluta.demo.runner.DemoRunner; +import com.bartlomiejpluta.demo.gui.*; + +public class MenuManager { + private final DemoRunner runner; + private final Context context; + private final GUI gui; + private final WindowManager manager; + + private final StartMenuWindow startMenu; + + public MenuManager(@NonNull DemoRunner runner, @NonNull Context context) { + this.runner = runner; + this.context = context; + this.gui = context.newGUI(); + this.manager = new WindowManager(context, DisplayMode.DISPLAY_TOP, UpdateMode.UPDATE_TOP); + + this.gui.setRoot(this.manager); + + this.startMenu = (StartMenuWindow) gui.inflateWindow("ab9d40b4-eb28-45d7-bff2-9432a05eb41a"); + this.startMenu.getNewGameBtn().setAction(runner::newGame); + this.startMenu.getExitBtn().setAction(runner::exit); + } + + public void showStartMenu() { + manager.closeAll(); + manager.open(startMenu); + } + + public void closeAll() { + manager.closeAll(); + } +} \ 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 90faf92..48a06a2 100644 --- a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java +++ b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java @@ -12,11 +12,13 @@ import com.bartlomiejpluta.base.api.runner.GameRunner; import com.bartlomiejpluta.demo.map.ForrestTempleHandler; import com.bartlomiejpluta.demo.entity.Player; +import com.bartlomiejpluta.demo.menu.MenuManager; public class DemoRunner implements GameRunner { private static final Logger log = LoggerFactory.getLogger(DemoRunner.class); private Screen screen; private Context context; + private MenuManager menu; @Getter private Player player; @@ -28,10 +30,11 @@ public class DemoRunner implements GameRunner { configureScreen(); configureCamera(); - initPlayer(); - resetPlayer(); - newGame(); - + initMenu(); + initPlayer(); + + menu.showStartMenu(); + screen.show(); } @@ -45,8 +48,12 @@ public class DemoRunner implements GameRunner { context.getCamera().setScale(2f); } + private void initMenu() { + this.menu = new MenuManager(this, context); + } + private void initPlayer() { - this.player = new Player(context, context.createEntity("815a5c5c-4979-42f5-a42a-ccbbff9a97e5")); + this.player = new Player(context, context.createEntity("815a5c5c-4979-42f5-a42a-ccbbff9a97e5")); } private void resetPlayer() { @@ -58,11 +65,16 @@ public class DemoRunner implements GameRunner { this.player.setCoordinates(0, 11); } - private void newGame() { - resetPlayer(); - context.openMap(ForrestTempleHandler.UID); - context.getMap().getObjectLayer(ForrestTempleHandler.MAIN_LAYER).addEntity(this.player); - context.resume(); + public void newGame() { + menu.closeAll(); + resetPlayer(); + context.openMap(ForrestTempleHandler.UID); + context.getMap().getObjectLayer(ForrestTempleHandler.MAIN_LAYER).addEntity(this.player); + context.resume(); + } + + public void exit() { + context.close(); } @Override diff --git a/widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml b/widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml new file mode 100644 index 0000000..ae2c9df --- /dev/null +++ b/widgets/ab9d40b4-eb28-45d7-bff2-9432a05eb41a.xml @@ -0,0 +1,53 @@ + + + + + + + Menu + + + + New Game + + Exit + + + + + + \ No newline at end of file