diff --git a/plutocore/src/main/java/cz/tefek/pluto/engine/input/InputBus.java b/plutocore/src/main/java/cz/tefek/pluto/engine/input/InputBus.java index 2f5e0ad..b6e98dd 100644 --- a/plutocore/src/main/java/cz/tefek/pluto/engine/input/InputBus.java +++ b/plutocore/src/main/java/cz/tefek/pluto/engine/input/InputBus.java @@ -2,14 +2,18 @@ package cz.tefek.pluto.engine.input; import org.lwjgl.glfw.GLFW; +import javax.annotation.concurrent.ThreadSafe; + import cz.tefek.pluto.engine.display.Display; +@ThreadSafe public class InputBus { private static ThreadLocal keyboard = new ThreadLocal<>(); private static ThreadLocal mouseButton = new ThreadLocal<>(); private static ThreadLocal cursorPosition = new ThreadLocal<>(); private static ThreadLocal scroll = new ThreadLocal<>(); + private static ThreadLocal charInput = new ThreadLocal<>(); public static void init(Display display) { @@ -25,18 +29,27 @@ public class InputBus scroll.set(new ScrollInputCallback()); GLFW.glfwSetScrollCallback(display.getWindowPointer(), scroll.get()); + charInput.set(new KeyboardCharInput()); + GLFW.glfwSetCharCallback(display.getWindowPointer(), charInput.get()); + } public static void destroy() { scroll.get().free(); scroll.remove(); + mouseButton.get().free(); mouseButton.remove(); + keyboard.get().free(); keyboard.remove(); + cursorPosition.get().free(); cursorPosition.remove(); + + charInput.get().free(); + charInput.remove(); } public static KeyboardInputCallback keyboard() @@ -65,6 +78,7 @@ public class InputBus mouseButton.get().reset(); scroll.get().reset(); cursorPosition.get().reset(); + charInput.get().reset(); } public static class Mouse @@ -134,5 +148,10 @@ public class InputBus { return keyboard.get().isKeyDown(key); } + + public static String getTypedText() + { + return charInput.get().getTypedText(); + } } } diff --git a/plutocore/src/main/java/cz/tefek/pluto/engine/input/KeyboardCharInput.java b/plutocore/src/main/java/cz/tefek/pluto/engine/input/KeyboardCharInput.java new file mode 100644 index 0000000..707df5a --- /dev/null +++ b/plutocore/src/main/java/cz/tefek/pluto/engine/input/KeyboardCharInput.java @@ -0,0 +1,25 @@ +package cz.tefek.pluto.engine.input; + +import org.lwjgl.glfw.GLFWCharCallback; + +public class KeyboardCharInput extends GLFWCharCallback +{ + private StringBuilder typedText = new StringBuilder(); + + @Override + public void invoke(long window, int codepoint) + { + this.typedText.appendCodePoint(codepoint); + } + + public String getTypedText() + { + return this.typedText.toString(); + } + + public void reset() + { + this.typedText.setLength(0); + } + +}