diff --git a/TarkovUniformAim/UniformAimCore.cs b/TarkovUniformAim/UniformAimCore.cs index 215c763..7a69f1b 100644 --- a/TarkovUniformAim/UniformAimCore.cs +++ b/TarkovUniformAim/UniformAimCore.cs @@ -1,4 +1,6 @@ -using System; +using BepInEx; +using BepInEx.Configuration; +using System; using UnityEngine; namespace UniformAim @@ -6,14 +8,14 @@ namespace UniformAim public class Core { //math stuff - public static float CalculateHFOV(float FOV) + public float CalculateHFOV(float FOV) { //RETURNS RADIANS return Camera.VerticalToHorizontalFieldOfView(FOV, Camera.main.aspect); } //calculate sensitivity based on FOV delta and coefficient - public static float CalculateSensitivity(float aimedFOV, float hipFOV) + public float CalculateSensitivity(float aimedFOV, float hipFOV) { //calculate horizontal FOV values for inputs aimedFOV = CalculateHFOV(aimedFOV) * Mathf.Deg2Rad; @@ -37,12 +39,53 @@ namespace UniformAim return false; } //figure out current fov based on scope and in-game camera statuses - public static float DetermineCurrentFOV() + public float DetermineCurrentFOV(float FPSCameraFOV, float ScopeCameraFOV, int SelectedScope, int SelectedScopeMode = 0) { //dirty fix for the Ultima MP-155 shotgun - if (Plugin.currentFPSCameraFOV> 35 && isScopeCameraActive() && Plugin.currentScopeCameraFOV == 15) { return Plugin.currentFPSCameraFOV; } + try + { + if(GameObject.Find("tactical_mp155_kalashnikov_ultima_camera(Clone)").GetComponent().isActiveAndEnabled) + { + if (Plugin.currentFPSCameraFOV > (Plugin.configFOV.Value - 15) && isScopeCameraActive() && Plugin.currentScopeCameraFOV == 15) { return Plugin.currentFPSCameraFOV; } + } + } + catch (NullReferenceException) + { + return Plugin.currentFPSCameraFOV; + } + //if (Plugin.currentFPSCameraFOV > (Plugin.configFOV.Value - 15) && isScopeCameraActive() && Plugin.currentScopeCameraFOV == 15) { return Plugin.currentFPSCameraFOV; } - if (Plugin.SelectedScope == 0 && isScopeCameraActive()) { return Plugin.currentScopeCameraFOV; } else { return Plugin.currentFPSCameraFOV; } + //dirty fix for Leupold D-EVO mod + try + { + if(GameObject.Find("scope_leupold_d_evo(Clone)").GetComponent().isActiveAndEnabled) + { + switch (Plugin.SelectedScope) + { + case 0: return Plugin.currentFPSCameraFOV; + case 1: return Plugin.currentScopeCameraFOV; + } + } + } + catch(NullReferenceException) + { + return Plugin.currentFPSCameraFOV; + } + + try + { + if(Camera.main.isActiveAndEnabled && Plugin.SelectedScope == 0 && isScopeCameraActive()) + { + return Plugin.currentScopeCameraFOV; + } + else { return Plugin.currentFPSCameraFOV; } + } + catch (NullReferenceException) + { + return Plugin.configFOV.Value; + } + + // if (Plugin.SelectedScope == 0 && isScopeCameraActive()) { return Plugin.currentScopeCameraFOV; } else { return Plugin.currentFPSCameraFOV; } } } } diff --git a/TarkovUniformAim/UniformAimPlugin.cs b/TarkovUniformAim/UniformAimPlugin.cs index 87d3a93..d388d9f 100644 --- a/TarkovUniformAim/UniformAimPlugin.cs +++ b/TarkovUniformAim/UniformAimPlugin.cs @@ -1,27 +1,26 @@ using BepInEx; using BepInEx.Configuration; using UnityEngine; +using System; namespace UniformAim { - [BepInPlugin("com.greg.tarkovuniformaim", "Uniform Aim for Tarkov", "1.1.2")] + [BepInPlugin("com.greg.tarkovuniformaim", "Uniform Aim for Tarkov", "1.1.3")] [BepInProcess("EscapeFromTarkov.exe")] public class Plugin : BaseUnityPlugin { - - //Bepinex.Configurator fields public static ConfigEntry configFOV; int[] FOVRange = new int[2] { 50, 75 }; - public static ConfigEntry configFOVRangeOverride; + ConfigEntry configFOVRangeOverride; public static ConfigEntry configCoeff; public static ConfigEntry configSens; - public static ConfigEntry configDebug; + ConfigEntry configDebug; //only for persistence - public static ConfigEntry inGameSens; + ConfigEntry inGameSens; public static float mySens = 1f; //public static float aimingSens; @@ -32,21 +31,14 @@ namespace UniformAim public static bool isAiming = false; //human-friendly names for variables used later - public static float baseCameraFOV = 75; + float baseCameraFOV = 75; public static float currentFPSCameraFOV = 75; public static float currentScopeCameraFOV = 75; - string lastDebugLog; - void printDebug() - { - string debugLog = $"\nIn-Game FOV: {configFOV.Value} | In-Game Sens: {inGameSens.Value} | FOV Override: {configFOVRangeOverride.Value}" + - $"\nFPS Camera FOV: {currentFPSCameraFOV}V / {Core.CalculateHFOV(currentFPSCameraFOV)}H | BaseOpticCamera FOV: {currentScopeCameraFOV}V / {Core.CalculateHFOV(currentScopeCameraFOV)}H | CurrentFOV: {Core.DetermineCurrentFOV()}V / {Core.CalculateHFOV(Core.DetermineCurrentFOV())}H" + - $"\nisAiming? {isAiming} | SelectedScope: {SelectedScope} | SelectedScopeMode:{SelectedScopeMode}" + - $"\nCalculated sensitivity: {Core.CalculateSensitivity(Core.DetermineCurrentFOV(), baseCameraFOV)}" + - $"\nAspect Ratio: {Camera.main.aspect}" + - $"\nFinal Sensitivity: {mySens * inGameSens.Value}"; - if (lastDebugLog != debugLog) { Logger.LogInfo(debugLog); lastDebugLog = debugLog; } - } + Core core = new Core(); + Utils utils = new Utils(); + Vector2 FOVInfo; + Vector2 ScopeInfo; void Awake() { @@ -77,31 +69,38 @@ namespace UniformAim //settings for persistence, these values get updated when the in-game menu is opened inGameSens = Config.Bind("¡Do not touch unless necessary!", "In-game Aiming Sensitivity value", 0.5f, new ConfigDescription("Should update on its own - kept for persistence between sessions.", new AcceptableValueRange(0.1f, 5.0f))); - } void FixedUpdate() { //FixedUpdate() at 50Hz (Unity default) tickrate appears to resolve the issue of this script breaking when AI spawns Time.fixedDeltaTime = (1f / 50f); - if (Utils.SetRootObject() != null) + if (utils.SetRootObject() != null) { - var rootObject = Utils.SetRootObject(); + var rootObject = utils.SetRootObject(); //only update these values if the menu has been opened, otherwise read the config if (rootObject.transform.Find("Game Settings").gameObject.activeInHierarchy) { - if (!configFOVRangeOverride.Value) { configFOV.Value = 50 + Utils.GetInGameFOV(rootObject); } - inGameSens.Value = Utils.GetInGameSens(rootObject); + if (!configFOVRangeOverride.Value) { configFOV.Value = 50 + utils.GetInGameFOV(rootObject); } + inGameSens.Value = utils.GetInGameSens(rootObject); } } + //check if the player is in the Hideout or in a Raid + var isRunning = utils.checkIsReady(); + if (!isRunning) return; + + try { + if (Camera.main.isActiveAndEnabled != true) + { return; } + }catch(NullReferenceException) + { + Logger.LogInfo("Main camera is disabled!"); + } + //Print debug info in BepInEx console if (configDebug.Value) printDebug(); - //check if the player is in the Hideout or in a Raid - var isRunning = Utils.checkIsReady(); - if (!isRunning) return; - if (isRunning) { //check if the player is aiming @@ -113,11 +112,25 @@ namespace UniformAim //Figure out if the FPSCamera is zoomed in, prevents the script from ticking while the player is healing if (currentFPSCameraFOV < configFOV.Value) { - mySens = inGameSens.Value * Core.CalculateSensitivity(Core.DetermineCurrentFOV(), configFOV.Value); + FOVInfo = new Vector2(currentFPSCameraFOV, currentScopeCameraFOV); + ScopeInfo = new Vector2(SelectedScope, SelectedScopeMode); + mySens = inGameSens.Value * core.CalculateSensitivity(core.DetermineCurrentFOV(FOVInfo.x, FOVInfo.y, (int)ScopeInfo.x, (int)ScopeInfo.y), configFOV.Value); } } } } + + string lastDebugLog; + void printDebug() + { + string debugLog = $"\nIn-Game FOV: {configFOV.Value} | In-Game Sens: {inGameSens.Value} | FOV Override: {configFOVRangeOverride.Value}" + + $"\nFPS Camera FOV: {currentFPSCameraFOV}V / {core.CalculateHFOV(currentFPSCameraFOV)}H | BaseOpticCamera FOV: {currentScopeCameraFOV}V / {core.CalculateHFOV(currentScopeCameraFOV)}H | CurrentFOV: {core.DetermineCurrentFOV(FOVInfo.x, FOVInfo.y, (int)ScopeInfo.x, (int)ScopeInfo.y)}V / {core.CalculateHFOV(core.DetermineCurrentFOV(FOVInfo.x, FOVInfo.y, (int)ScopeInfo.x, (int)ScopeInfo.y))}H" + + $"\nisAiming? {isAiming} | SelectedScope: {SelectedScope} | SelectedScopeMode:{SelectedScopeMode}" + + $"\nCalculated sensitivity: {core.CalculateSensitivity(core.DetermineCurrentFOV(FOVInfo.x, FOVInfo.y, (int)ScopeInfo.x, (int)ScopeInfo.y), baseCameraFOV)}" + + $"\nAspect Ratio: {Camera.main.aspect}" + + $"\nFinal Sensitivity: {mySens}"; + if (lastDebugLog != debugLog) { Logger.LogInfo(debugLog); lastDebugLog = debugLog; } + } } } diff --git a/TarkovUniformAim/UniformAimUtils.cs b/TarkovUniformAim/UniformAimUtils.cs index b6f9f90..cd41022 100644 --- a/TarkovUniformAim/UniformAimUtils.cs +++ b/TarkovUniformAim/UniformAimUtils.cs @@ -8,10 +8,10 @@ namespace UniformAim { public class Utils { - public static bool isPlaying = false; - public static GameObject rootObject = null; + //bool isPlaying = false; + //GameObject rootObject = null; - public static bool checkIsReady() + public bool checkIsReady() { var gameWorld = Singleton.Instance; var sessionResultPanel = Singleton.Instance; @@ -26,7 +26,7 @@ namespace UniformAim return true; } - public static bool checkPlayerIsAlive() + bool checkPlayerIsAlive() { var gameWorld = Singleton.Instance; var currentHealth = gameWorld.AllPlayers[0].HealthController.GetBodyPartHealth(EBodyPart.Common).Current; @@ -35,7 +35,7 @@ namespace UniformAim } - public static GameObject SetRootObject() + public GameObject SetRootObject() { string path = "Common UI/Common UI/SettingsScreen"; @@ -47,7 +47,7 @@ namespace UniformAim else { return null; } } - public static int GetInGameFOV(GameObject root) + public int GetInGameFOV(GameObject root) { GameObject fovObject = root.transform.Find("Game Settings/Image/Other Settings/FOV/FOV").gameObject; int rootFOV = fovObject.GetComponent().CurrentValue(); @@ -55,7 +55,7 @@ namespace UniformAim return rootFOV; } - public static float GetInGameSens(GameObject root) + public float GetInGameSens(GameObject root) { GameObject sensObject = root.transform.Find("Control Settings/ControlPanel/Mouse Settings/Sensitivity Aiming Panel/Mouse Sensitivity Aiming").gameObject; float rootSens = sensObject.GetComponent().CurrentValue();