diff --git a/src/junk/BaseApp.java b/src/junk/BaseApp.java index d64c01d..5993226 100644 --- a/src/junk/BaseApp.java +++ b/src/junk/BaseApp.java @@ -3,6 +3,7 @@ package junk; import java.lang.Thread.UncaughtExceptionHandler; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; import mightypork.gamecore.core.App; import mightypork.gamecore.core.AppBackend; import mightypork.gamecore.core.MainLoop; @@ -10,7 +11,6 @@ import mightypork.gamecore.core.WorkDir; import mightypork.gamecore.core.config.Config; import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.gui.screens.impl.CrossfadeOverlay; -import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.resources.Res; import mightypork.gamecore.resources.ResourceSetup; import mightypork.utils.logging.Log; @@ -117,7 +117,7 @@ public abstract class BaseApp extends App implements UncaughtExceptionHandler { * Input */ Log.f2("Initializing Input System..."); - inputSystem = new InputSystem(this); + inputSystem = new LwjglInputModule(this); initInputSystem(inputSystem); /* diff --git a/src/mightypork/gamecore/backends/lwjgl/LwjglBackend.java b/src/mightypork/gamecore/backends/lwjgl/LwjglBackend.java index 00d59d7..d11b58b 100644 --- a/src/mightypork/gamecore/backends/lwjgl/LwjglBackend.java +++ b/src/mightypork/gamecore/backends/lwjgl/LwjglBackend.java @@ -6,6 +6,7 @@ import mightypork.gamecore.backends.lwjgl.audio.SlickAudioModule; import mightypork.gamecore.backends.lwjgl.graphics.LwjglGraphicsModule; import mightypork.gamecore.core.AppBackend; import mightypork.gamecore.graphics.GraphicsModule; +import mightypork.gamecore.input.InputModule; /** @@ -17,6 +18,7 @@ public class LwjglBackend extends AppBackend { private LwjglGraphicsModule graphics; private SlickAudioModule audio; + private LwjglInputModule input; @Override @@ -24,6 +26,11 @@ public class LwjglBackend extends AppBackend { { addChildClient(graphics = new LwjglGraphicsModule()); addChildClient(audio = new SlickAudioModule()); + addChildClient(input = new LwjglInputModule()); + + graphics.init(); + audio.init(); + input.init(); app.addInitTask(new InitTaskRedirectSlickLog()); } @@ -41,4 +48,11 @@ public class LwjglBackend extends AppBackend { { return audio; } + + + @Override + public InputModule getInput() + { + return input; + } } diff --git a/src/mightypork/gamecore/input/InputSystem.java b/src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java similarity index 60% rename from src/mightypork/gamecore/input/InputSystem.java rename to src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java index af27fa8..71b3b1d 100644 --- a/src/mightypork/gamecore/input/InputSystem.java +++ b/src/mightypork/gamecore/backends/lwjgl/LwjglInputModule.java @@ -1,14 +1,13 @@ -package mightypork.gamecore.input; +package mightypork.gamecore.backends.lwjgl; import mightypork.gamecore.core.App; import mightypork.gamecore.core.events.UserQuitRequest; -import mightypork.gamecore.input.events.InputReadyEvent; +import mightypork.gamecore.input.InputModule; +import mightypork.gamecore.input.Keys; import mightypork.gamecore.input.events.KeyEvent; import mightypork.gamecore.input.events.MouseButtonEvent; import mightypork.gamecore.input.events.MouseMotionEvent; -import mightypork.utils.eventbus.clients.BusNode; -import mightypork.utils.interfaces.Destroyable; import mightypork.utils.interfaces.Updateable; import mightypork.utils.math.constraints.vect.Vect; import mightypork.utils.math.constraints.vect.var.VectVar; @@ -24,9 +23,7 @@ import org.lwjgl.opengl.Display; * * @author Ondřej Hruška (MightyPork) */ -public class InputSystem extends BusNode implements Updateable, KeyBinder, Destroyable { - - private static boolean inited = false; +public class LwjglInputModule extends InputModule implements Updateable { /** Current mouse position */ private static final Vect mousePos = new Vect() { @@ -49,40 +46,18 @@ public class InputSystem extends BusNode implements Updateable, KeyBinder, Destr } }; - private final KeyBindingPool keybindings; - - private final VectVar mouseMove = Vect.makeVar(); - private final VectVar mouseLastPos = Vect.makeVar(); - - - /** - * @param app app access - */ - public InputSystem() { - - initDevices(); - - // global keybindings - keybindings = new KeyBindingPool(); - addChildClient(keybindings); - - App.bus().send(new InputReadyEvent()); - } - @Override - public final void destroy() + public void destroy() { Mouse.destroy(); Keyboard.destroy(); } - private void initDevices() + @Override + protected void initDevices() { - if (inited) return; - inited = true; - try { Mouse.create(); Keyboard.create(); @@ -92,19 +67,8 @@ public class InputSystem extends BusNode implements Updateable, KeyBinder, Destr } } - - @Override - public final void bindKey(KeyStroke stroke, Edge edge, Runnable task) - { - keybindings.bindKey(stroke, edge, task); - } - - - @Override - public void unbindKey(KeyStroke stroke) - { - keybindings.unbindKey(stroke); - } + private final VectVar mouseMove = Vect.makeVar(); + private final VectVar mouseLastPos = Vect.makeVar(); @Override @@ -172,94 +136,62 @@ public class InputSystem extends BusNode implements Updateable, KeyBinder, Destr } - /** - * Get absolute mouse position. This vect is final and views at it can - * safely be made. - * - * @return mouse position - */ - public static Vect getMousePos() + @Override + public Vect getMousePos() { return mousePos; } - /** - * @return true if mouse is inside window. - */ - public static boolean isMouseInside() + @Override + public boolean isMouseInside() { return Mouse.isInsideWindow(); } - /** - * Trap mouse cursor in the window - * - * @param grab true to grab - */ - public static void grabMouse(boolean grab) + @Override + public void grabMouse(boolean grab) { Mouse.setGrabbed(grab); } - /** - * Check if key is down - * - * @param key key to check (constant from the {@link Keys} class) - * @return is down - */ - public static boolean isKeyDown(int key) + @Override + public boolean isKeyDown(int key) { return Keyboard.isKeyDown(key); } - /** - * Check mouse button state - * - * @param button button to test (0 left, 1 right, 2 middle) - * @return button is down - */ - public static boolean isMouseButtonDown(int button) + @Override + public boolean isMouseButtonDown(int button) { return Mouse.isButtonDown(button); } - /** - * @return bit mask of active mod keys - */ - public static int getActiveModKeys() + @Override + public int getActiveModKeys() { int mods = 0; - if (Keyboard.isKeyDown(Keys.L_ALT) || Keyboard.isKeyDown(Keys.R_ALT)) { + if (isKeyDown(Keys.L_ALT) || isKeyDown(Keys.R_ALT)) { mods |= Keys.MOD_ALT; } - if (Keyboard.isKeyDown(Keys.L_SHIFT) || Keyboard.isKeyDown(Keys.R_SHIFT)) { + if (isKeyDown(Keys.L_SHIFT) || isKeyDown(Keys.R_SHIFT)) { mods |= Keys.MOD_SHIFT; } - if (Keyboard.isKeyDown(Keys.L_CONTROL) || Keyboard.isKeyDown(Keys.R_CONTROL)) { + if (isKeyDown(Keys.L_CONTROL) || isKeyDown(Keys.R_CONTROL)) { mods |= Keys.MOD_CONTROL; } - if (Keyboard.isKeyDown(Keys.L_META) || Keyboard.isKeyDown(Keys.R_META)) { + if (isKeyDown(Keys.L_META) || isKeyDown(Keys.R_META)) { mods |= Keys.MOD_META; } return mods; } - - - /** - * @return true if the system is initialized - */ - public static boolean isReady() - { - return inited; - } } diff --git a/src/mightypork/gamecore/backends/lwjgl/audio/SlickAudioModule.java b/src/mightypork/gamecore/backends/lwjgl/audio/SlickAudioModule.java index 30d379d..729b556 100644 --- a/src/mightypork/gamecore/backends/lwjgl/audio/SlickAudioModule.java +++ b/src/mightypork/gamecore/backends/lwjgl/audio/SlickAudioModule.java @@ -22,33 +22,22 @@ import org.newdawn.slick.openal.SoundStore; */ public class SlickAudioModule extends AudioModule { - private static final Vect INITIAL_LISTENER_POS = Vect.ZERO; - private static final int MAX_SOURCES = 256; + private final VectVar listenerPos = Vect.makeVar(); - private VectVar listener = Vect.makeVar(); - private static boolean soundSystemInited = false; - - public SlickAudioModule() { - - if (!soundSystemInited) { - soundSystemInited = true; - - try { - SoundStore.get().setMaxSources(MAX_SOURCES); - SoundStore.get().init(); - setListenerPos(INITIAL_LISTENER_POS); - } catch (final Throwable t) { - Log.e("Error initializing sound system.", t); - } - } + @Override + public void init() + { + SoundStore.get().setMaxSources(256); + SoundStore.get().init(); + setListenerPos(Vect.ZERO); } @Override public void setListenerPos(Vect pos) { - listener.setTo(pos); + listenerPos.setTo(pos); final FloatBuffer buf3 = BufferHelper.alloc(3); final FloatBuffer buf6 = BufferHelper.alloc(6); buf3.clear(); @@ -66,7 +55,7 @@ public class SlickAudioModule extends AudioModule { @Override public Vect getListenerPos() { - return listener; + return listenerPos; } diff --git a/src/mightypork/gamecore/backends/lwjgl/graphics/LwjglGraphicsModule.java b/src/mightypork/gamecore/backends/lwjgl/graphics/LwjglGraphicsModule.java index dccc72e..1ce147f 100644 --- a/src/mightypork/gamecore/backends/lwjgl/graphics/LwjglGraphicsModule.java +++ b/src/mightypork/gamecore/backends/lwjgl/graphics/LwjglGraphicsModule.java @@ -49,7 +49,7 @@ public class LwjglGraphicsModule extends GraphicsModule { /** FPS the user wants */ private int targetFps; /** FPS meter used for measuring actual FPS */ - private FpsMeter fpsMeter; + private FpsMeter fpsMeter = new FpsMeter(); /** Flag that at the end of frame, fullscreen should be toggled. */ private boolean fullscreenToggleRequested; @@ -79,6 +79,17 @@ public class LwjglGraphicsModule extends GraphicsModule { private static final Rect rect = Rect.make(screenSize); + @Override + public void init() + { + try { + Display.create(); + } catch (final Exception e) { + throw new RuntimeException("Could not initialize display.", e); + } + } + + @Override public void setColor(Color color) { @@ -423,27 +434,6 @@ public class LwjglGraphicsModule extends GraphicsModule { } - @Override - public void createDisplay() - { - if (Display.isCreated()) throw new IllegalStateException("Display already created."); - try { - Display.create(); - - fpsMeter = new FpsMeter(); - - if (fullscreenSetRequested && fullscreenSetState) { - doToggleFullscreen(); - Display.update(); - fullscreenSetRequested = false; - } - - } catch (final Exception e) { - throw new RuntimeException("Could not initialize display.", e); - } - } - - @Override public void setFullscreen(boolean fs) { diff --git a/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFont.java b/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFont.java index af9e25d..127b203 100644 --- a/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFont.java +++ b/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFont.java @@ -27,7 +27,6 @@ public class DeferredLwjglFont extends DeferredFont { private IFont font = null; - /** * A font from resource * diff --git a/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFontFromSystem.java b/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFontFromSystem.java index 6899e19..841b15b 100644 --- a/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFontFromSystem.java +++ b/src/mightypork/gamecore/backends/lwjgl/graphics/font/DeferredLwjglFontFromSystem.java @@ -4,7 +4,6 @@ package mightypork.gamecore.backends.lwjgl.graphics.font; import java.awt.Font; import java.io.IOException; -import mightypork.gamecore.graphics.textures.FilterMode; import mightypork.utils.annotations.Alias; diff --git a/src/mightypork/gamecore/core/App.java b/src/mightypork/gamecore/core/App.java index bdd3a3a..62834e4 100644 --- a/src/mightypork/gamecore/core/App.java +++ b/src/mightypork/gamecore/core/App.java @@ -2,17 +2,12 @@ package mightypork.gamecore.core; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; import mightypork.gamecore.audio.AudioModule; import mightypork.gamecore.core.config.Config; -import mightypork.gamecore.core.init.InitTaskCrashHandler; -import mightypork.gamecore.core.init.InitTaskIonizables; -import mightypork.gamecore.core.init.InitTaskLog; -import mightypork.gamecore.core.init.InitTaskLogHeader; import mightypork.gamecore.graphics.GraphicsModule; +import mightypork.gamecore.input.InputModule; import mightypork.utils.annotations.Stub; import mightypork.utils.eventbus.EventBus; import mightypork.utils.eventbus.clients.BusNode; @@ -164,6 +159,10 @@ public class App extends BusNode { } + /** + * Shut down the running instance.
+ * Deinitialize backend modules and terminate the JVM. + */ public static void shutdown() { if (instance == null) throw new IllegalStateException("App is not running."); @@ -199,9 +198,9 @@ public class App extends BusNode { /** - * Get graphics module from the backend + * Get graphics module from the running app's backend * - * @return backend + * @return graphics module */ public static GraphicsModule gfx() { @@ -210,9 +209,9 @@ public class App extends BusNode { /** - * Get audio module from the backend + * Get audio module from the running app's backend * - * @return backend + * @return audio module */ public static AudioModule audio() { @@ -220,6 +219,17 @@ public class App extends BusNode { } + /** + * Get input module from the running app's backend + * + * @return input module + */ + public static InputModule input() + { + return instance.backend.getInput(); + } + + /** * Get event bus instance. * diff --git a/src/mightypork/gamecore/core/AppBackend.java b/src/mightypork/gamecore/core/AppBackend.java index 814f872..f2f03ed 100644 --- a/src/mightypork/gamecore/core/AppBackend.java +++ b/src/mightypork/gamecore/core/AppBackend.java @@ -3,6 +3,7 @@ package mightypork.gamecore.core; import mightypork.gamecore.audio.AudioModule; import mightypork.gamecore.graphics.GraphicsModule; +import mightypork.gamecore.input.InputModule; import mightypork.utils.eventbus.clients.BusNode; @@ -53,4 +54,12 @@ public abstract class AppBackend extends BusNode { * @return audio module */ public abstract AudioModule getAudio(); + + + /** + * Get input module + * + * @return input module + */ + public abstract InputModule getInput(); } diff --git a/src/mightypork/gamecore/core/BackendModule.java b/src/mightypork/gamecore/core/BackendModule.java index c70e1f5..a4dd870 100644 --- a/src/mightypork/gamecore/core/BackendModule.java +++ b/src/mightypork/gamecore/core/BackendModule.java @@ -13,6 +13,9 @@ import mightypork.utils.interfaces.Destroyable; */ public abstract class BackendModule extends BusNode implements Destroyable { + public abstract void init(); + + @Override @Stub public void destroy() diff --git a/src/mightypork/gamecore/core/InitTask.java b/src/mightypork/gamecore/core/InitTask.java index 69c2552..7be6c86 100644 --- a/src/mightypork/gamecore/core/InitTask.java +++ b/src/mightypork/gamecore/core/InitTask.java @@ -28,8 +28,9 @@ public abstract class InitTask { * Assign the initialized app instance to a protected "app" field. * * @param app app - */ - void bind(App app) { + */ + void bind(App app) + { this.app = app; } diff --git a/src/mightypork/gamecore/core/config/InitTaskConfig.java b/src/mightypork/gamecore/core/config/InitTaskConfig.java index 87bf139..0ced5e9 100644 --- a/src/mightypork/gamecore/core/config/InitTaskConfig.java +++ b/src/mightypork/gamecore/core/config/InitTaskConfig.java @@ -3,7 +3,6 @@ package mightypork.gamecore.core.config; import mightypork.gamecore.core.InitTask; import mightypork.utils.annotations.Stub; -import mightypork.utils.exceptions.IllegalValueException; /** diff --git a/src/mightypork/gamecore/core/init/InitTaskDisplay.java b/src/mightypork/gamecore/core/init/InitTaskDisplay.java index f84526c..20cf522 100644 --- a/src/mightypork/gamecore/core/init/InitTaskDisplay.java +++ b/src/mightypork/gamecore/core/init/InitTaskDisplay.java @@ -85,8 +85,6 @@ public class InitTaskDisplay extends InitTask { gfx.setTargetFps(fps); if (fullscreen) gfx.setFullscreen(true); - - gfx.createDisplay(); } diff --git a/src/mightypork/gamecore/graphics/GraphicsModule.java b/src/mightypork/gamecore/graphics/GraphicsModule.java index 5209c40..6e09e4d 100644 --- a/src/mightypork/gamecore/graphics/GraphicsModule.java +++ b/src/mightypork/gamecore/graphics/GraphicsModule.java @@ -4,6 +4,7 @@ package mightypork.gamecore.graphics; import mightypork.gamecore.core.BackendModule; import mightypork.gamecore.graphics.textures.DeferredTexture; import mightypork.gamecore.graphics.textures.TxQuad; +import mightypork.gamecore.gui.events.ViewportChangeEvent; import mightypork.utils.math.color.Color; import mightypork.utils.math.color.Grad; import mightypork.utils.math.constraints.rect.Rect; @@ -280,13 +281,9 @@ public abstract class GraphicsModule extends BackendModule { /** - * Create a main window, if needed - */ - public abstract void createDisplay(); - - - /** - * Set fullscreen + * Set fullscreen. The fullscreen state will be changed when possible (eg. + * at the end of the current frame) and a {@link ViewportChangeEvent} will + * be fired. * * @param fs true for fullscreen */ @@ -294,13 +291,15 @@ public abstract class GraphicsModule extends BackendModule { /** - * Request fullscreen toggle (eg. at the end of render frame) + * Request fullscreen toggle. See setFullscreen() for more info) */ public abstract void switchFullscreen(); /** - * Get fullscreen state + * Get fullscreen state (note that methods changing fullscreen may not have + * immediate effect, so this method may report the old state if the + * fullscreen state has not yet been changed). * * @return is fullscreen */ diff --git a/src/mightypork/gamecore/gui/components/BaseComponent.java b/src/mightypork/gamecore/gui/components/BaseComponent.java index a863efb..8dd1d1d 100644 --- a/src/mightypork/gamecore/gui/components/BaseComponent.java +++ b/src/mightypork/gamecore/gui/components/BaseComponent.java @@ -1,10 +1,11 @@ package mightypork.gamecore.gui.components; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; +import mightypork.gamecore.core.App; import mightypork.gamecore.graphics.Renderable; import mightypork.gamecore.gui.events.LayoutChangeEvent; import mightypork.gamecore.gui.events.LayoutChangeListener; -import mightypork.gamecore.input.InputSystem; import mightypork.utils.Support; import mightypork.utils.annotations.Stub; import mightypork.utils.interfaces.Enableable; @@ -98,7 +99,7 @@ public abstract class BaseComponent extends AbstractRectCache implements Compone @Override public final boolean isMouseOver() { - return InputSystem.getMousePos().isInside(this); + return App.input().getMousePos().isInside(this); } diff --git a/src/mightypork/gamecore/gui/components/input/TextButton.java b/src/mightypork/gamecore/gui/components/input/TextButton.java index f9d64c6..9a2ca7c 100644 --- a/src/mightypork/gamecore/gui/components/input/TextButton.java +++ b/src/mightypork/gamecore/gui/components/input/TextButton.java @@ -1,10 +1,11 @@ package mightypork.gamecore.gui.components.input; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; +import mightypork.gamecore.core.App; import mightypork.gamecore.graphics.fonts.IFont; import mightypork.gamecore.gui.components.DynamicWidthComponent; import mightypork.gamecore.gui.components.painters.TextPainter; -import mightypork.gamecore.input.InputSystem; import mightypork.utils.math.AlignX; import mightypork.utils.math.color.Color; import mightypork.utils.math.color.pal.RGB; @@ -46,7 +47,7 @@ public class TextButton extends ClickableComponent implements DynamicWidthCompon protected void renderComponent() { if (isMouseOver()) { - if (InputSystem.isMouseButtonDown(0)) { + if (App.input().isMouseButtonDown(0)) { offset.setTo(offsetUnder); } else { offset.setTo(hoverMove ? offsetOver : offsetPassive); diff --git a/src/mightypork/gamecore/gui/screens/Overlay.java b/src/mightypork/gamecore/gui/screens/Overlay.java index 5f28f2f..f326614 100644 --- a/src/mightypork/gamecore/gui/screens/Overlay.java +++ b/src/mightypork/gamecore/gui/screens/Overlay.java @@ -4,12 +4,12 @@ package mightypork.gamecore.gui.screens; import java.util.ArrayList; import java.util.Collection; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; import mightypork.gamecore.core.App; import mightypork.gamecore.graphics.Renderable; import mightypork.gamecore.gui.components.layout.ConstraintLayout; import mightypork.gamecore.gui.events.LayoutChangeListener; import mightypork.gamecore.input.Edge; -import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.input.KeyBinder; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; @@ -52,7 +52,7 @@ public abstract class Overlay extends BusNode implements Comparable, Up public Overlay() { - this.mouse = InputSystem.getMousePos(); + this.mouse = App.input().getMousePos(); this.root = new ConstraintLayout(App.gfx().getRect()); addChildClient(root); diff --git a/src/mightypork/gamecore/input/InputModule.java b/src/mightypork/gamecore/input/InputModule.java new file mode 100644 index 0000000..505e355 --- /dev/null +++ b/src/mightypork/gamecore/input/InputModule.java @@ -0,0 +1,91 @@ +package mightypork.gamecore.input; + + +import mightypork.gamecore.core.BackendModule; +import mightypork.utils.math.constraints.vect.Vect; + + +/** + * Abstract input module + * + * @author Ondřej Hruška (MightyPork) + */ +public abstract class InputModule extends BackendModule implements KeyBinder { + + protected KeyBindingPool keybindings; + + + @Override + public final void init() + { + keybindings = new KeyBindingPool(); + addChildClient(keybindings); + initDevices(); + } + + + protected abstract void initDevices(); + + + @Override + public void bindKey(KeyStroke stroke, Edge edge, Runnable task) + { + keybindings.bindKey(stroke, edge, task); + } + + + @Override + public void unbindKey(KeyStroke stroke) + { + keybindings.unbindKey(stroke); + } + + + /** + * Get absolute mouse position. Should always return the same Vect instance + * (use a VectVar or similar). + * + * @return mouse position + */ + public abstract Vect getMousePos(); + + + /** + * Check if mouse is inside window + * + * @return true if mouse is inside window. + */ + public abstract boolean isMouseInside(); + + + /** + * Trap mouse cursor in the window / release it + * + * @param grab true to grab, false to release + */ + public abstract void grabMouse(boolean grab); + + + /** + * Check if key is down (constant from the {@link Keys} class) + * + * @param key key to check + * @return is down + */ + public abstract boolean isKeyDown(int key); + + + /** + * Check mouse button state + * + * @param button button to test (0 left, 1 right, 2 middle) + * @return button is down + */ + public abstract boolean isMouseButtonDown(int button); + + + /** + * @return bit mask of active mod keys + */ + public abstract int getActiveModKeys(); +} diff --git a/src/mightypork/gamecore/input/KeyBinding.java b/src/mightypork/gamecore/input/KeyBinding.java index 3790e24..cbf6618 100644 --- a/src/mightypork/gamecore/input/KeyBinding.java +++ b/src/mightypork/gamecore/input/KeyBinding.java @@ -1,7 +1,6 @@ package mightypork.gamecore.input; -import mightypork.gamecore.input.events.InputReadyListener; import mightypork.gamecore.input.events.KeyEvent; import mightypork.gamecore.input.events.KeyEventHandler; @@ -11,7 +10,7 @@ import mightypork.gamecore.input.events.KeyEventHandler; * * @author Ondřej Hruška (MightyPork) */ -public class KeyBinding implements KeyEventHandler, InputReadyListener { +public class KeyBinding implements KeyEventHandler { private final KeyStroke keystroke; private Runnable handler; @@ -28,8 +27,7 @@ public class KeyBinding implements KeyEventHandler, InputReadyListener { this.keystroke = stroke; this.handler = handler; this.edge = edge; - - if (InputSystem.isReady()) wasDown = stroke.isDown(); + wasDown = stroke.isDown(); } @@ -69,12 +67,4 @@ public class KeyBinding implements KeyEventHandler, InputReadyListener { handler.run(); } } - - - @Override - public void onInputReady() - { - wasDown = keystroke.isDown(); - } - } diff --git a/src/mightypork/gamecore/input/KeyStroke.java b/src/mightypork/gamecore/input/KeyStroke.java index 62715d3..b815b23 100644 --- a/src/mightypork/gamecore/input/KeyStroke.java +++ b/src/mightypork/gamecore/input/KeyStroke.java @@ -1,6 +1,7 @@ package mightypork.gamecore.input; +import mightypork.gamecore.core.App; import mightypork.utils.string.StringUtil; import org.lwjgl.input.Keyboard; @@ -28,9 +29,10 @@ public class KeyStroke { } - // FIXME TODO can probably be immutable! /** - * Change to... + * Change to...
+ * (KeyStroke is mutable, so that upon changing it in Config, all existing + * key bindings are updated automatically.) * * @param key key code * @param modmask modifiers @@ -58,7 +60,7 @@ public class KeyStroke { public boolean isDown() { boolean st = Keyboard.isKeyDown(key); - st &= (InputSystem.getActiveModKeys() == mod); + st &= (App.input().getActiveModKeys() == mod); return st; } diff --git a/src/mightypork/gamecore/input/events/InputReadyEvent.java b/src/mightypork/gamecore/input/events/InputReadyEvent.java deleted file mode 100644 index 0e4b469..0000000 --- a/src/mightypork/gamecore/input/events/InputReadyEvent.java +++ /dev/null @@ -1,15 +0,0 @@ -package mightypork.gamecore.input.events; - - -import mightypork.utils.eventbus.BusEvent; - - -public class InputReadyEvent extends BusEvent { - - @Override - protected void handleBy(InputReadyListener handler) - { - handler.onInputReady(); - } - -} diff --git a/src/mightypork/gamecore/input/events/InputReadyListener.java b/src/mightypork/gamecore/input/events/InputReadyListener.java deleted file mode 100644 index f48b22a..0000000 --- a/src/mightypork/gamecore/input/events/InputReadyListener.java +++ /dev/null @@ -1,7 +0,0 @@ -package mightypork.gamecore.input.events; - - -public interface InputReadyListener { - - void onInputReady(); -} diff --git a/src/mightypork/gamecore/resources/loading/ResourceLoader.java b/src/mightypork/gamecore/resources/loading/ResourceLoader.java index 24047a2..b06a669 100644 --- a/src/mightypork/gamecore/resources/loading/ResourceLoader.java +++ b/src/mightypork/gamecore/resources/loading/ResourceLoader.java @@ -1,5 +1,6 @@ package mightypork.gamecore.resources.loading; + import mightypork.gamecore.resources.DeferredResource; diff --git a/src/mightypork/rogue/RogueApp.java b/src/mightypork/rogue/RogueApp.java index bc8dcf0..4a65621 100644 --- a/src/mightypork/rogue/RogueApp.java +++ b/src/mightypork/rogue/RogueApp.java @@ -4,6 +4,7 @@ package mightypork.rogue; import junk.AppInitOptions; import junk.BaseApp; import mightypork.gamecore.backends.lwjgl.LwjglBackend; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; import mightypork.gamecore.core.config.Config; import mightypork.gamecore.core.events.MainLoopRequest; import mightypork.gamecore.core.events.ShudownRequest; @@ -15,7 +16,6 @@ import mightypork.gamecore.gui.events.ViewportChangeEvent; import mightypork.gamecore.gui.events.ViewportChangeListener; import mightypork.gamecore.gui.screens.ScreenRegistry; import mightypork.gamecore.input.Edge; -import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.resources.Res; import mightypork.rogue.RogueStateManager.RogueState; import mightypork.rogue.events.RogueStateRequest; @@ -104,7 +104,7 @@ public final class RogueApp extends BaseApp implements ViewportChangeListener, S @Override - protected void initInputSystem(InputSystem input) + protected void initInputSystem(LwjglInputModule input) { // this will work only with reusable events (such as requests) bindEventToKey(new FullscreenToggleRequest(), "global.fullscreen"); diff --git a/src/mightypork/rogue/RogueKeys.java b/src/mightypork/rogue/RogueKeys.java index 66911f2..bb895fe 100644 --- a/src/mightypork/rogue/RogueKeys.java +++ b/src/mightypork/rogue/RogueKeys.java @@ -1,8 +1,6 @@ package mightypork.rogue; - - public class RogueKeys implements KeySetup { @Override diff --git a/src/mightypork/rogue/RogueRoutes.java b/src/mightypork/rogue/RogueRoutes.java index ac679db..5c62a05 100644 --- a/src/mightypork/rogue/RogueRoutes.java +++ b/src/mightypork/rogue/RogueRoutes.java @@ -1,8 +1,6 @@ package mightypork.rogue; - - public class RogueRoutes implements RouteSetup { @Override diff --git a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java index 8936d3d..672dcad 100644 --- a/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java +++ b/src/mightypork/rogue/world/gui/interaction/MIPKeyboard.java @@ -5,9 +5,9 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; import mightypork.gamecore.core.config.Config; import mightypork.gamecore.input.Edge; -import mightypork.gamecore.input.InputSystem; import mightypork.gamecore.input.KeyBindingPool; import mightypork.gamecore.input.KeyStroke; import mightypork.gamecore.input.Keys; @@ -103,7 +103,7 @@ public class MIPKeyboard extends MapInteractionPlugin implements DelegatingClien if (mapView.plc.getPlayer().getMoveProgress() < 0.8) return false; - if (InputSystem.getActiveModKeys() != Keys.MOD_NONE) return false; + if (LwjglInputModule.getActiveModKeys() != Keys.MOD_NONE) return false; for (int i = 0; i < 4; i++) { if (keys[i].isDown()) { diff --git a/src/mightypork/rogue/world/gui/interaction/MIPMouse.java b/src/mightypork/rogue/world/gui/interaction/MIPMouse.java index d59a93f..56b202d 100644 --- a/src/mightypork/rogue/world/gui/interaction/MIPMouse.java +++ b/src/mightypork/rogue/world/gui/interaction/MIPMouse.java @@ -1,7 +1,7 @@ package mightypork.rogue.world.gui.interaction; -import mightypork.gamecore.input.InputSystem; +import mightypork.gamecore.backends.lwjgl.LwjglInputModule; import mightypork.rogue.world.entity.impl.EntityPlayer; import mightypork.rogue.world.events.PlayerStepEndListener; import mightypork.rogue.world.gui.MapView; @@ -30,10 +30,10 @@ public class MIPMouse extends MapInteractionPlugin implements PlayerStepEndListe { if (isImmobile()) return; - final Vect pos = InputSystem.getMousePos(); + final Vect pos = LwjglInputModule.getMousePos(); if (!pos.isInside(mapView)) return; - if (InputSystem.isMouseButtonDown(LEFT)) { + if (LwjglInputModule.isMouseButtonDown(LEFT)) { if (mouseWalk(pos)) return; if (mapView.plc.getPlayer().isMoving() && troToNav(pos)) return; } @@ -117,10 +117,10 @@ public class MIPMouse extends MapInteractionPlugin implements PlayerStepEndListe { if (isImmobile()) return; - final Vect pos = InputSystem.getMousePos(); + final Vect pos = LwjglInputModule.getMousePos(); if (!pos.isInside(mapView)) return; - if (InputSystem.isMouseButtonDown(LEFT)) { + if (LwjglInputModule.isMouseButtonDown(LEFT)) { if (mouseWalk(pos)) return; if (mapView.plc.getPlayer().isMoving() && troToNav(pos)) return; }