diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Chest.java b/src/main/java/com/bartlomiejpluta/demo/entity/Chest.java index 7090738..4da9c18 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Chest.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Chest.java @@ -1,30 +1,25 @@ package com.bartlomiejpluta.demo.entity; -import com.bartlomiejpluta.base.api.context.ContextHolder; -import com.bartlomiejpluta.demo.runner.DemoRunner; import com.bartlomiejpluta.demo.world.item.Item; import lombok.Getter; import lombok.NonNull; public class Chest extends MapObject { - private final DemoRunner runner; - @Getter private final Item[] content = new Item[Enemy.MAX_LOOT]; public Chest(@NonNull String id) { super(id); - runner = ((DemoRunner) ContextHolder.INSTANCE.getContext().getGameRunner()); } @Override protected void interact() { - runner.openChestWindow(this); + guiManager.openChestWindow(this); } @Override protected boolean shouldGoFurther(MapObject object) { - return runner.openedWindows() == 0; + return guiManager.openedWindows() == 0; } public Chest addItem(Item item) { diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java b/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java index ded136a..2731f40 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/NamedCharacter.java @@ -4,16 +4,19 @@ import com.bartlomiejpluta.base.api.character.Character; import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.ContextHolder; import com.bartlomiejpluta.base.lib.character.CharacterDelegate; +import com.bartlomiejpluta.demo.menu.GuiManager; import com.bartlomiejpluta.demo.runner.DemoRunner; public abstract class NamedCharacter extends CharacterDelegate { protected final Context context; protected final DemoRunner runner; + protected final GuiManager guiManager; public NamedCharacter(Character character) { super(character); this.context = ContextHolder.INSTANCE.getContext(); this.runner = (DemoRunner) context.getGameRunner(); + this.guiManager = context.getGlobal("gui", GuiManager.class); } public abstract String getName(); diff --git a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java index 2f0522b..2859c9b 100644 --- a/src/main/java/com/bartlomiejpluta/demo/entity/Player.java +++ b/src/main/java/com/bartlomiejpluta/demo/entity/Player.java @@ -2,6 +2,7 @@ package com.bartlomiejpluta.demo.entity; import com.bartlomiejpluta.base.api.character.Character; import com.bartlomiejpluta.demo.world.item.Item; +import com.bartlomiejpluta.demo.world.item.ItemStack; import com.bartlomiejpluta.demo.world.weapon.Ammunition; import com.bartlomiejpluta.demo.world.weapon.Weapon; import lombok.NonNull; @@ -46,7 +47,7 @@ public class Player extends Creature { // Search the enemy corpse if (entity instanceof Enemy enemy && !enemy.isAlive()) { - runner.openLootWindow(enemy); + guiManager.openLootWindow(enemy); interactionCooldown = INTERACTION_COOLDOWN; return; } diff --git a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java index 9d158a5..be732d3 100644 --- a/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java +++ b/src/main/java/com/bartlomiejpluta/demo/map/BaseMapHandler.java @@ -2,6 +2,8 @@ package com.bartlomiejpluta.demo.map; import com.bartlomiejpluta.base.api.camera.Camera; import com.bartlomiejpluta.base.api.context.Context; +import com.bartlomiejpluta.base.api.gui.Window; +import com.bartlomiejpluta.base.api.gui.WindowPosition; import com.bartlomiejpluta.base.api.icon.Icon; import com.bartlomiejpluta.base.api.input.Input; import com.bartlomiejpluta.base.api.input.Key; @@ -19,14 +21,18 @@ import com.bartlomiejpluta.demo.entity.Door; import com.bartlomiejpluta.demo.entity.Enemy; import com.bartlomiejpluta.demo.entity.Player; import com.bartlomiejpluta.demo.event.EnemyDiedEvent; +import com.bartlomiejpluta.demo.menu.GuiManager; import com.bartlomiejpluta.demo.runner.DemoRunner; import com.bartlomiejpluta.demo.world.potion.Medicament; import lombok.NonNull; +import java.util.concurrent.CompletableFuture; + public abstract class BaseMapHandler implements MapHandler { protected Screen screen; protected Context context; protected DemoRunner runner; + protected GuiManager guiManager; protected Camera camera; protected GameMap map; protected Player player; @@ -37,6 +43,7 @@ public abstract class BaseMapHandler implements MapHandler { this.context = context; this.screen = context.getScreen(); this.runner = (DemoRunner) context.getGameRunner(); + this.guiManager = context.getGlobal("gui", GuiManager.class); this.camera = context.getCamera(); this.map = map; this.player = context.getGlobal("player", Player.class); @@ -51,7 +58,7 @@ public abstract class BaseMapHandler implements MapHandler { return; } - if (runner.openedWindows() > 0) { + if (guiManager.openedWindows() > 0) { return; } diff --git a/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java b/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java similarity index 86% rename from src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java rename to src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java index b315937..abdb461 100644 --- a/src/main/java/com/bartlomiejpluta/demo/menu/MenuManager.java +++ b/src/main/java/com/bartlomiejpluta/demo/menu/GuiManager.java @@ -2,25 +2,20 @@ package com.bartlomiejpluta.demo.menu; import A.widgets; import com.bartlomiejpluta.base.api.context.Context; -import com.bartlomiejpluta.base.api.gui.DisplayMode; -import com.bartlomiejpluta.base.api.gui.GUI; -import com.bartlomiejpluta.base.api.gui.UpdateMode; -import com.bartlomiejpluta.base.api.gui.WindowManager; +import com.bartlomiejpluta.base.api.gui.*; import com.bartlomiejpluta.base.api.input.Key; import com.bartlomiejpluta.base.api.input.KeyAction; import com.bartlomiejpluta.base.api.input.KeyEvent; import com.bartlomiejpluta.demo.entity.Chest; import com.bartlomiejpluta.demo.entity.Enemy; -import com.bartlomiejpluta.demo.gui.EquipmentWindow; -import com.bartlomiejpluta.demo.gui.GameMenuWindow; -import com.bartlomiejpluta.demo.gui.LootWindow; -import com.bartlomiejpluta.demo.gui.StartMenuWindow; +import com.bartlomiejpluta.demo.gui.*; import com.bartlomiejpluta.demo.runner.DemoRunner; import lombok.NonNull; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; -public class MenuManager { +public class GuiManager { private final DemoRunner runner; private final Context context; private final GUI gui; @@ -30,9 +25,10 @@ public class MenuManager { private final GameMenuWindow gameMenu; private final EquipmentWindow equipment; private final LootWindow loot; + private final DialogWindow dialog; private final Consumer gameMenuHandler = this::handleGameMenuKeyEvent; - public MenuManager(@NonNull DemoRunner runner, @NonNull Context context) { + public GuiManager(@NonNull DemoRunner runner, @NonNull Context context) { this.runner = runner; this.context = context; this.gui = context.newGUI(); @@ -49,6 +45,8 @@ public class MenuManager { this.gameMenu.getStartMenuBtn().setAction(runner::returnToStartMenu); this.gameMenu.getExitBtn().setAction(runner::exit); + this.dialog = gui.inflateWindow(A.widgets.dialog.uid, DialogWindow.class); + this.equipment = gui.inflateWindow(A.widgets.equipment.uid, EquipmentWindow.class); this.loot = gui.inflateWindow(widgets.loot_menu.uid, LootWindow.class); } @@ -102,6 +100,11 @@ public class MenuManager { manager.setDisplayMode(DisplayMode.DISPLAY_TOP); } + public CompletableFuture showDialog(@NonNull String message, @NonNull WindowPosition position) { + manager.closeAll(); + return manager.open(dialog, message, position); + } + public void openLootWindow(@NonNull Enemy enemy) { manager.closeAll(); diff --git a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java index 6e749c5..6d4457e 100644 --- a/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java +++ b/src/main/java/com/bartlomiejpluta/demo/runner/DemoRunner.java @@ -5,10 +5,8 @@ import com.bartlomiejpluta.base.api.gui.GUI; import com.bartlomiejpluta.base.api.runner.GameRunner; import com.bartlomiejpluta.base.api.screen.Screen; import com.bartlomiejpluta.base.util.profiler.FPSProfiler; -import com.bartlomiejpluta.demo.entity.Chest; -import com.bartlomiejpluta.demo.entity.Enemy; import com.bartlomiejpluta.demo.entity.Player; -import com.bartlomiejpluta.demo.menu.MenuManager; +import com.bartlomiejpluta.demo.menu.GuiManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,7 +16,7 @@ public class DemoRunner implements GameRunner { private final FPSProfiler fpsProfiler = FPSProfiler.create(20); private Screen screen; private Context context; - private MenuManager menu; + private GuiManager guiManager; private GUI hud; private Player player; @@ -35,7 +33,7 @@ public class DemoRunner implements GameRunner { initHUD(); initMenu(); - menu.showStartMenu(); + guiManager.showStartMenu(); screen.show(); } @@ -51,11 +49,8 @@ public class DemoRunner implements GameRunner { } private void initMenu() { - this.menu = new MenuManager(this, context); - } - - public int openedWindows() { - return this.menu.openedWindows(); + this.guiManager = new GuiManager(this, context); + context.putGlobal("gui", guiManager); } private void initHUD() { @@ -79,8 +74,8 @@ public class DemoRunner implements GameRunner { } public void newGame() { - menu.closeAll(); - menu.enableGameMenu(); + guiManager.closeAll(); + guiManager.enableGameMenu(); resetPlayer(); context.openMap(A.maps.hero_home.uid); context.getMap().getObjectLayer(A.maps.hero_home.layers.main).addEntity(this.player); @@ -90,20 +85,12 @@ public class DemoRunner implements GameRunner { } public void returnToStartMenu() { - menu.closeAll(); + guiManager.closeAll(); hud.hide(); context.pause(); context.closeMap(); - menu.disableGameMenu(); - menu.showStartMenu(); - } - - public void openLootWindow(Enemy enemy) { - menu.openLootWindow(enemy); - } - - public void openChestWindow(Chest chest) { - menu.openChestWindow(chest); + guiManager.disableGameMenu(); + guiManager.showStartMenu(); } public void exit() {