From c571e736cb3c0332464e0502f751579e0633b570 Mon Sep 17 00:00:00 2001 From: austin Date: Tue, 16 Nov 2021 00:50:59 -0500 Subject: [PATCH] Crosshair lock on logic --- .../controls/ControlHandler.java | 25 ++++++++++ .../electrosphere/engine/LoadingThread.java | 4 +- .../client/targeting/crosshair/Crosshair.java | 22 ++++++++ src/main/java/electrosphere/main/Main.java | 50 ++++++++++++++----- 4 files changed, 87 insertions(+), 14 deletions(-) diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index c83cfe6a..be22766e 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -10,6 +10,7 @@ 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.game.client.targeting.crosshair.Crosshair; import electrosphere.main.Globals; import electrosphere.menu.MenuTransition; import electrosphere.menu.MenuUtils; @@ -42,6 +43,7 @@ public class ControlHandler { 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 DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement"; public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement"; @@ -125,6 +127,7 @@ public class ControlHandler { 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)); + handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(false,true,GLFW_MOUSE_BUTTON_RIGHT)); /* Map the menu navigation controls @@ -378,6 +381,28 @@ public class ControlHandler { } + /* + Lock on crosshair + */ + if(controls.containsKey(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR)){ + if(controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).isIsMouse() && glfwGetMouseButton(Globals.window, controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).getKeyValue()) == GLFW_PRESS){ + if(controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).isState() == false){ + if(Crosshair.hasTarget()){ + Crosshair.setCrosshairActive(true); + } + } + controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).setState(true); + } else { + if(controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).isState() == true){ + if(Crosshair.getCrosshairActive()){ + Crosshair.setCrosshairActive(false); + } + } + controls.get(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR).setState(false); + } + } + + /* Main menu dialog toggle */ diff --git a/src/main/java/electrosphere/engine/LoadingThread.java b/src/main/java/electrosphere/engine/LoadingThread.java index 95d7351c..2a3e1996 100644 --- a/src/main/java/electrosphere/engine/LoadingThread.java +++ b/src/main/java/electrosphere/engine/LoadingThread.java @@ -620,8 +620,8 @@ public class LoadingThread extends Thread { //give evil goblin sword Entity goblinSword = ItemUtils.spawnBasicItem("Katana"); AttachUtils.attachEntityToEntityAtBone(goblin, goblinSword, "Bone.031"); - //attach ai to evil goblin - MindlessAttacker.attachToCreature(goblin); +// //attach ai to evil goblin +// MindlessAttacker.attachToCreature(goblin); // goblin = CreatureUtils.spawnBasicCreature("Goblin"); // CollisionObjUtils.positionCharacter(goblin, new Vector3f(3, 0, 4)); diff --git a/src/main/java/electrosphere/game/client/targeting/crosshair/Crosshair.java b/src/main/java/electrosphere/game/client/targeting/crosshair/Crosshair.java index 8cf5e138..12067f0b 100644 --- a/src/main/java/electrosphere/game/client/targeting/crosshair/Crosshair.java +++ b/src/main/java/electrosphere/game/client/targeting/crosshair/Crosshair.java @@ -18,6 +18,7 @@ public class Crosshair { static float bobMagnitude = 0.1f; static float offsetVertical = 1; static Entity currentTarget = null; + static boolean crosshairActive = false; public static void initCrossHairEntity(){ crossHairEntity = EntityUtils.spawnDrawableEntity("/Models/lockoncrosshair1.fbx"); @@ -30,6 +31,7 @@ public class Crosshair { if(crossHairEntity != null && Globals.playerCharacter != null){ Vector3d parentPos = EntityUtils.getPosition(Globals.playerCharacter); // if(currentTarget == null){ + if(!crosshairActive){ Entity target = null; double dist = 100; for(Entity entity : Globals.entityManager.getTargetables()){ @@ -45,7 +47,11 @@ public class Crosshair { // System.out.println("Found target!"); currentTarget = target; EntityUtils.setVisible(crossHairEntity, true); + } else { + currentTarget = null; + EntityUtils.setVisible(crossHairEntity, false); } + } // } else { // if(parentPos.distance(EntityUtils.getPosition(currentTarget)) > TARGET_MAX_DIST){ // currentTarget = null; @@ -72,5 +78,21 @@ public class Crosshair { } } + public static void setCrosshairActive(boolean active){ + crosshairActive = active; + } + + public static boolean getCrosshairActive(){ + return crosshairActive; + } + + public static boolean hasTarget(){ + return currentTarget != null; + } + + public static Vector3d getTargetPosition(){ + return EntityUtils.getPosition(currentTarget); + } + } diff --git a/src/main/java/electrosphere/main/Main.java b/src/main/java/electrosphere/main/Main.java index 684cfb11..c8f440cb 100644 --- a/src/main/java/electrosphere/main/Main.java +++ b/src/main/java/electrosphere/main/Main.java @@ -18,6 +18,7 @@ import electrosphere.entity.types.item.ItemUtils; import electrosphere.entity.types.attach.AttachUtils; import electrosphere.engine.LoadingThread; import electrosphere.game.client.ClientFunctions; +import electrosphere.game.client.targeting.crosshair.Crosshair; import electrosphere.game.config.UserSettings; import electrosphere.game.server.saves.SaveUtils; import electrosphere.game.server.terrain.manager.ServerTerrainManager; @@ -294,22 +295,47 @@ public class Main { updateMouseVariables(); - CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); - CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); - - if(Globals.playerCharacter != null){ - Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); - CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); + if(Crosshair.getCrosshairActive()){ + + if(Globals.playerCharacter != null){ + Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); + CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); + } + + Vector3d characterPos = EntityUtils.getPosition(Globals.playerCharacter); + Vector3d targetPos = Crosshair.getTargetPosition(); + Vector3d diffed = new Vector3d(targetPos).sub(characterPos).mul(-1).normalize(); + cameraRotationVector.set((float)diffed.x, 0.5f, (float)diffed.z).normalize(); + + yaw = (float)Math.toDegrees(Math.atan2(diffed.z, diffed.x)); + + CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); + CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); + + } else { + CameraEntityUtils.setCameraPitch(Globals.playerCamera, pitch); + CameraEntityUtils.setCameraYaw(Globals.playerCamera, yaw); + + if(Globals.playerCharacter != null){ + Vector3d charPos = EntityUtils.getPosition(Globals.playerCharacter); + CameraEntityUtils.setCameraCenter(Globals.playerCamera, new Vector3f((float)charPos.x,(float)charPos.y,(float)charPos.z)); + } + + float cam_Player_Orbit_Magnitude = 5f; + cameraRotationVector.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; + cameraRotationVector.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; + cameraRotationVector.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; + cameraRotationVector.normalize(); } - float cam_Player_Orbit_Magnitude = 5f; - cameraRotationVector.x = 0 + (float) Math.cos(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cameraRotationVector.y = 0 + (float) Math.sin(pitch / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cameraRotationVector.z = 0 + (float) Math.sin(yaw / 180.0f * Math.PI) * cam_Player_Orbit_Magnitude; - cameraRotationVector.normalize(); - CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector); +// if(Crosshair.getCrosshairActive()){ +// CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector); +// } else { +// CameraEntityUtils.setCameraEye(Globals.playerCamera, cameraRotationVector); +// } + // if(Globals.playerCharacter != null){ // Vector3f playerPos = EntityUtils.getPosition(Globals.playerCharacter); // if(posX == -1 && playerPos.x > 100){