package me.hammerle.snuviengine.api; import static org.lwjgl.glfw.GLFW.*; public final class KeyBinding { private boolean isDown = false; private int time = 0; private boolean isReleased = false; private int key; private boolean isRebinding = false; private String name = null; protected KeyBinding(int key) { this.key = key; } public boolean isRebinding() { return isRebinding; } public String getName() { if(name == null) { switch(key) { case GLFW_KEY_UP: name = "Up"; break; case GLFW_KEY_DOWN: name = "Down"; break; case GLFW_KEY_LEFT: name = "Left"; break; case GLFW_KEY_RIGHT: name = "Right"; break; case GLFW_KEY_LEFT_SHIFT: name = "L-Shift"; break; case GLFW_KEY_RIGHT_SHIFT: name = "R-Shift"; break; case GLFW_KEY_ESCAPE: name = "Escape"; break; case GLFW_KEY_ENTER: name = "Enter"; break; case GLFW_KEY_SPACE: name = "Space"; break; default: name = glfwGetKeyName(key, glfwGetKeyScancode(key)); if(name != null) { name = name.substring(0, 1).toUpperCase() + name.substring(1); } } if(name == null) { name = "Unknown"; } } return name; } protected void setIsRebinding(boolean b) { isRebinding = b; } protected void onKeyDownEvent() { isDown = true; } protected void onKeyUpEvent() { isReleased = true; } protected void tick() { if(isDown) { time++; if(isReleased) { isDown = false; } } else if(isReleased) { isReleased = false; time = 0; } } public boolean isReleased() { return isReleased; } public boolean isUp() { return !isDown; } public boolean isDown() { return isDown; } public int getTime() { return time; } public void setTime(int time) { this.time = time; } protected void setKey(int key) { this.key = key; name = null; } public int getKey() { return key; } }