Create Keyboard API scaffolding

This commit is contained in:
2021-03-01 21:34:25 +01:00
parent 0b6137c0ca
commit de23809f37
6 changed files with 293 additions and 3 deletions

View File

@@ -0,0 +1,125 @@
package com.bartlomiejpluta.base.api.input;
public enum Key {
KEY_SPACE,
KEY_APOSTROPHE,
KEY_COMMA,
KEY_MINUS,
KEY_PERIOD,
KEY_SLASH,
KEY_0,
KEY_1,
KEY_2,
KEY_3,
KEY_4,
KEY_5,
KEY_6,
KEY_7,
KEY_8,
KEY_9,
KEY_SEMICOLON,
KEY_EQUAL,
KEY_A,
KEY_B,
KEY_C,
KEY_D,
KEY_E,
KEY_F,
KEY_G,
KEY_H,
KEY_I,
KEY_J,
KEY_K,
KEY_L,
KEY_M,
KEY_N,
KEY_O,
KEY_P,
KEY_Q,
KEY_R,
KEY_S,
KEY_T,
KEY_U,
KEY_V,
KEY_W,
KEY_X,
KEY_Y,
KEY_Z,
KEY_LEFT_BRACKET,
KEY_BACKSLASH,
KEY_RIGHT_BRACKET,
KEY_GRAVE_ACCENT,
KEY_WORLD_1,
KEY_WORLD_2,
KEY_ESCAPE,
KEY_ENTER,
KEY_TAB,
KEY_BACKSPACE,
KEY_INSERT,
KEY_DELETE,
KEY_RIGHT,
KEY_LEFT,
KEY_DOWN,
KEY_UP,
KEY_PAGE_UP,
KEY_PAGE_DOWN,
KEY_HOME,
KEY_END,
KEY_CAPS_LOCK,
KEY_SCROLL_LOCK,
KEY_NUM_LOCK,
KEY_PRINT_SCREEN,
KEY_PAUSE,
KEY_F1,
KEY_F2,
KEY_F3,
KEY_F4,
KEY_F5,
KEY_F6,
KEY_F7,
KEY_F8,
KEY_F9,
KEY_F10,
KEY_F11,
KEY_F12,
KEY_F13,
KEY_F14,
KEY_F15,
KEY_F16,
KEY_F17,
KEY_F18,
KEY_F19,
KEY_F20,
KEY_F21,
KEY_F22,
KEY_F23,
KEY_F24,
KEY_F25,
KEY_KP_0,
KEY_KP_1,
KEY_KP_2,
KEY_KP_3,
KEY_KP_4,
KEY_KP_5,
KEY_KP_6,
KEY_KP_7,
KEY_KP_8,
KEY_KP_9,
KEY_KP_DECIMAL,
KEY_KP_DIVIDE,
KEY_KP_MULTIPLY,
KEY_KP_SUBTRACT,
KEY_KP_ADD,
KEY_KP_ENTER,
KEY_KP_EQUAL,
KEY_LEFT_SHIFT,
KEY_LEFT_CONTROL,
KEY_LEFT_ALT,
KEY_LEFT_SUPER,
KEY_RIGHT_SHIFT,
KEY_RIGHT_CONTROL,
KEY_RIGHT_ALT,
KEY_RIGHT_SUPER,
KEY_MENU,
KEY_LAST
}

View File

@@ -0,0 +1,5 @@
package com.bartlomiejpluta.base.api.input;
public interface Keyboard {
boolean isKeyPressed(Key key);
}

View File

@@ -1,7 +1,10 @@
package com.bartlomiejpluta.base.api.map;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.input.Keyboard;
public interface MapHandler {
void init(Context context);
void input(Keyboard keyboard);
}

View File

