package electrosphere.controls; import electrosphere.audio.AudioUtils; import electrosphere.controls.Control.ControlMethod; import electrosphere.controls.Control.ControlType; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.state.AttackTree; import electrosphere.entity.state.equip.EquipState; import electrosphere.entity.state.inventory.InventoryUtils; import electrosphere.entity.state.inventory.UnrelationalInventoryState; import electrosphere.entity.state.ironsight.IronSightTree; import electrosphere.entity.state.movement.GroundMovementTree; import electrosphere.entity.state.movement.JumpTree; import electrosphere.entity.state.movement.GroundMovementTree.MovementRelativeFacing; import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState; import electrosphere.entity.state.movement.SprintTree; import electrosphere.entity.types.camera.CameraEntityUtils; import electrosphere.game.client.targeting.crosshair.Crosshair; import electrosphere.logger.LoggerInterface; import electrosphere.main.Globals; import electrosphere.main.Main; import electrosphere.menu.WindowStrings; import electrosphere.menu.WindowUtils; import electrosphere.menu.MenuGenerators; import electrosphere.menu.MenuGeneratorsInventory; import electrosphere.renderer.ui.Window; import electrosphere.renderer.ui.events.ClickEvent; import electrosphere.renderer.ui.events.KeyboardEvent; import electrosphere.renderer.ui.events.MenuEvent; import electrosphere.renderer.ui.events.MouseEvent; import electrosphere.renderer.ui.events.MenuEvent.MenuEventType; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import org.joml.Vector2f; import org.joml.Vector3d; import org.joml.Vector3f; import org.lwjgl.glfw.GLFW; import static org.lwjgl.glfw.GLFW.*; import static org.lwjgl.glfw.GLFW.glfwGetCursorPos; import static org.lwjgl.glfw.GLFW.glfwSetInputMode; /** * * @author amaterasu */ public class ControlHandler { public static final String INPUT_CODE_CAMERA_ROTATION = "cameraRotation"; public static final String DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD = "moveForward"; public static final String DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD = "moveBackward"; public static final String DATA_STRING_INPUT_CODE_MOVEMENT_LEFT = "moveLeft"; public static final String DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT = "moveRight"; public static final String DATA_STRING_INPUT_CODE_STRAFE_LEFT = "strafeLeft"; public static final String DATA_STRING_INPUT_CODE_STRAFE_RIGHT = "strafeRight"; public static final String DATA_STRING_INPUT_CODE_MOVEMENT_JUMP = "jump"; public static final String DATA_STRING_INPUT_CODE_MOVEMENT_FALL = "fall"; public static final String DATA_STRING_INPUT_CODE_ATTACK_PRIMARY = "attackPrimary"; public static final String DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM = "debugSpawnItem"; public static final String DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU = "inGameMainMenu"; public static final String DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR = "crosshairLock"; public static final String INPUT_CODE_SPRINT = "sprint"; public static final String INPUT_CODE_INTERACT = "interact"; public static final String INPUT_CODE_DROP = "drop"; public static final String INPUT_CODE_INVENTORY_OPEN = "inventoryOpen"; public static final String INPUT_CODE_CHARACTER_OPEN = "characterOpen"; public static final String INPUT_CODE_IRON_SIGHT = "ironSight"; public static final String DATA_STRING_INPUT_CODE_MENU_NAVIGATE_FORWARD = "menuNavigateForward"; public static final String DATA_STRING_INPUT_CODE_MENU_NAVIGATE_BACKWARDS = "menuNavigateBackwards"; public static final String DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement"; public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement"; public static final String DATA_STRING_INPUT_CODE_MENU_SELECT = "menuSelect"; public static final String INPUT_CODE_MENU_MOUSE_PRIMARY = "menuMousePrimary"; public static final String DATA_STRING_INPUT_CODE_MENU_BACKOUT = "menuBackout"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_BACKSPACE = "menuTypeBackspace"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_0 = "menuType0"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_1 = "menuType1"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_2 = "menuType2"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_3 = "menuType3"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_4 = "menuType4"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_5 = "menuType5"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_6 = "menuType6"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_7 = "menuType7"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_8 = "menuType8"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_9 = "menuType9"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_PERIOD = "menuType."; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_A = "menuTypeA"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_B = "menuTypeB"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_C = "menuTypeC"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_D = "menuTypeD"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_E = "menuTypeE"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_F = "menuTypeF"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_G = "menuTypeG"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_H = "menuTypeH"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_I = "menuTypeI"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_J = "menuTypeJ"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_K = "menuTypeK"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_L = "menuTypeL"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_M = "menuTypeM"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_N = "menuTypeN"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_O = "menuTypeO"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_P = "menuTypeP"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_Q = "menuTypeQ"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_R = "menuTypeR"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_S = "menuTypeS"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_T = "menuTypeT"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_U = "menuTypeU"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_V = "menuTypeV"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_W = "menuTypeW"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_X = "menuTypeX"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_Y = "menuTypeY"; public static final String DATA_STRING_INPUT_CODE_MENU_TYPE_Z = "menuTypeZ"; public static final String INPUT_CODE_MENU_TYPE_FORWARD_SLASH = "menuTypeForwardSlash"; public static final String INPUT_CODE_INVENTORY_CLOSE = "inventoryClose"; public static final String INPUT_CODE_INVENTORY_ITEM_MANIPULATE = "inventoryItemManipulate"; public static final String INPUT_CODE_INVENTORY_ITEM_DRAG = "inventoryDrag"; public static final String DEBUG_FRAMESTEP = "framestep"; public static enum ControlsState { TITLE_PAGE, TITLE_MENU, MAIN_GAME, IN_GAME_MAIN_MENU, INVENTORY, NO_INPUT, } ControlsState state = ControlsState.TITLE_MENU; boolean mouseIsVisible = true; boolean shouldRecaptureScreen = false; /* Mouse event parsing related stuff */ float mouse_lastX = 400; float mouse_lastY = 300; double xpos = 400; double ypos = 300; double mouse_X_Buffer[] = new double[1]; double mouse_Y_Buffer[] = new double[1]; boolean dragging = false; HashMap controls; List mainGameControlList = new LinkedList(); List mainGameDebugControlList = new LinkedList(); List menuNavigationControlList = new LinkedList(); List typingControlList = new LinkedList(); List inventoryControlList = new LinkedList(); ControlHandler(){ controls = new HashMap(); } public static ControlHandler generateExampleControlsMap(){ ControlHandler handler = new ControlHandler(); /* Main Game controls */ /* Map the controls */ handler.addControl(INPUT_CODE_CAMERA_ROTATION, new Control(ControlType.MOUSE_MOVEMENT,0)); handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD, new Control(ControlType.KEY,GLFW_KEY_W)); handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD, new Control(ControlType.KEY,GLFW_KEY_S)); handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT, new Control(ControlType.KEY,GLFW_KEY_A)); handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, new Control(ControlType.KEY,GLFW_KEY_D)); handler.addControl(DATA_STRING_INPUT_CODE_STRAFE_LEFT, new Control(ControlType.KEY,GLFW_KEY_F24)); handler.addControl(DATA_STRING_INPUT_CODE_STRAFE_RIGHT, new Control(ControlType.KEY,GLFW_KEY_F24)); handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP, new Control(ControlType.KEY,GLFW_KEY_SPACE)); handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_FALL, new Control(ControlType.KEY,GLFW_KEY_LEFT_CONTROL)); handler.addControl(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_LEFT)); handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(ControlType.KEY,GLFW_KEY_ESCAPE)); handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(ControlType.KEY,GLFW_KEY_CAPS_LOCK)); handler.addControl(INPUT_CODE_SPRINT, new Control(ControlType.KEY,GLFW_KEY_LEFT_SHIFT)); handler.addControl(INPUT_CODE_INTERACT, new Control(ControlType.KEY,GLFW_KEY_E)); handler.addControl(INPUT_CODE_DROP, new Control(ControlType.KEY,GLFW_KEY_Y)); handler.addControl(INPUT_CODE_INVENTORY_OPEN, new Control(ControlType.KEY,GLFW_KEY_I)); handler.addControl(INPUT_CODE_CHARACTER_OPEN, new Control(ControlType.KEY,GLFW_KEY_C)); handler.addControl(INPUT_CODE_IRON_SIGHT, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_RIGHT)); /* Map the menu navigation controls */ handler.addControl(DATA_STRING_INPUT_CODE_MENU_NAVIGATE_FORWARD, new Control(ControlType.KEY,GLFW_KEY_DOWN)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_NAVIGATE_BACKWARDS, new Control(ControlType.KEY,GLFW_KEY_UP)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_INCREMENT, new Control(ControlType.KEY,GLFW_KEY_RIGHT)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_DECREMENT, new Control(ControlType.KEY,GLFW_KEY_LEFT)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_SELECT, new Control(ControlType.KEY,GLFW_KEY_ENTER)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_BACKOUT, new Control(ControlType.KEY,GLFW_KEY_ESCAPE)); handler.addControl(INPUT_CODE_MENU_MOUSE_PRIMARY, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_LEFT)); /* Map the typing controls */ handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_BACKSPACE, new Control(ControlType.KEY,GLFW_KEY_BACKSPACE)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_0, new Control(ControlType.KEY,GLFW_KEY_0)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_1, new Control(ControlType.KEY,GLFW_KEY_1)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_2, new Control(ControlType.KEY,GLFW_KEY_2)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_3, new Control(ControlType.KEY,GLFW_KEY_3)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_4, new Control(ControlType.KEY,GLFW_KEY_4)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_5, new Control(ControlType.KEY,GLFW_KEY_5)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_6, new Control(ControlType.KEY,GLFW_KEY_6)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_7, new Control(ControlType.KEY,GLFW_KEY_7)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_8, new Control(ControlType.KEY,GLFW_KEY_8)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_9, new Control(ControlType.KEY,GLFW_KEY_9)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_PERIOD, new Control(ControlType.KEY,GLFW_KEY_PERIOD)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_A, new Control(ControlType.KEY,GLFW_KEY_A)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_B, new Control(ControlType.KEY,GLFW_KEY_B)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_C, new Control(ControlType.KEY,GLFW_KEY_C)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_D, new Control(ControlType.KEY,GLFW_KEY_D)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_E, new Control(ControlType.KEY,GLFW_KEY_E)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_F, new Control(ControlType.KEY,GLFW_KEY_F)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_G, new Control(ControlType.KEY,GLFW_KEY_G)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_H, new Control(ControlType.KEY,GLFW_KEY_H)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_I, new Control(ControlType.KEY,GLFW_KEY_I)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_J, new Control(ControlType.KEY,GLFW_KEY_J)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_K, new Control(ControlType.KEY,GLFW_KEY_K)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_L, new Control(ControlType.KEY,GLFW_KEY_L)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_M, new Control(ControlType.KEY,GLFW_KEY_M)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_N, new Control(ControlType.KEY,GLFW_KEY_N)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_O, new Control(ControlType.KEY,GLFW_KEY_O)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_P, new Control(ControlType.KEY,GLFW_KEY_P)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Q, new Control(ControlType.KEY,GLFW_KEY_Q)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_R, new Control(ControlType.KEY,GLFW_KEY_R)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_S, new Control(ControlType.KEY,GLFW_KEY_S)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_T, new Control(ControlType.KEY,GLFW_KEY_T)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_U, new Control(ControlType.KEY,GLFW_KEY_U)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_V, new Control(ControlType.KEY,GLFW_KEY_V)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_W, new Control(ControlType.KEY,GLFW_KEY_W)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_X, new Control(ControlType.KEY,GLFW_KEY_X)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Y, new Control(ControlType.KEY,GLFW_KEY_Y)); handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Z, new Control(ControlType.KEY,GLFW_KEY_Z)); handler.addControl(INPUT_CODE_MENU_TYPE_FORWARD_SLASH, new Control(ControlType.KEY,GLFW_KEY_SLASH)); /* Inventory controls */ handler.addControl(INPUT_CODE_INVENTORY_CLOSE, new Control(ControlType.KEY,GLFW_KEY_I)); handler.addControl(INPUT_CODE_INVENTORY_ITEM_MANIPULATE, new Control(ControlType.MOUSE_BUTTON,GLFW_MOUSE_BUTTON_1)); handler.addControl(INPUT_CODE_INVENTORY_ITEM_DRAG, new Control(ControlType.MOUSE_MOVEMENT,0)); /* framestep controls */ handler.addControl(DEBUG_FRAMESTEP, new Control(ControlType.KEY, GLFW_KEY_P)); /* set state */ handler.setHandlerState(ControlsState.TITLE_MENU); /* Save to file */ // Utilities.saveObjectToBakedJsonFile("/Config/keybinds.json", handler); /* Debug controls */ handler.addControl(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM, new Control(ControlType.KEY,GLFW_KEY_Q)); /* return */ return handler; } public void pollControls(){ switch(state){ case MAIN_GAME: runHandlers(mainGameControlList); runHandlers(mainGameDebugControlList); break; case TITLE_PAGE: break; case TITLE_MENU: runHandlers(menuNavigationControlList); /* Typing.. */ runHandlers(typingControlList); break; case IN_GAME_MAIN_MENU: runHandlers(menuNavigationControlList); runHandlers(typingControlList); // pollMenuNavigationControls(); break; case INVENTORY: runHandlers(inventoryControlList); runHandlers(menuNavigationControlList); break; case NO_INPUT: break; } } public void setCallbacks(){ setMainGameControls(); setInGameDebugControls(); setMenuNavigationControls(); setTypingControls(); setInventoryControls(); } void setMainGameControls(){ /* Camera rotation */ mainGameControlList.add(controls.get(INPUT_CODE_CAMERA_ROTATION)); controls.get(INPUT_CODE_CAMERA_ROTATION).setOnMove(new Control.MouseCallback(){public void execute(MouseEvent event){ Globals.cameraHandler.handleMouseEvent(event); }}); /* Move forward */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); movementTree.start(MovementRelativeFacing.FORWARD); } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(-Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); movementTree.start(MovementRelativeFacing.FORWARD); } else { Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).setOnRepeat(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); movementTree.start(MovementRelativeFacing.FORWARD); } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(-Math.PI/4.0).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); movementTree.start(MovementRelativeFacing.FORWARD); } else { Vector3d newFacingVector = new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize(); CreatureUtils.setFacingVector(Globals.playerEntity, newFacingVector); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); movementTree.slowdown(); } }}); /* Move backward */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(3.0/4.0*Math.PI).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(5.0/4.0*Math.PI).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } else { CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).setOnRepeat(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(3.0/4.0*Math.PI).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } else if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState()){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(5.0/4.0*Math.PI).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } else { CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); movementTree.slowdown(); } }}); /* move left */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if( (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI/2.0).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).setOnRepeat(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if( (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(Math.PI/2.0).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); movementTree.slowdown(); } }}); /* move right */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if( (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(-Math.PI/2.0).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).setOnRepeat(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); if( (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY(-Math.PI/2.0).normalize()); movementTree.start(MovementRelativeFacing.FORWARD); } } }}); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); movementTree.slowdown(); } }}); /* Move up */ /* Move down */ /* strafe left */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT)); controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z)); if( (movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ movementTree.start(MovementRelativeFacing.LEFT); } } }}); controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).setOnRepeat(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z)); if( (movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ movementTree.start(MovementRelativeFacing.LEFT); } } }}); controls.get(DATA_STRING_INPUT_CODE_STRAFE_LEFT).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); movementTree.slowdown(); } }}); /* strafe right */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT)); controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z)); if( (movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ movementTree.start(MovementRelativeFacing.RIGHT); } } }}); controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).setOnRepeat(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); CreatureUtils.setFacingVector(Globals.playerEntity, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z)); if( (movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue())) && (controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && !Globals.controlCallback.getKey(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue())) ){ movementTree.start(MovementRelativeFacing.RIGHT); } } }}); controls.get(DATA_STRING_INPUT_CODE_STRAFE_RIGHT).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerEntity); movementTree.slowdown(); } }}); /* Jump DATA_STRING_INPUT_CODE_MOVEMENT_JUMP */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP)); controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ JumpTree jumpTree = JumpTree.getJumpTree(Globals.playerEntity); if(jumpTree != null){ jumpTree.start(); } } }}); /* Sprint */ mainGameControlList.add(controls.get(INPUT_CODE_SPRINT)); controls.get(INPUT_CODE_SPRINT).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ SprintTree sprintTree = CreatureUtils.getSprintTree(Globals.playerEntity); if(sprintTree != null){ sprintTree.start(); } } }}); controls.get(INPUT_CODE_SPRINT).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ SprintTree sprintTree = CreatureUtils.getSprintTree(Globals.playerEntity); if(sprintTree != null){ sprintTree.stop(); } } }}); mainGameControlList.add(controls.get(INPUT_CODE_IRON_SIGHT)); controls.get(INPUT_CODE_IRON_SIGHT).setOnPress(new ControlMethod() {public void execute() { if(Globals.playerEntity != null){ IronSightTree ironSightTree = IronSightTree.getIronSightTree(Globals.playerEntity); if(ironSightTree != null){ ironSightTree.start(); } } }}); controls.get(INPUT_CODE_IRON_SIGHT).setOnRelease(new ControlMethod() {public void execute() { if(Globals.playerEntity != null){ IronSightTree ironSightTree = IronSightTree.getIronSightTree(Globals.playerEntity); if(ironSightTree != null){ ironSightTree.release(); } } }}); /* Interact */ mainGameControlList.add(controls.get(INPUT_CODE_INTERACT)); controls.get(INPUT_CODE_INTERACT).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ if(EquipState.hasEquipState(Globals.playerEntity) && Crosshair.hasTarget()){ if(InventoryUtils.hasNaturalInventory(Globals.playerEntity)){ InventoryUtils.attemptStoreItem(Globals.playerEntity, Crosshair.getTarget()); } } } }}); /* Drop */ mainGameControlList.add(controls.get(INPUT_CODE_DROP)); controls.get(INPUT_CODE_DROP).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ if(EquipState.hasEquipState(Globals.playerEntity)){ UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerEntity); if(inventory.getItems().size() > 0){ Entity itemToDrop = inventory.getItems().get(0); InventoryUtils.attemptEjectItem(Globals.playerEntity,itemToDrop); } } } }}); /* Attack */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY)); controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).setOnPress(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ // Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); AttackTree attackTree = CreatureUtils.getAttackTree(Globals.playerEntity); if(attackTree != null){ // CreatureUtils.setFacingVector(Globals.playerCharacter, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize()); attackTree.start(); } } }}); controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).setOnRelease(new ControlMethod(){public void execute(){ if(Globals.playerEntity != null){ // Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera); AttackTree attackTree = CreatureUtils.getAttackTree(Globals.playerEntity); if(attackTree != null){ // CreatureUtils.setFacingVector(Globals.playerCharacter, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize()); attackTree.release(); } } }}); /* Lock on crosshair */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR)); controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).setOnPress(new ControlMethod(){public void execute(){ if(Crosshair.hasTarget()){ Crosshair.setCrosshairActive(true); } }}); controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).setOnRelease(new ControlMethod(){public void execute(){ if(Crosshair.getCrosshairActive()){ Crosshair.setCrosshairActive(false); } }}); /* Main menu dialog toggle */ mainGameControlList.add(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU)); controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setOnClick(new ControlMethod(){public void execute(){ // Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, MenuGenerators.createInGameMainMenu()); // Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU); // Window mainMenuWindow = new Window(0, 0, Globals.WINDOW_WIDTH, Globals.WINDOW_HEIGHT); Window mainMenuInGame = MenuGenerators.createInGameMainMenu(); // mainMenuWindow.addChild(mainMenuInGame); Globals.elementManager.registerWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN, mainMenuInGame); WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN), true); Globals.elementManager.focusFirstElement(); Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU); Globals.controlHandler.showMouse(); //play sound effect AudioUtils.playAudio("/Audio/openMenu.ogg"); }}); controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setRepeatTimeout(0.5f * Main.targetFrameRate); /* Open inventory */ mainGameControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN)); inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_OPEN)); controls.get(INPUT_CODE_INVENTORY_OPEN).setOnClick(new ControlMethod(){public void execute(){ if(InventoryUtils.hasNaturalInventory(Globals.playerEntity) && Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(InventoryUtils.getNaturalInventory(Globals.playerEntity).getId())) == null){ //create window UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerEntity); Window mainMenuWindow = MenuGeneratorsInventory.createNaturalInventoryMenu(inventory); //register Globals.elementManager.registerWindow(WindowUtils.getInventoryWindowID(inventory.getId()), mainMenuWindow); //make visible WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())), true); //controls Globals.controlHandler.setHandlerState(ControlsState.INVENTORY); Globals.controlHandler.showMouse(); //play sound effect AudioUtils.playAudio("/Audio/openMenu.ogg"); // Globals.openInventoriesCount++; } }}); controls.get(INPUT_CODE_INVENTORY_OPEN).setRepeatTimeout(0.5f * Main.targetFrameRate); /* Open character */ mainGameControlList.add(controls.get(INPUT_CODE_CHARACTER_OPEN)); inventoryControlList.add(controls.get(INPUT_CODE_CHARACTER_OPEN)); controls.get(INPUT_CODE_CHARACTER_OPEN).setOnClick(new ControlMethod(){public void execute(){ if(InventoryUtils.hasEquipInventory(Globals.playerEntity) && Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER) == null){ //create window Window mainMenuWindow = MenuGeneratorsInventory.createCharacterInventoryMenu(InventoryUtils.getEquipInventory(Globals.playerEntity)); //register Globals.elementManager.registerWindow(WindowStrings.WINDOW_CHARACTER, mainMenuWindow); //make visible WindowUtils.recursiveSetVisible(Globals.elementManager.getWindow(WindowStrings.WINDOW_CHARACTER), true); //controls Globals.controlHandler.setHandlerState(ControlsState.INVENTORY); Globals.controlHandler.showMouse(); //play sound effect AudioUtils.playAudio("/Audio/openMenu.ogg"); // Globals.openInventoriesCount++; } }}); controls.get(INPUT_CODE_CHARACTER_OPEN).setRepeatTimeout(0.5f * Main.targetFrameRate); } void setInGameDebugControls(){ mainGameDebugControlList.add(controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM)); controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).setOnPress(new ControlMethod(){public void execute(){ // RenderingEngine.incrementOutputFramebuffer(); // Entity bow = ItemUtils.spawnBasicItem("shorts1"); // EntityUtils.getPosition(bow).set(1, 5, 2); // CollisionObjUtils.positionCharacter(bow, new Vector3f(1, 5, 2)); }}); mainGameDebugControlList.add(controls.get(DEBUG_FRAMESTEP)); controls.get(DEBUG_FRAMESTEP).setOnRelease(new ControlMethod(){public void execute(){ Main.setFramestep(1); }}); // RenderingEngine.incrementOutputFramebuffer(); } void setMenuNavigationControls(){ menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_NAVIGATE_FORWARD)); controls.get(DATA_STRING_INPUT_CODE_MENU_NAVIGATE_FORWARD).setOnPress(new ControlMethod(){public void execute(){ // Globals.currentMenu.incrementMenuOption(); Globals.elementManager.focusNextElement(); }}); menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_NAVIGATE_BACKWARDS)); controls.get(DATA_STRING_INPUT_CODE_MENU_NAVIGATE_BACKWARDS).setOnPress(new ControlMethod(){public void execute(){ // Globals.currentMenu.decrementMenuOption(); Globals.elementManager.focusPreviousElement(); }}); //Incrementing a menu element menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT)); controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setOnPress(new ControlMethod(){public void execute(){ Globals.elementManager.fireEvent( new MenuEvent(MenuEventType.INCREMENT), Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY() ); }}); controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setOnRepeat(new ControlMethod(){public void execute(){ Globals.elementManager.fireEvent( new MenuEvent(MenuEventType.INCREMENT), Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY() ); }}); controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setRepeatTimeout(0.5f * Main.targetFrameRate); //Decrementing a menu element menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT)); controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setOnPress(new ControlMethod(){public void execute(){ Globals.elementManager.fireEvent( new MenuEvent(MenuEventType.DECREMENT), Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY() ); }}); controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setOnRepeat(new ControlMethod(){public void execute(){ Globals.elementManager.fireEvent( new MenuEvent(MenuEventType.DECREMENT), Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY() ); }}); controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setRepeatTimeout(0.5f * Main.targetFrameRate); menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT)); controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).setOnPress(new ControlMethod(){public void execute(){ Globals.elementManager.click(new ClickEvent( Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY(), true, Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_2) )); // MenuCallbacks.selectOption(Globals.currentMenu); }}); menuNavigationControlList.add(controls.get(INPUT_CODE_MENU_MOUSE_PRIMARY)); mainGameDebugControlList.add(controls.get(INPUT_CODE_MENU_MOUSE_PRIMARY)); controls.get(INPUT_CODE_MENU_MOUSE_PRIMARY).setOnClick(new ControlMethod(){public void execute(){ Globals.elementManager.click(new ClickEvent( (int)xpos, (int)ypos, true, Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_2) )); }}); controls.get(INPUT_CODE_MENU_MOUSE_PRIMARY).setRepeatTimeout(0.5f * Main.targetFrameRate); menuNavigationControlList.add(controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT)); // controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setOnPress(new ControlMethod(){public void execute(){ // // MenuCallbacks.backout(Globals.currentMenu); // Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN); // }}); controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setOnClick(new ControlMethod(){public void execute(){ // MenuCallbacks.backout(Globals.currentMenu); Globals.elementManager.navigateBackwards(); // Globals.elementManager.unregisterWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN); }}); controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setRepeatTimeout(0.5f * Main.targetFrameRate); } void setTypingControls(){ String[] typeKeybinds = { DATA_STRING_INPUT_CODE_MENU_TYPE_BACKSPACE, DATA_STRING_INPUT_CODE_MENU_TYPE_0, DATA_STRING_INPUT_CODE_MENU_TYPE_1, DATA_STRING_INPUT_CODE_MENU_TYPE_2, DATA_STRING_INPUT_CODE_MENU_TYPE_3, DATA_STRING_INPUT_CODE_MENU_TYPE_4, DATA_STRING_INPUT_CODE_MENU_TYPE_5, DATA_STRING_INPUT_CODE_MENU_TYPE_6, DATA_STRING_INPUT_CODE_MENU_TYPE_7, DATA_STRING_INPUT_CODE_MENU_TYPE_8, DATA_STRING_INPUT_CODE_MENU_TYPE_9, DATA_STRING_INPUT_CODE_MENU_TYPE_PERIOD, DATA_STRING_INPUT_CODE_MENU_TYPE_A, DATA_STRING_INPUT_CODE_MENU_TYPE_B, DATA_STRING_INPUT_CODE_MENU_TYPE_C, DATA_STRING_INPUT_CODE_MENU_TYPE_D, DATA_STRING_INPUT_CODE_MENU_TYPE_E, DATA_STRING_INPUT_CODE_MENU_TYPE_F, DATA_STRING_INPUT_CODE_MENU_TYPE_G, DATA_STRING_INPUT_CODE_MENU_TYPE_H, DATA_STRING_INPUT_CODE_MENU_TYPE_I, DATA_STRING_INPUT_CODE_MENU_TYPE_J, DATA_STRING_INPUT_CODE_MENU_TYPE_K, DATA_STRING_INPUT_CODE_MENU_TYPE_L, DATA_STRING_INPUT_CODE_MENU_TYPE_M, DATA_STRING_INPUT_CODE_MENU_TYPE_N, DATA_STRING_INPUT_CODE_MENU_TYPE_O, DATA_STRING_INPUT_CODE_MENU_TYPE_P, DATA_STRING_INPUT_CODE_MENU_TYPE_Q, DATA_STRING_INPUT_CODE_MENU_TYPE_R, DATA_STRING_INPUT_CODE_MENU_TYPE_S, DATA_STRING_INPUT_CODE_MENU_TYPE_T, DATA_STRING_INPUT_CODE_MENU_TYPE_U, DATA_STRING_INPUT_CODE_MENU_TYPE_V, DATA_STRING_INPUT_CODE_MENU_TYPE_W, DATA_STRING_INPUT_CODE_MENU_TYPE_X, DATA_STRING_INPUT_CODE_MENU_TYPE_Y, DATA_STRING_INPUT_CODE_MENU_TYPE_Z, INPUT_CODE_MENU_TYPE_FORWARD_SLASH, }; for(String currentKey : typeKeybinds){ typingControlList.add(controls.get(currentKey)); controls.get(currentKey).setOnPress(new ControlMethod(){public void execute(){ Globals.elementManager.fireEvent( new KeyboardEvent(convertKeycodeToName(controls.get(currentKey).keyValue)), Globals.elementManager.getFocusedElement().getPositionX(), Globals.elementManager.getFocusedElement().getPositionY() ); // MenuCallbacks.menuHandleKeypress(Globals.currentMenu,currentKey); }}); // if(controls.get(currentKey).isIsKey() && Globals.controlCallback.getKey(controls.get(currentKey).getKeyValue())){ // controls.get(currentKey).setState(true); // } else { // if(controls.get(currentKey).isState() == true){ // MenuTransition.menuHandleKeypress(Globals.currentMenu,currentKey); // } // controls.get(currentKey).setState(false); // } } } void setInventoryControls(){ /* Close inventory */ // inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_CLOSE)); // controls.get(INPUT_CODE_INVENTORY_CLOSE).setOnPress(new ControlMethod(){public void execute(){ // // MenuCallbacks.backout(Globals.currentMenu); // UnrelationalInventoryState inventory = InventoryUtils.getNaturalInventory(Globals.playerCharacter); // Element inventoryWindow = Globals.elementManager.getWindow(WindowUtils.getInventoryWindowID(inventory.getId())); // WindowUtils.recursiveSetVisible(inventoryWindow, false); // hideMouse(); // Globals.elementManager.unregisterWindow(WindowUtils.getInventoryWindowID(inventory.getId())); // Globals.controlHandler.setHandlerState(ControlsState.MAIN_GAME); // }}); /* Item manipulation */ inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_ITEM_MANIPULATE)); controls.get(INPUT_CODE_INVENTORY_ITEM_MANIPULATE).setOnPress(new ControlMethod(){public void execute(){ }}); controls.get(INPUT_CODE_INVENTORY_ITEM_MANIPULATE).setOnRelease(new ControlMethod(){public void execute(){ if(dragging){ dragging = false; //fire dragrelease event to elementmanager Globals.elementManager.dragRelease((int)xpos,(int)ypos,(int)mouse_lastX,(int)mouse_lastY,(int)(xpos - mouse_lastX),(int)(mouse_lastY - ypos)); } else { //fire onclick event to elementmanager Globals.elementManager.click(new ClickEvent((int)xpos,(int)ypos,true,Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_2))); } }}); /* item dragging */ inventoryControlList.add(controls.get(INPUT_CODE_INVENTORY_ITEM_DRAG)); controls.get(INPUT_CODE_INVENTORY_ITEM_DRAG).setOnMove(new Control.MouseCallback(){public void execute(MouseEvent event){ if(!dragging && event.getButton1()){ dragging = true; //fire dragstart event to elementmanager Globals.elementManager.dragStart((int)xpos,(int)ypos,(int)mouse_lastX,(int)mouse_lastY,(int)(xpos - mouse_lastX),(int)(mouse_lastY - ypos)); } if(dragging){ //fire drag event to elementmanager Globals.elementManager.drag((int)xpos,(int)ypos,(int)mouse_lastX,(int)mouse_lastY,(int)(xpos - mouse_lastX),(int)(mouse_lastY - ypos)); } }}); } public void runHandlers(List controls){ //construct mouse event glfwGetCursorPos(Globals.window, mouse_X_Buffer, mouse_Y_Buffer); xpos = mouse_X_Buffer[0]; ypos = mouse_Y_Buffer[0]; float xoffset = (float) (xpos - mouse_lastX); float yoffset = (float) (mouse_lastY - ypos); mouse_lastX = (float) xpos; mouse_lastY = (float) ypos; MouseEvent currentMouseEvent = new MouseEvent((int)xpos,(int)ypos,(int)mouse_lastX,(int)mouse_lastY,(int)xoffset,(int)yoffset,Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_1),Globals.mouseCallback.getButton(GLFW_MOUSE_BUTTON_2)); boolean mouseMoveEvent = xoffset != 0 || yoffset != 0; for(Control control : controls){ switch(control.getType()){ case KEY: if(Globals.controlCallback.getKey(control.getKeyValue())){ if(!control.isState()){ //on press control.onPress(); control.setPressFrame(Main.getCurrentFrame()); } else { //on repeat if(Main.getCurrentFrame() - control.getPressFrame() > control.getRepeatTimeout()){ control.onRepeat(); } } control.setState(true); } else { if(control.isState()){ //on release control.onRelease(); //on click if(Main.getCurrentFrame() - control.getPressFrame() < control.getRepeatTimeout()){ control.onClick(); } } else { } control.setState(false); } break; case MOUSE_BUTTON: if(Globals.mouseCallback.getButton(control.getKeyValue())){ if(!control.isState()){ //on press control.onPress(); control.setPressFrame(Main.getCurrentFrame()); } else { //on repeat control.onRepeat(); } control.setState(true); } else { if(control.isState()){ //on release control.onRelease(); if(Main.getCurrentFrame() - control.getPressFrame() < control.getRepeatTimeout()){ control.onClick(); } } else { } control.setState(false); } break; case MOUSE_MOVEMENT: if(mouseMoveEvent){ control.onMove(currentMouseEvent); } break; } } } public Control getControl(String controlName){ return controls.get(controlName); } public boolean containsControl(String controlName){ return controls.containsKey(controlName); } public void removeControl(String controlName){ controls.remove(controlName); } public void addControl(String controlName, Control c){ controls.put(controlName, c); } public void setHandlerState(ControlsState state){ this.state = state; } public ControlsState getState(){ return state; } public void hideMouse(){ glfwSetInputMode(Globals.window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); glfwSetInputMode(Globals.window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); mouseIsVisible = false; } public void showMouse(){ glfwSetInputMode(Globals.window, GLFW_CURSOR, GLFW_CURSOR_NORMAL); mouseIsVisible = true; } public boolean isMouseVisible(){ return mouseIsVisible; } public Vector2f getMousePosition(){ double posX[] = new double[1]; double posY[] = new double[1]; glfwGetCursorPos(Globals.window, posX, posY); Vector2f rVal = new Vector2f((float)posX[0],(float)posY[0]); return rVal; } public static String convertKeycodeToName(int code){ String rVal = ""; switch(code){ case 46: rVal = "."; break; case 47: rVal = "/"; break; case 48: rVal = "0"; break; case 49: rVal = "1"; break; case 50: rVal = "2"; break; case 51: rVal = "3"; break; case 52: rVal = "4"; break; case 53: rVal = "5"; break; case 54: rVal = "6"; break; case 55: rVal = "7"; break; case 56: rVal = "8"; break; case 57: rVal = "9"; break; case 65: rVal = "A"; break; case 66: rVal = "B"; break; case 67: rVal = "C"; break; case 68: rVal = "D"; break; case 69: rVal = "E"; break; case 70: rVal = "F"; break; case 71: rVal = "G"; break; case 72: rVal = "H"; break; case 73: rVal = "I"; break; case 74: rVal = "J"; break; case 75: rVal = "K"; break; case 76: rVal = "L"; break; case 77: rVal = "M"; break; case 78: rVal = "N"; break; case 79: rVal = "O"; break; case 80: rVal = "P"; break; case 81: rVal = "Q"; break; case 82: rVal = "R"; break; case 83: rVal = "S"; break; case 84: rVal = "T"; break; case 85: rVal = "U"; break; case 86: rVal = "V"; break; case 87: rVal = "W"; break; case 88: rVal = "X"; break; case 89: rVal = "Y"; break; case 90: rVal = "Z"; break; case 259: rVal = "bs"; //backspace break; case 256: rVal = "Escape"; break; default: LoggerInterface.loggerEngine.WARNING("Unable to convert keycode " + code + " in control handler."); break; } return rVal; } public void setShouldRecapture(boolean shouldRecapture){ this.shouldRecaptureScreen = shouldRecapture; } public void recaptureIfNecessary(){ if(shouldRecaptureScreen){ //Makes the window that was just created the current OS-level window context glfwMakeContextCurrent(Globals.window); //Maximize it glfwMaximizeWindow(Globals.window); //grab focus GLFW.glfwFocusWindow(Globals.window); //apply mouse controls state if(Globals.controlHandler.isMouseVisible()){ Globals.controlHandler.showMouse(); } else { Globals.controlHandler.hideMouse(); } shouldRecaptureScreen = false; } } }