656 lines
31 KiB
Java
656 lines
31 KiB
Java
package electrosphere.controls;
|
|
|
|
import electrosphere.entity.CameraEntityUtils;
|
|
import electrosphere.entity.Entity;
|
|
import electrosphere.entity.EntityDataStrings;
|
|
import electrosphere.entity.types.creature.CreatureUtils;
|
|
import electrosphere.entity.EntityUtils;
|
|
import electrosphere.entity.state.AttackTree;
|
|
import electrosphere.entity.state.movement.GroundMovementTree;
|
|
import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState;
|
|
import electrosphere.entity.types.collision.CollisionObjUtils;
|
|
import electrosphere.entity.types.item.ItemUtils;
|
|
import electrosphere.main.Globals;
|
|
import electrosphere.menu.MenuTransition;
|
|
import electrosphere.menu.MenuUtils;
|
|
import electrosphere.net.parser.net.message.EntityMessage;
|
|
import electrosphere.renderer.ui.Widget;
|
|
import electrosphere.util.Utilities;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import org.joml.Vector2f;
|
|
import org.joml.Vector3d;
|
|
import org.joml.Vector3f;
|
|
import static org.lwjgl.glfw.GLFW.*;
|
|
import static org.lwjgl.glfw.GLFW.glfwGetCursorPos;
|
|
import static org.lwjgl.glfw.GLFW.glfwGetKey;
|
|
import static org.lwjgl.glfw.GLFW.glfwGetMouseButton;
|
|
import static org.lwjgl.glfw.GLFW.glfwSetInputMode;
|
|
|
|
/**
|
|
*
|
|
* @author amaterasu
|
|
*/
|
|
public class ControlHandler {
|
|
|
|
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_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_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 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 enum ControlsState {
|
|
TITLE_PAGE,
|
|
TITLE_MENU,
|
|
MAIN_GAME,
|
|
IN_GAME_MAIN_MENU,
|
|
NO_INPUT,
|
|
}
|
|
|
|
ControlsState state = ControlsState.TITLE_MENU;
|
|
|
|
boolean mouseIsVisible = true;
|
|
|
|
HashMap<String, Control> controls;
|
|
|
|
ControlHandler(){
|
|
controls = new HashMap();
|
|
}
|
|
|
|
public static ControlHandler generateExampleControlsMap(){
|
|
ControlHandler handler = new ControlHandler();
|
|
/*
|
|
Main Game controls
|
|
*/
|
|
|
|
/*
|
|
Map the controls
|
|
*/
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD, new Control(true,false,GLFW_KEY_W));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD, new Control(true,false,GLFW_KEY_S));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT, new Control(true,false,GLFW_KEY_A));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT, new Control(true,false,GLFW_KEY_D));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP, new Control(true,false,GLFW_KEY_SPACE));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MOVEMENT_FALL, new Control(true,false,GLFW_KEY_LEFT_CONTROL));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY, new Control(false,true,GLFW_MOUSE_BUTTON_LEFT));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(true,false,GLFW_KEY_ESCAPE));
|
|
|
|
/*
|
|
Map the menu navigation controls
|
|
*/
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_INCREMENT, new Control(true,false,GLFW_KEY_DOWN));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_DECREMENT, new Control(true,false,GLFW_KEY_UP));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_SELECT, new Control(true,false,GLFW_KEY_ENTER));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_BACKOUT, new Control(true,false,GLFW_KEY_ESCAPE));
|
|
|
|
/*
|
|
Map the typing controls
|
|
*/
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_BACKSPACE, new Control(true,false,GLFW_KEY_BACKSPACE));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_0, new Control(true,false,GLFW_KEY_0));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_1, new Control(true,false,GLFW_KEY_1));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_2, new Control(true,false,GLFW_KEY_2));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_3, new Control(true,false,GLFW_KEY_3));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_4, new Control(true,false,GLFW_KEY_4));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_5, new Control(true,false,GLFW_KEY_5));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_6, new Control(true,false,GLFW_KEY_6));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_7, new Control(true,false,GLFW_KEY_7));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_8, new Control(true,false,GLFW_KEY_8));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_9, new Control(true,false,GLFW_KEY_9));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_PERIOD, new Control(true,false,GLFW_KEY_PERIOD));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_A, new Control(true,false,GLFW_KEY_A));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_B, new Control(true,false,GLFW_KEY_B));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_C, new Control(true,false,GLFW_KEY_C));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_D, new Control(true,false,GLFW_KEY_D));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_E, new Control(true,false,GLFW_KEY_E));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_F, new Control(true,false,GLFW_KEY_F));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_G, new Control(true,false,GLFW_KEY_G));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_H, new Control(true,false,GLFW_KEY_H));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_I, new Control(true,false,GLFW_KEY_I));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_J, new Control(true,false,GLFW_KEY_J));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_K, new Control(true,false,GLFW_KEY_K));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_L, new Control(true,false,GLFW_KEY_L));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_M, new Control(true,false,GLFW_KEY_M));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_N, new Control(true,false,GLFW_KEY_N));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_O, new Control(true,false,GLFW_KEY_O));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_P, new Control(true,false,GLFW_KEY_P));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Q, new Control(true,false,GLFW_KEY_Q));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_R, new Control(true,false,GLFW_KEY_R));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_S, new Control(true,false,GLFW_KEY_S));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_T, new Control(true,false,GLFW_KEY_T));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_U, new Control(true,false,GLFW_KEY_U));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_V, new Control(true,false,GLFW_KEY_V));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_W, new Control(true,false,GLFW_KEY_W));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_X, new Control(true,false,GLFW_KEY_X));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Y, new Control(true,false,GLFW_KEY_Y));
|
|
handler.addControl(DATA_STRING_INPUT_CODE_MENU_TYPE_Z, new Control(true,false,GLFW_KEY_Z));
|
|
|
|
/*
|
|
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(true,false,GLFW_KEY_Q));
|
|
|
|
/*
|
|
return
|
|
*/
|
|
return handler;
|
|
}
|
|
|
|
|
|
|
|
public void pollControls(){
|
|
switch(state){
|
|
|
|
|
|
case MAIN_GAME:
|
|
pollMainGameControls();
|
|
pollInGameDebugControls();
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case TITLE_MENU:
|
|
pollMenuNavigationControls();
|
|
/*
|
|
Typing..
|
|
*/
|
|
pollTypingControls();
|
|
break;
|
|
|
|
case IN_GAME_MAIN_MENU:
|
|
pollMenuNavigationControls();
|
|
break;
|
|
|
|
case NO_INPUT:
|
|
break;
|
|
|
|
}
|
|
}
|
|
|
|
public void pollMainGameControls(){
|
|
if(Globals.playerCharacter != null){
|
|
GroundMovementTree movementTree = CreatureUtils.getEntityMovementTree(Globals.playerCharacter);
|
|
AttackTree attackTree = CreatureUtils.getAttackTree(Globals.playerCharacter);
|
|
Vector3f cameraEyeVector = CameraEntityUtils.getCameraEye(Globals.playerCamera);
|
|
/*
|
|
Move forward
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).getKeyValue()) == GLFW_PRESS){
|
|
Vector3f newFacingVector = new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize();
|
|
CreatureUtils.setMovementVector(Globals.playerCharacter, newFacingVector);
|
|
// System.out.println("Movement vector: " + newFacingVector);
|
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
|
movementTree.start();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).setState(true);
|
|
//send to server
|
|
// Vector3f position = EntityUtils.getEntityPosition(Globals.playerCharacter);
|
|
// EntityMessage outgoingMessage = EntityMessage.constructMoveMessage(
|
|
// Globals.playerCharacter.getId(),
|
|
// System.currentTimeMillis(),
|
|
// position.x,
|
|
// position.y,
|
|
// position.z
|
|
// );
|
|
// Globals.clientConnection.queueOutgoingMessage(outgoingMessage);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).isState() == true){
|
|
movementTree.slowdown();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FORWARD).setState(false);
|
|
}
|
|
}
|
|
/*
|
|
Move backward
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).getKeyValue()) == GLFW_PRESS){
|
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(cameraEyeVector.x,0,cameraEyeVector.z).normalize());
|
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
|
movementTree.start();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).setState(true);
|
|
//send to server
|
|
// Vector3f position = EntityUtils.getEntityPosition(Globals.playerCharacter);
|
|
// EntityMessage outgoingMessage = EntityMessage.constructMoveMessage(
|
|
// Globals.playerCharacter.getId(),
|
|
// System.currentTimeMillis(),
|
|
// position.x,
|
|
// position.y,
|
|
// position.z
|
|
// );
|
|
// Globals.clientConnection.queueOutgoingMessage(outgoingMessage);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).isState() == true){
|
|
movementTree.slowdown();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_BACKWARD).setState(false);
|
|
}
|
|
}
|
|
/*
|
|
Move left
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).getKeyValue()) == GLFW_PRESS){
|
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(90 * Math.PI / 180)).normalize());
|
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
|
movementTree.start();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).setState(true);
|
|
//send to server
|
|
// Vector3f position = EntityUtils.getEntityPosition(Globals.playerCharacter);
|
|
// EntityMessage outgoingMessage = EntityMessage.constructMoveMessage(
|
|
// Globals.playerCharacter.getId(),
|
|
// System.currentTimeMillis(),
|
|
// position.x,
|
|
// position.y,
|
|
// position.z
|
|
// );
|
|
// Globals.clientConnection.queueOutgoingMessage(outgoingMessage);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).isState() == true){
|
|
movementTree.slowdown();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_LEFT).setState(false);
|
|
}
|
|
}
|
|
/*
|
|
Move right
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).getKeyValue()) == GLFW_PRESS){
|
|
CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3f(-cameraEyeVector.x,0,-cameraEyeVector.z).rotateY((float)(-90 * Math.PI / 180)).normalize());
|
|
if(movementTree.getState()==MovementTreeState.IDLE || movementTree.getState()==MovementTreeState.SLOWDOWN){
|
|
movementTree.start();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).setState(true);
|
|
//send to server
|
|
// Vector3f position = EntityUtils.getEntityPosition(Globals.playerCharacter);
|
|
// EntityMessage outgoingMessage = EntityMessage.constructMoveMessage(
|
|
// Globals.playerCharacter.getId(),
|
|
// System.currentTimeMillis(),
|
|
// position.x,
|
|
// position.y,
|
|
// position.z
|
|
// );
|
|
// Globals.clientConnection.queueOutgoingMessage(outgoingMessage);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).isState() == true){
|
|
movementTree.slowdown();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_RIGHT).setState(false);
|
|
}
|
|
}
|
|
/*
|
|
Move up
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP) && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_JUMP).getKeyValue()) == GLFW_PRESS){
|
|
EntityUtils.getPosition(Globals.playerCharacter).add(new Vector3f(0,0.6f,0).mul(1f));
|
|
}
|
|
/*
|
|
Move down
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MOVEMENT_FALL) && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MOVEMENT_FALL).getKeyValue()) == GLFW_PRESS){
|
|
EntityUtils.getPosition(Globals.playerCharacter).add(new Vector3f(0,-0.6f,0).mul(1f));
|
|
}
|
|
|
|
/*
|
|
Attack
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).isIsMouse() && glfwGetMouseButton(Globals.window, controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).getKeyValue()) == GLFW_PRESS){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).isState() == false){
|
|
if(attackTree != null){
|
|
attackTree.start(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND);
|
|
}
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).isState() == true){
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).setState(false);
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
Main menu dialog toggle
|
|
*/
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).isState() == true){
|
|
//make menu dialog visible
|
|
//change control scheme to in game main menu scheme
|
|
System.out.println("Press main menu");
|
|
Globals.currentMenu = MenuUtils.createInGameMainMenu();
|
|
MenuUtils.makeMenuDrawable(Globals.currentMenu);
|
|
Globals.controlHandler.setHandlerState(ControlsState.IN_GAME_MAIN_MENU);
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU).setState(false);
|
|
}
|
|
}
|
|
//DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU
|
|
}
|
|
}
|
|
|
|
public void pollInGameDebugControls(){
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).isState() == true){
|
|
Entity bow = ItemUtils.spawnBasicItem("Bow");
|
|
EntityUtils.getPosition(bow).set(1, 5, 2);
|
|
CollisionObjUtils.positionCharacter(bow, new Vector3f(1, 5, 2));
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_DEBUG_SPAWN_ITEM).setState(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void pollMenuNavigationControls(){
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MENU_INCREMENT)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).isState() == true){
|
|
Globals.currentMenu.incrementMenuOption();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).setState(false);
|
|
}
|
|
}
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MENU_DECREMENT)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).isState() == true){
|
|
Globals.currentMenu.decrementMenuOption();
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_DECREMENT).setState(false);
|
|
}
|
|
}
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MENU_SELECT)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).isState() == true){
|
|
MenuTransition.selectOption(Globals.currentMenu);
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_SELECT).setState(false);
|
|
}
|
|
}
|
|
if(controls.containsKey(DATA_STRING_INPUT_CODE_MENU_BACKOUT)){
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_INCREMENT).isIsKey() && glfwGetKey(Globals.window, controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setState(true);
|
|
} else {
|
|
if(controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).isState() == true){
|
|
MenuTransition.backout(Globals.currentMenu);
|
|
}
|
|
controls.get(DATA_STRING_INPUT_CODE_MENU_BACKOUT).setState(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void pollTypingControls(){
|
|
|
|
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,
|
|
};
|
|
for(String currentKey : typeKeybinds){
|
|
if(controls.get(currentKey).isIsKey() && glfwGetKey(Globals.window, controls.get(currentKey).getKeyValue()) == GLFW_PRESS){
|
|
controls.get(currentKey).setState(true);
|
|
} else {
|
|
if(controls.get(currentKey).isState() == true){
|
|
MenuTransition.menuHandleKeypress(Globals.currentMenu,currentKey);
|
|
}
|
|
controls.get(currentKey).setState(false);
|
|
}
|
|
}
|
|
}
|
|
|
|
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_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 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 256:
|
|
rVal = "Escape";
|
|
break;
|
|
}
|
|
return rVal;
|
|
}
|
|
|
|
|
|
|
|
}
|