@@ -0,0 +1,144 @@
package com.bartlomiejpluta.base.game.input;
import com.bartlomiejpluta.base.api.input.Key;
import com.bartlomiejpluta.base.api.input.Keyboard;
import com.bartlomiejpluta.base.core.ui.Window;
import lombok.RequiredArgsConstructor;
import static org.lwjgl.glfw.GLFW.*;
@RequiredArgsConstructor
public class GLFWKeyboard implements Keyboard {
private final Window window;
@Override
public boolean isKeyPressed(Key key) {
return window.isKeyPressed(glfwCode(key));
}
private static int glfwCode(Key key) {
return switch (key) {
case KEY_SPACE -> GLFW_KEY_SPACE;
case KEY_APOSTROPHE -> GLFW_KEY_APOSTROPHE;
case KEY_COMMA -> GLFW_KEY_COMMA;
case KEY_MINUS -> GLFW_KEY_MINUS;
case KEY_PERIOD -> GLFW_KEY_PERIOD;
case KEY_SLASH -> GLFW_KEY_SLASH;
case KEY_0 -> GLFW_KEY_0;
case KEY_1 -> GLFW_KEY_1;
case KEY_2 -> GLFW_KEY_2;
case KEY_3 -> GLFW_KEY_3;
case KEY_4 -> GLFW_KEY_4;
case KEY_5 -> GLFW_KEY_5;
case KEY_6 -> GLFW_KEY_6;
case KEY_7 -> GLFW_KEY_7;
case KEY_8 -> GLFW_KEY_8;
case KEY_9 -> GLFW_KEY_9;
case KEY_SEMICOLON -> GLFW_KEY_SEMICOLON;
case KEY_EQUAL -> GLFW_KEY_EQUAL;
case KEY_A -> GLFW_KEY_A;
case KEY_B -> GLFW_KEY_B;
case KEY_C -> GLFW_KEY_C;
case KEY_D -> GLFW_KEY_D;
case KEY_E -> GLFW_KEY_E;
case KEY_F -> GLFW_KEY_F;
case KEY_G -> GLFW_KEY_G;
case KEY_H -> GLFW_KEY_H;
case KEY_I -> GLFW_KEY_I;
case KEY_J -> GLFW_KEY_J;
case KEY_K -> GLFW_KEY_K;
case KEY_L -> GLFW_KEY_L;
case KEY_M -> GLFW_KEY_M;
case KEY_N -> GLFW_KEY_N;
case KEY_O -> GLFW_KEY_O;
case KEY_P -> GLFW_KEY_P;
case KEY_Q -> GLFW_KEY_Q;
case KEY_R -> GLFW_KEY_R;
case KEY_S -> GLFW_KEY_S;
case KEY_T -> GLFW_KEY_T;
case KEY_U -> GLFW_KEY_U;
case KEY_V -> GLFW_KEY_V;
case KEY_W -> GLFW_KEY_W;
case KEY_X -> GLFW_KEY_X;
case KEY_Y -> GLFW_KEY_Y;
case KEY_Z -> GLFW_KEY_Z;
case KEY_LEFT_BRACKET -> GLFW_KEY_LEFT_BRACKET;
case KEY_BACKSLASH -> GLFW_KEY_BACKSLASH;
case KEY_RIGHT_BRACKET -> GLFW_KEY_RIGHT_BRACKET;
case KEY_GRAVE_ACCENT -> GLFW_KEY_GRAVE_ACCENT;
case KEY_WORLD_1 -> GLFW_KEY_WORLD_1;
case KEY_WORLD_2 -> GLFW_KEY_WORLD_2;
case KEY_ESCAPE -> GLFW_KEY_ESCAPE;
case KEY_ENTER -> GLFW_KEY_ENTER;
case KEY_TAB -> GLFW_KEY_TAB;
case KEY_BACKSPACE -> GLFW_KEY_BACKSPACE;
case KEY_INSERT -> GLFW_KEY_INSERT;
case KEY_DELETE -> GLFW_KEY_DELETE;
case KEY_RIGHT -> GLFW_KEY_RIGHT;
case KEY_LEFT -> GLFW_KEY_LEFT;
case KEY_DOWN -> GLFW_KEY_DOWN;
case KEY_UP -> GLFW_KEY_UP;
case KEY_PAGE_UP -> GLFW_KEY_PAGE_UP;
case KEY_PAGE_DOWN -> GLFW_KEY_PAGE_DOWN;
case KEY_HOME -> GLFW_KEY_HOME;
case KEY_END -> GLFW_KEY_END;
case KEY_CAPS_LOCK -> GLFW_KEY_CAPS_LOCK;
case KEY_SCROLL_LOCK -> GLFW_KEY_SCROLL_LOCK;
case KEY_NUM_LOCK -> GLFW_KEY_NUM_LOCK;
case KEY_PRINT_SCREEN -> GLFW_KEY_PRINT_SCREEN;
case KEY_PAUSE -> GLFW_KEY_PAUSE;
case KEY_F1 -> GLFW_KEY_F1;
case KEY_F2 -> GLFW_KEY_F2;
case KEY_F3 -> GLFW_KEY_F3;
case KEY_F4 -> GLFW_KEY_F4;
case KEY_F5 -> GLFW_KEY_F5;
case KEY_F6 -> GLFW_KEY_F6;
case KEY_F7 -> GLFW_KEY_F7;
case KEY_F8 -> GLFW_KEY_F8;
case KEY_F9 -> GLFW_KEY_F9;
case KEY_F10 -> GLFW_KEY_F10;
case KEY_F11 -> GLFW_KEY_F11;
case KEY_F12 -> GLFW_KEY_F12;
case KEY_F13 -> GLFW_KEY_F13;
case KEY_F14 -> GLFW_KEY_F14;
case KEY_F15 -> GLFW_KEY_F15;
case KEY_F16 -> GLFW_KEY_F16;
case KEY_F17 -> GLFW_KEY_F17;
case KEY_F18 -> GLFW_KEY_F18;
case KEY_F19 -> GLFW_KEY_F19;
case KEY_F20 -> GLFW_KEY_F20;
case KEY_F21 -> GLFW_KEY_F21;
case KEY_F22 -> GLFW_KEY_F22;
case KEY_F23 -> GLFW_KEY_F23;
case KEY_F24 -> GLFW_KEY_F24;
case KEY_F25 -> GLFW_KEY_F25;
case KEY_KP_0 -> GLFW_KEY_KP_0;
case KEY_KP_1 -> GLFW_KEY_KP_1;
case KEY_KP_2 -> GLFW_KEY_KP_2;
case KEY_KP_3 -> GLFW_KEY_KP_3;
case KEY_KP_4 -> GLFW_KEY_KP_4;
case KEY_KP_5 -> GLFW_KEY_KP_5;
case KEY_KP_6 -> GLFW_KEY_KP_6;
case KEY_KP_7 -> GLFW_KEY_KP_7;
case KEY_KP_8 -> GLFW_KEY_KP_8;
case KEY_KP_9 -> GLFW_KEY_KP_9;
case KEY_KP_DECIMAL -> GLFW_KEY_KP_DECIMAL;
case KEY_KP_DIVIDE -> GLFW_KEY_KP_DIVIDE;
case KEY_KP_MULTIPLY -> GLFW_KEY_KP_MULTIPLY;
case KEY_KP_SUBTRACT -> GLFW_KEY_KP_SUBTRACT;
case KEY_KP_ADD -> GLFW_KEY_KP_ADD;
case KEY_KP_ENTER -> GLFW_KEY_KP_ENTER;
case KEY_KP_EQUAL -> GLFW_KEY_KP_EQUAL;
case KEY_LEFT_SHIFT -> GLFW_KEY_LEFT_SHIFT;
case KEY_LEFT_CONTROL -> GLFW_KEY_LEFT_CONTROL;
case KEY_LEFT_ALT -> GLFW_KEY_LEFT_ALT;
case KEY_LEFT_SUPER -> GLFW_KEY_LEFT_SUPER;
case KEY_RIGHT_SHIFT -> GLFW_KEY_RIGHT_SHIFT;
case KEY_RIGHT_CONTROL -> GLFW_KEY_RIGHT_CONTROL;
case KEY_RIGHT_ALT -> GLFW_KEY_RIGHT_ALT;
case KEY_RIGHT_SUPER -> GLFW_KEY_RIGHT_SUPER;
case KEY_MENU -> GLFW_KEY_MENU;
case KEY_LAST -> GLFW_KEY_LAST;
};
}
}

