From f0826088521f93b615e516a4358081ef8592f104 Mon Sep 17 00:00:00 2001 From: ondra Date: Mon, 19 May 2014 17:02:20 +0200 Subject: [PATCH] bugfixes, bus tweaks --- src/mightypork/gamecore/Config.java | 2 +- .../gamecore/eventbus/clients/BusNode.java | 2 +- .../gamecore/eventbus/clients/ClientList.java | 23 +++++ .../eventbus/clients/DelegatingList.java | 51 +++++++++++ .../components/input/ClickableWrapper.java | 13 ++- .../layout/linear/AbstractLinearWrapper.java | 9 +- .../gamecore/gui/screens/ScreenLayer.java | 6 ++ .../gamecore/gui/screens/ScreenRegistry.java | 4 +- .../gamecore/input/InputSystem.java | 1 - src/mightypork/gamecore/input/KeyStroke.java | 53 ++--------- src/mightypork/gamecore/input/Keys.java | 5 +- .../resources/AsyncResourceLoader.java | 2 +- .../util/files/config/SortedProperties.java | 2 +- src/mightypork/rogue/Launcher.java | 4 +- src/mightypork/rogue/RogueApp.java | 1 - src/mightypork/rogue/RogueKeys.java | 9 +- src/mightypork/rogue/screens/FpsOverlay.java | 2 - .../rogue/screens/game/AskSaveLayer.java | 5 +- .../rogue/screens/game/DeathLayer.java | 17 +++- .../rogue/screens/game/InventoryLayer.java | 5 +- .../rogue/screens/game/ScreenGame.java | 3 - .../rogue/screens/menu/ScreenMainMenu.java | 5 +- .../select_world/ScreenSelectWorld.java | 5 +- src/mightypork/rogue/world/World.java | 4 +- src/mightypork/rogue/world/WorldProvider.java | 5 ++ .../rogue/world/events/PlayerKilledEvent.java | 4 + .../world/gui/interaction/MIPKeyboard.java | 88 +++++++++++++++---- 27 files changed, 211 insertions(+), 119 deletions(-) create mode 100644 src/mightypork/gamecore/eventbus/clients/ClientList.java create mode 100644 src/mightypork/gamecore/eventbus/clients/DelegatingList.java diff --git a/src/mightypork/gamecore/Config.java b/src/mightypork/gamecore/Config.java index 12f89d3..6d84ce3 100644 --- a/src/mightypork/gamecore/Config.java +++ b/src/mightypork/gamecore/Config.java @@ -119,7 +119,7 @@ public class Config { public static void init(File file, String comment) { cfg = new PropertyManager(file, comment); - cfg.cfgNewlineBeforeComments(false); + cfg.cfgNewlineBeforeComments(true); cfg.cfgSeparateSections(true); } diff --git a/src/mightypork/gamecore/eventbus/clients/BusNode.java b/src/mightypork/gamecore/eventbus/clients/BusNode.java index 8ab7909..44e2430 100644 --- a/src/mightypork/gamecore/eventbus/clients/BusNode.java +++ b/src/mightypork/gamecore/eventbus/clients/BusNode.java @@ -48,7 +48,7 @@ public abstract class BusNode implements BusAccess, ClientHub { @Override - public final boolean isListening() + public boolean isListening() { return listening; } diff --git a/src/mightypork/gamecore/eventbus/clients/ClientList.java b/src/mightypork/gamecore/eventbus/clients/ClientList.java new file mode 100644 index 0000000..bb68668 --- /dev/null +++ b/src/mightypork/gamecore/eventbus/clients/ClientList.java @@ -0,0 +1,23 @@ +package mightypork.gamecore.eventbus.clients; + + +import java.util.ArrayList; +import java.util.Collection; + +import mightypork.gamecore.gui.Enableable; + + +/** + * Array-list with varargs constructor + * + * @author MightyPork + */ +public class ClientList extends ArrayList { + + public ClientList(Object... clients) { + for (Object c : clients) { + super.add(c); + } + } + +} diff --git a/src/mightypork/gamecore/eventbus/clients/DelegatingList.java b/src/mightypork/gamecore/eventbus/clients/DelegatingList.java new file mode 100644 index 0000000..1645cfb --- /dev/null +++ b/src/mightypork/gamecore/eventbus/clients/DelegatingList.java @@ -0,0 +1,51 @@ +package mightypork.gamecore.eventbus.clients; + + +import java.util.ArrayList; +import java.util.Collection; + +import mightypork.gamecore.gui.Enableable; + + +/** + * Basic delegating client + * + * @author MightyPork + */ +public class DelegatingList extends ClientList implements DelegatingClient, Enableable { + + private boolean enabled = true; + + + public DelegatingList(Object... clients) { + super(clients); + } + + + @Override + public Collection getChildClients() + { + return this; + } + + + @Override + public boolean doesDelegate() + { + return isEnabled(); + } + + + @Override + public void setEnabled(boolean yes) + { + enabled = yes; + } + + + @Override + public boolean isEnabled() + { + return enabled; + } +} diff --git a/src/mightypork/gamecore/gui/components/input/ClickableWrapper.java b/src/mightypork/gamecore/gui/components/input/ClickableWrapper.java index dd47183..6d4500a 100644 --- a/src/mightypork/gamecore/gui/components/input/ClickableWrapper.java +++ b/src/mightypork/gamecore/gui/components/input/ClickableWrapper.java @@ -1,28 +1,25 @@ package mightypork.gamecore.gui.components.input; -import java.util.ArrayList; import java.util.Collection; -import java.util.List; +import mightypork.gamecore.eventbus.clients.ClientList; import mightypork.gamecore.eventbus.clients.DelegatingClient; +import mightypork.gamecore.eventbus.clients.DelegatingList; import mightypork.gamecore.gui.components.Component; public class ClickableWrapper extends ClickableComponent implements DelegatingClient { - private final Component wrapped; - private final List list; + private final ClientList list; - public ClickableWrapper(Component wrapped) - { + public ClickableWrapper(Component wrapped) { this.wrapped = wrapped; wrapped.setRect(this); - list = new ArrayList<>(1); - list.add(wrapped); + list = new ClientList(wrapped); } diff --git a/src/mightypork/gamecore/gui/components/layout/linear/AbstractLinearWrapper.java b/src/mightypork/gamecore/gui/components/layout/linear/AbstractLinearWrapper.java index 69bcde2..42d9400 100644 --- a/src/mightypork/gamecore/gui/components/layout/linear/AbstractLinearWrapper.java +++ b/src/mightypork/gamecore/gui/components/layout/linear/AbstractLinearWrapper.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import mightypork.gamecore.eventbus.clients.ClientList; import mightypork.gamecore.eventbus.clients.DelegatingClient; import mightypork.gamecore.gui.components.Component; import mightypork.gamecore.gui.components.LinearComponent; @@ -18,14 +19,13 @@ import mightypork.gamecore.gui.components.LinearComponent; public abstract class AbstractLinearWrapper extends LinearComponent implements DelegatingClient { protected final Component wrapped; - private final List list; + private final ClientList list; /** * @param wrapped wrapped component. Can be null. */ - public AbstractLinearWrapper(Component wrapped) - { + public AbstractLinearWrapper(Component wrapped) { this.wrapped = wrapped; if (wrapped != null) { if (wrapped instanceof LinearComponent) { @@ -36,8 +36,7 @@ public abstract class AbstractLinearWrapper extends LinearComponent implements D } } - list = new ArrayList<>(1); - list.add(wrapped); + list = new ClientList(wrapped); } diff --git a/src/mightypork/gamecore/gui/screens/ScreenLayer.java b/src/mightypork/gamecore/gui/screens/ScreenLayer.java index 30015c5..2041d2b 100644 --- a/src/mightypork/gamecore/gui/screens/ScreenLayer.java +++ b/src/mightypork/gamecore/gui/screens/ScreenLayer.java @@ -50,5 +50,11 @@ public abstract class ScreenLayer extends Overlay { protected void onScreenLeave() { } + + @Override + public boolean isListening() + { + return (isVisible() || isEnabled()) && super.isListening(); + } } diff --git a/src/mightypork/gamecore/gui/screens/ScreenRegistry.java b/src/mightypork/gamecore/gui/screens/ScreenRegistry.java index cd13bdd..fb68d29 100644 --- a/src/mightypork/gamecore/gui/screens/ScreenRegistry.java +++ b/src/mightypork/gamecore/gui/screens/ScreenRegistry.java @@ -32,8 +32,7 @@ public class ScreenRegistry extends AppModule implements ScreenRequestListener, /** * @param app app access */ - public ScreenRegistry(AppAccess app) - { + public ScreenRegistry(AppAccess app) { super(app); } @@ -41,6 +40,7 @@ public class ScreenRegistry extends AppModule implements ScreenRequestListener, /** * Add a screen * + * @param name screen key for calling * @param screen added screen */ public void addScreen(String name, Screen screen) diff --git a/src/mightypork/gamecore/input/InputSystem.java b/src/mightypork/gamecore/input/InputSystem.java index 20a5d01..ec637d4 100644 --- a/src/mightypork/gamecore/input/InputSystem.java +++ b/src/mightypork/gamecore/input/InputSystem.java @@ -2,7 +2,6 @@ package mightypork.gamecore.input; import mightypork.gamecore.core.AppAccess; -import mightypork.gamecore.core.events.ShudownRequest; import mightypork.gamecore.core.events.UserQuitRequest; import mightypork.gamecore.eventbus.clients.RootBusNode; import mightypork.gamecore.eventbus.events.Updateable; diff --git a/src/mightypork/gamecore/input/KeyStroke.java b/src/mightypork/gamecore/input/KeyStroke.java index 6030cde..300349e 100644 --- a/src/mightypork/gamecore/input/KeyStroke.java +++ b/src/mightypork/gamecore/input/KeyStroke.java @@ -1,7 +1,6 @@ package mightypork.gamecore.input; -import mightypork.gamecore.util.math.constraints.Pollable; import mightypork.gamecore.util.strings.StringUtils; import org.lwjgl.input.Keyboard; @@ -12,8 +11,8 @@ import org.lwjgl.input.Keyboard; * * @author MightyPork */ -public class KeyStroke { //implements Pollable - +public class KeyStroke { //implements Pollable + public static enum Edge { FALLING, RISING; @@ -22,8 +21,6 @@ public class KeyStroke { //implements Pollable private int mod; private int key; -// private boolean wasDown; - /** * KeyStroke @@ -31,8 +28,7 @@ public class KeyStroke { //implements Pollable * @param key key code * @param mod_mask mods mask */ - public KeyStroke(int key, int mod_mask) - { + public KeyStroke(int key, int mod_mask) { setTo(key, mod_mask); } @@ -42,8 +38,7 @@ public class KeyStroke { //implements Pollable * * @param key key code */ - public KeyStroke(int key) - { + public KeyStroke(int key) { this(key, Keys.MOD_NONE); } @@ -64,43 +59,9 @@ public class KeyStroke { //implements Pollable { this.key = key; this.mod = mod_mask | Keys.keyToMod(key); // for mods alone -// this.wasDown = (InputSystem.isReady() ? isDown() : false); } -// /** -// * Set current state as the last state (ignore it on next trigger event) -// */ -// @Override -// public void poll() -// { -// wasDown = isDown(); -// } - - -// public boolean tryTrigger(Edge edge) -// { -// final boolean down = isDown() && !wasDown; -// final boolean up = !isDown() && wasDown; -// -// boolean retval = false; -// -// switch (edge) { -// case FALLING: -// retval = !wasDown && down; -// break; -// -// case RISING: -// retval = wasDown && up; -// break; -// } -// -// wasDown = isDown(); -// -// return retval; -// } - - public String toDataString() { String s = ""; @@ -130,12 +91,10 @@ public class KeyStroke { //implements Pollable final String keyStr = StringUtils.fromLastChar(dataString1, '+'); final String modStr = StringUtils.toLastChar(dataString1, '+'); - this.key = Keys.keyFromString(keyStr); - this.mod = Keys.modFromString(modStr); + setTo(Keys.keyFromString(keyStr), Keys.modFromString(modStr)); } else { - this.key = Keys.keyFromString(dataString1); - this.mod = Keys.MOD_NONE; + setTo(Keys.keyFromString(dataString1), Keys.MOD_NONE); } } diff --git a/src/mightypork/gamecore/input/Keys.java b/src/mightypork/gamecore/input/Keys.java index cce3a06..c6c00ec 100644 --- a/src/mightypork/gamecore/input/Keys.java +++ b/src/mightypork/gamecore/input/Keys.java @@ -166,8 +166,9 @@ public class Keys { loadAliasMap.put("BACKSPACE", "BACK"); saveAliasMap.put("RETURN", "ENTER"); - saveAliasMap.put("NEXT", "PAGE_DOWN"); - saveAliasMap.put("PRIOR", "PAGE_UP"); + saveAliasMap.put("ESCAPE", "ESC"); + saveAliasMap.put("NEXT", "PGDN"); + saveAliasMap.put("PRIOR", "PGUP"); saveAliasMap.put("DIVIDE", "NUMPAD_DIVIDE"); saveAliasMap.put("MULTIPLY", "NUMPAD_MULTIPLY"); saveAliasMap.put("ADD", "NUMPAD_ADD"); diff --git a/src/mightypork/gamecore/resources/AsyncResourceLoader.java b/src/mightypork/gamecore/resources/AsyncResourceLoader.java index c54bf62..29b8f73 100644 --- a/src/mightypork/gamecore/resources/AsyncResourceLoader.java +++ b/src/mightypork/gamecore/resources/AsyncResourceLoader.java @@ -23,7 +23,7 @@ public class AsyncResourceLoader extends Thread implements ResourceLoader, Destr private final LinkedBlockingQueue toLoad = new LinkedBlockingQueue<>(); private volatile boolean stopped; private BusAccess app; - private volatile boolean mainLoopQueuing = false; + private volatile boolean mainLoopQueuing = true; @Override diff --git a/src/mightypork/gamecore/util/files/config/SortedProperties.java b/src/mightypork/gamecore/util/files/config/SortedProperties.java index a8174d2..c5b2fa9 100644 --- a/src/mightypork/gamecore/util/files/config/SortedProperties.java +++ b/src/mightypork/gamecore/util/files/config/SortedProperties.java @@ -292,7 +292,7 @@ public class SortedProperties extends java.util.Properties { sb.append(c); } - final String read = sb.toString(); + String read = sb.toString().replaceAll("(#|;|//|--)[^\n]*\n", "\n"); final String inputString = escapifyStr(read); final byte[] bs = inputString.getBytes("ISO-8859-1"); diff --git a/src/mightypork/rogue/Launcher.java b/src/mightypork/rogue/Launcher.java index bd24347..3e4db2a 100644 --- a/src/mightypork/rogue/Launcher.java +++ b/src/mightypork/rogue/Launcher.java @@ -18,7 +18,7 @@ public class Launcher { */ public static void main(String[] args) { - Log.f3(Arrays.toString(args)); + Log.f3("Arguments: " + Arrays.toString(args)); File workdir = null; @@ -47,7 +47,7 @@ public class Launcher { final BaseApp app = new RogueApp(workdir, true); // configure the app - app.opt().setBusLogging(true); + app.opt().setBusLogging(false); app.start(); } diff --git a/src/mightypork/rogue/RogueApp.java b/src/mightypork/rogue/RogueApp.java index 7d43cff..aea5dd7 100644 --- a/src/mightypork/rogue/RogueApp.java +++ b/src/mightypork/rogue/RogueApp.java @@ -93,7 +93,6 @@ public final class RogueApp extends BaseApp { bindEventToKey(new ScreenshotRequest(), "global.screenshot"); bindEventToKey(new UserQuitRequest(), "global.quit"); - bindEventToKey(new RogueStateRequest(RogueState.MAIN_MENU), "global.menu"); } diff --git a/src/mightypork/rogue/RogueKeys.java b/src/mightypork/rogue/RogueKeys.java index 915041c..ea05edd 100644 --- a/src/mightypork/rogue/RogueKeys.java +++ b/src/mightypork/rogue/RogueKeys.java @@ -3,7 +3,6 @@ package mightypork.rogue; import mightypork.gamecore.Config; import mightypork.gamecore.Config.KeyOpts; -import mightypork.gamecore.Config.KeySetup; public class RogueKeys implements Config.KeySetup { @@ -12,12 +11,11 @@ public class RogueKeys implements Config.KeySetup { public void addKeys(KeyOpts keys) { keys.add("global.quit", "CTRL+Q", "Quit the game"); - keys.add("global.menu", "CTRL+M", "Direct jump to main menu"); keys.add("global.screenshot", "F2", "Take screenshot (save into working directory)"); keys.add("global.fullscreen", "F11", "Toggle fullscreen"); keys.add("global.fps_meter", "F3", "Toggle FPS meter overlay"); - keys.add("general.back", "ESC", "Leave a dialog or screen"); + keys.add("general.close", "ESC", "Leave a dialog or screen"); keys.add("general.cancel", "ESC", "\"Cancel\" option in dialogs"); keys.add("general.confirm", "ENTER", "\"Confirm\" option in dialogs"); keys.add("general.yes", "Y", "\"Yes\" option in dialogs"); @@ -33,6 +31,11 @@ public class RogueKeys implements Config.KeySetup { keys.add("game.inventory", "I", "Toggle inventory view"); keys.add("game.pause", "P", "Pause the game"); + keys.add("game.walk.up", "UP", "Walk north"); + keys.add("game.walk.down", "DOWN", "Walk south"); + keys.add("game.walk.left", "LEFT", "Walk west"); + keys.add("game.walk.right", "RIGHT", "Walk east"); + keys.add("game.cheat.xray", "CTRL+SHIFT+X", "Cheat to see unexplored tiles"); keys.add("game.inv.use", "E", "Use (eat or equip) the selected item"); diff --git a/src/mightypork/rogue/screens/FpsOverlay.java b/src/mightypork/rogue/screens/FpsOverlay.java index 133915c..6526523 100644 --- a/src/mightypork/rogue/screens/FpsOverlay.java +++ b/src/mightypork/rogue/screens/FpsOverlay.java @@ -7,9 +7,7 @@ import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.Overlay; -import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke.Edge; -import mightypork.gamecore.input.Keys; import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.color.pal.RGB; diff --git a/src/mightypork/rogue/screens/game/AskSaveLayer.java b/src/mightypork/rogue/screens/game/AskSaveLayer.java index 8aecb68..a4d4b64 100644 --- a/src/mightypork/rogue/screens/game/AskSaveLayer.java +++ b/src/mightypork/rogue/screens/game/AskSaveLayer.java @@ -12,9 +12,7 @@ import mightypork.gamecore.gui.components.layout.linear.LinearLayout; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; -import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke.Edge; -import mightypork.gamecore.input.Keys; import mightypork.gamecore.logging.Log; import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; @@ -131,7 +129,7 @@ public class AskSaveLayer extends ScreenLayer { btn2.setAction(discard); btn3.setAction(cancel); - bindKey(Config.getKey("general.back"), Edge.RISING, cancel); + bindKey(Config.getKey("general.close"), Edge.RISING, cancel); bindKey(Config.getKey("general.cancel"), Edge.RISING, cancel); bindKey(Config.getKey("general.yes"), Edge.RISING, save); @@ -162,5 +160,4 @@ public class AskSaveLayer extends ScreenLayer { hideTT.stop(); } } - } diff --git a/src/mightypork/rogue/screens/game/DeathLayer.java b/src/mightypork/rogue/screens/game/DeathLayer.java index 35e3831..feef339 100644 --- a/src/mightypork/rogue/screens/game/DeathLayer.java +++ b/src/mightypork/rogue/screens/game/DeathLayer.java @@ -3,6 +3,7 @@ package mightypork.rogue.screens.game; import java.io.IOException; +import mightypork.gamecore.Config; import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.input.TextButton; @@ -13,6 +14,7 @@ import mightypork.gamecore.gui.components.painters.ImagePainter; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.logging.Log; import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; @@ -65,7 +67,7 @@ public class DeathLayer extends ScreenLayer { btn2.textPainter.setVPaddingPercent(25); linl.add(btn2); - btn1.setAction(new Action() { + Action load = new Action() { @Override protected void execute() @@ -77,16 +79,23 @@ public class DeathLayer extends ScreenLayer { Log.e(e); } } - }); + }; - btn2.setAction(new Action() { + Action quit = new Action() { @Override protected void execute() { getEventBus().send(new RogueStateRequest(RogueState.MAIN_MENU)); } - }); + }; + + btn1.setAction(load); + btn2.setAction(quit); + + bindKey(Config.getKey("game.load"), Edge.RISING, load); + bindKey(Config.getKey("general.confirm"), Edge.RISING, load); + bindKey(Config.getKey("general.close"), Edge.RISING, quit); } diff --git a/src/mightypork/rogue/screens/game/InventoryLayer.java b/src/mightypork/rogue/screens/game/InventoryLayer.java index 6feb2a4..6623291 100644 --- a/src/mightypork/rogue/screens/game/InventoryLayer.java +++ b/src/mightypork/rogue/screens/game/InventoryLayer.java @@ -11,7 +11,6 @@ import mightypork.gamecore.gui.components.painters.TextPainter; import mightypork.gamecore.gui.screens.ScreenLayer; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke.Edge; -import mightypork.gamecore.input.Keys; import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.color.pal.RGB; import mightypork.gamecore.util.math.constraints.num.Num; @@ -31,7 +30,7 @@ public class InventoryLayer extends ScreenLayer { private final KeyStroke keyUse = Config.getKey("game.inv.use"); private final KeyStroke keyDrop = Config.getKey("game.inv.drop"); - private final KeyStroke keyClose = Config.getKey("general.back"); + private final KeyStroke keyClose = Config.getKey("general.close"); private final StringProvider contextStrProv = new StringProvider() { @@ -150,9 +149,7 @@ public class InventoryLayer extends ScreenLayer { @Override public void run() { - System.out.println("test1"); if (isEnabled()) { - System.out.println("test2"); screen.actionToggleInv.run(); } } diff --git a/src/mightypork/rogue/screens/game/ScreenGame.java b/src/mightypork/rogue/screens/game/ScreenGame.java index 9ceb8b0..616d6bb 100644 --- a/src/mightypork/rogue/screens/game/ScreenGame.java +++ b/src/mightypork/rogue/screens/game/ScreenGame.java @@ -8,10 +8,7 @@ import mightypork.gamecore.core.AppAccess; import mightypork.gamecore.core.events.UserQuitRequest; import mightypork.gamecore.gui.Action; import mightypork.gamecore.gui.ActionGroup; -import mightypork.gamecore.gui.screens.LayeredScreen; -import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke.Edge; -import mightypork.gamecore.input.Keys; import mightypork.gamecore.logging.Log; import mightypork.gamecore.util.math.color.Color; import mightypork.rogue.Const; diff --git a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java index a7c26d6..786c164 100644 --- a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java +++ b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java @@ -11,12 +11,9 @@ import mightypork.gamecore.gui.components.layout.RowLayout; import mightypork.gamecore.gui.components.layout.linear.LinearLayout; import mightypork.gamecore.gui.components.painters.ImagePainter; import mightypork.gamecore.gui.components.painters.QuadPainter; -import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; -import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke.Edge; -import mightypork.gamecore.input.Keys; import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.fonts.GLFont; import mightypork.gamecore.util.math.color.Color; @@ -121,7 +118,7 @@ public class ScreenMainMenu extends RogueScreen { rows.add(btn, 2); - bindKey(Config.getKey("general.back"), Edge.RISING, new Runnable() { + bindKey(Config.getKey("general.close"), Edge.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java index ffdebbe..c486817 100644 --- a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java +++ b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java @@ -8,12 +8,9 @@ import mightypork.gamecore.gui.AlignX; import mightypork.gamecore.gui.components.layout.RowLayout; import mightypork.gamecore.gui.components.painters.QuadPainter; import mightypork.gamecore.gui.components.painters.TextPainter; -import mightypork.gamecore.gui.screens.LayeredScreen; import mightypork.gamecore.gui.screens.Screen; import mightypork.gamecore.gui.screens.ScreenLayer; -import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.KeyStroke.Edge; -import mightypork.gamecore.input.Keys; import mightypork.gamecore.resources.Res; import mightypork.gamecore.util.math.color.Color; import mightypork.gamecore.util.math.color.pal.PAL16; @@ -84,7 +81,7 @@ public class ScreenSelectWorld extends RogueScreen { rows.add(slot3); // escape to quitn from here - bindKey(Config.getKey("general.back"), Edge.RISING, new Runnable() { + bindKey(Config.getKey("general.close"), Edge.RISING, new Runnable() { @Override public void run() diff --git a/src/mightypork/rogue/world/World.java b/src/mightypork/rogue/world/World.java index 451642e..d7fb9dc 100644 --- a/src/mightypork/rogue/world/World.java +++ b/src/mightypork/rogue/world/World.java @@ -12,6 +12,7 @@ import mightypork.gamecore.eventbus.EventBus; import mightypork.gamecore.eventbus.clients.DelegatingClient; import mightypork.gamecore.eventbus.events.Updateable; import mightypork.gamecore.logging.Log; +import mightypork.gamecore.util.error.CorruptDataException; import mightypork.gamecore.util.ion.IonBundle; import mightypork.gamecore.util.ion.IonObjBundled; import mightypork.gamecore.util.math.algo.Coord; @@ -92,10 +93,11 @@ public class World implements DelegatingClient, BusAccess, IonObjBundled, Pausea final Entity ent = levels.get(i).getEntity(eid); if (ent != null) { Log.f3("Player entity was really on floor: " + i); + break; } } - throw new RuntimeException(); + throw new CorruptDataException("Player not found in world."); } } diff --git a/src/mightypork/rogue/world/WorldProvider.java b/src/mightypork/rogue/world/WorldProvider.java index c2cf816..60883f2 100644 --- a/src/mightypork/rogue/world/WorldProvider.java +++ b/src/mightypork/rogue/world/WorldProvider.java @@ -111,6 +111,11 @@ public class WorldProvider extends RootBusNode { if (file == null) { throw new IllegalStateException("Trying to save world to a NULL file."); } + + if(world.getPlayer().isDead()) { + throw new IllegalStateException("Cannot save, player is dead."); + } + Ion.toFile(file, world); } diff --git a/src/mightypork/rogue/world/events/PlayerKilledEvent.java b/src/mightypork/rogue/world/events/PlayerKilledEvent.java index 4d4ea63..d0f0516 100644 --- a/src/mightypork/rogue/world/events/PlayerKilledEvent.java +++ b/src/mightypork/rogue/world/events/PlayerKilledEvent.java @@ -2,6 +2,7 @@ package mightypork.rogue.world.events; import mightypork.gamecore.eventbus.BusEvent; +import mightypork.rogue.world.WorldProvider; public class PlayerKilledEvent extends BusEvent { @@ -9,6 +10,9 @@ public class PlayerKilledEvent extends BusEvent { @Override protected void handleBy(PlayerDeathHandler handler) { + // not dead, discard event. + if(!WorldProvider.get().getPlayer().isDead()) return; + handler.onPlayerKilled(); } } diff --git a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java index e657891..748d51e 100644 --- a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java +++ b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java @@ -1,9 +1,18 @@ package mightypork.rogue.world.gui.interaction; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import mightypork.gamecore.Config; +import mightypork.gamecore.eventbus.clients.DelegatingClient; import mightypork.gamecore.eventbus.events.Updateable; import mightypork.gamecore.input.InputSystem; +import mightypork.gamecore.input.KeyBindingPool; +import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.Keys; +import mightypork.gamecore.input.KeyStroke.Edge; import mightypork.gamecore.input.events.KeyEvent; import mightypork.gamecore.input.events.KeyEventHandler; import mightypork.gamecore.util.math.algo.Move; @@ -14,15 +23,55 @@ import mightypork.rogue.world.events.PlayerStepEndListener; import mightypork.rogue.world.gui.MapView; -public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndListener, KeyEventHandler, Updateable { +public class MIPKeyboard extends MapInteractionPlugin implements DelegatingClient, PlayerStepEndListener, Updateable { + + //@formatter:off + private static final KeyStroke[] keys = { + Config.getKey("game.walk.left"), + Config.getKey("game.walk.right"), + Config.getKey("game.walk.up"), + Config.getKey("game.walk.down") + }; - private static final int[] keys = { Keys.LEFT, Keys.RIGHT, Keys.UP, Keys.DOWN }; private static final Move[] sides = { Moves.W, Moves.E, Moves.N, Moves.S }; + //@formatter:on + + private final KeyBindingPool kbp = new KeyBindingPool(); + private final List clients = new ArrayList<>(); + + { + clients.add(kbp); + } - public MIPKeyboard(MapView mapView) + @Override + public boolean doesDelegate() { + return true; + } + + + @Override + public Collection getChildClients() + { + return clients; + } + + + public MIPKeyboard(MapView mapView) { super(mapView); + for (int i = 0; i < 4; i++) { + + final int j = i; + kbp.bindKey(keys[i], Edge.RISING, new Runnable() { + + @Override + public void run() + { + clickSide(sides[j]); + } + }); + } } @@ -40,22 +89,27 @@ public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndLi } - @Override - public void receive(KeyEvent evt) +// @Override +// public void receive(KeyEvent evt) +// { +// +// if (evt.isDown() || mapView.plc.getPlayer().isMoving()) return; // not interested +// +// if (InputSystem.getActiveModKeys() != Keys.MOD_NONE) return; +// +// for (int i = 0; i < 4; i++) { +// if (evt.getKey() == keys[i].getKey()) { +// mapView.plc.clickTile(sides[i]); +// } +// } +// } + + private void clickSide(Move side) { if (isImmobile()) { return; } - - if (evt.isDown() || mapView.plc.getPlayer().isMoving()) return; // not interested - - if (InputSystem.getActiveModKeys() != Keys.MOD_NONE) return; - - for (int i = 0; i < 4; i++) { - if (evt.getKey() == keys[i]) { - mapView.plc.clickTile(sides[i]); - } - } + mapView.plc.clickTile(side); } @@ -65,12 +119,10 @@ public class MIPKeyboard extends MapInteractionPlugin implements PlayerStepEndLi if (mapView.plc.getPlayer().getMoveProgress() < 0.8) return false; - if (InputSystem.getActiveModKeys() != Keys.MOD_NONE) return false; - for (int i = 0; i < 4; i++) { - if (InputSystem.isKeyDown(keys[i])) { + if (keys[i].isDown()) { final Move side = sides[i]; if (mapView.plc.canGo(side)) {