View File

@@ -51,6 +51,7 @@ public class DefaultGameLogic implements GameLogic {
public void init(Window window) {
log.info("Initializing game logic");
renderer.init();
context.init(window);
project = projectLoader.loadProject();
var runnerClass = classLoader.<GameRunner>loadClass(project.getRunner());
@@ -61,7 +62,7 @@ public class DefaultGameLogic implements GameLogic {
@Override
public void input(Window window) {
context.input();
}
@Override

View File

@@ -1,6 +1,7 @@
package com.bartlomiejpluta.base.game.project.model;
import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.input.Keyboard;
import com.bartlomiejpluta.base.api.map.MapHandler;
import com.bartlomiejpluta.base.core.gl.object.texture.TextureManager;
import com.bartlomiejpluta.base.core.gl.render.Renderable;
@@ -10,6 +11,7 @@ import com.bartlomiejpluta.base.core.ui.Window;
import com.bartlomiejpluta.base.core.util.mesh.MeshManager;
import com.bartlomiejpluta.base.core.world.camera.Camera;
import com.bartlomiejpluta.base.game.image.manager.ImageManager;
import com.bartlomiejpluta.base.game.input.GLFWKeyboard;
import com.bartlomiejpluta.base.game.map.manager.MapManager;
import com.bartlomiejpluta.base.game.map.model.GameMap;
import com.bartlomiejpluta.base.game.project.loader.ClassLoader;
@@ -31,7 +33,13 @@ public class RenderableContext implements Context, Updatable, Renderable {
private final MapManager mapManager;
private final ClassLoader classLoader;
private Keyboard keyboard;
private GameMap map;
private MapHandler mapHandler;
public void init(Window window) {
keyboard = new GLFWKeyboard(window);
}
@SneakyThrows
@Override
@@ -39,9 +47,13 @@ public class RenderableContext implements Context, Updatable, Renderable {
map = mapManager.loadMap(mapUid);
var handlerClass = classLoader.<MapHandler>loadClass(map.getHandler());
var handler = handlerClass.getConstructor().newInstance();
mapHandler = handlerClass.getConstructor().newInstance();
handler.init(this);
mapHandler.init(this);
}
public void input() {
mapHandler.input(keyboard);
}
@Override