From 19c13e03cd29c93944d8029809f8eb9a8ce6aae4 Mon Sep 17 00:00:00 2001 From: notGreg Date: Thu, 15 Sep 2022 21:14:26 +0200 Subject: [PATCH] updated to utilize SSAA ratios for the main camera --- CameraResolutionScale/Plugin.cs | 77 ++++++++++++++++++++------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/CameraResolutionScale/Plugin.cs b/CameraResolutionScale/Plugin.cs index b8a4fb3..ea7921c 100644 --- a/CameraResolutionScale/Plugin.cs +++ b/CameraResolutionScale/Plugin.cs @@ -4,8 +4,9 @@ using EFT; using UnityEngine; using Comfort.Common; using System.Collections; +using System.Reflection; -namespace CameraResolutionScale +namespace CameraResolutionScale { [BepInPlugin("com.notGreg.cameraScaleControl", "notGreg's Camera Resolution Settings", "1.0.0")] public class Plugin : BaseUnityPlugin @@ -15,62 +16,80 @@ namespace CameraResolutionScale void Awake() { - cameraResolutionScale = Config.Bind("General", "Main camera scale %", 50, new ConfigDescription("Main camera resulution scae", new AcceptableValueRange(10,200))); - scopeCameraResolutionScale = Config.Bind("General", "Scope camera scale %", 33, new ConfigDescription("Scope camera resulution scae", new AcceptableValueRange(10, 200))); + cameraResolutionScale = Config.Bind("General", "Main camera scale %", 80, new ConfigDescription("Main camera resulution sclae", new AcceptableValueRange(50, 100))); + scopeCameraResolutionScale = Config.Bind("General", "Scope camera scale %", 40, new ConfigDescription("Scope camera resulution scale", new AcceptableValueRange(25, 100))); } - Rect defaultMainCameraRect; + float defaultSSRatio = 1.0f; + Camera FPSCamera = null; Camera scopeCamera = null; bool isAiming = false; bool doneOnce = false; + SSAA ssaaInstance = null; + FieldInfo _currentSSRatio = null; + FieldInfo _nextSSRation = null; + Utils utils = new Utils(); + + void Update() { - if (!utils.gameIsReady()) - + if (!utils.gameIsReady()) { + //reset everything ahead of time + FPSCamera = null; + scopeCamera = null; + doneOnce = false; + ssaaInstance = null; return; } if (Camera.allCamerasCount < 1) return; + if (GameObject.Find("FPS Camera") != null && FPSCamera == null) + { + FPSCamera = GameObject.Find("FPS Camera").GetComponent(); + } + if (GameObject.Find("BaseOpticCamera(Clone)") != null && scopeCamera == null) + { + scopeCamera = GameObject.Find("BaseOpticCamera(Clone)").GetComponent(); + } + var handsController = ((Singleton.Instance.RegisteredPlayers[0].HandsController)); isAiming = handsController.IsAiming; + if(ssaaInstance == null) + { + ssaaInstance = FPSCamera.GetComponent(); + _nextSSRation = typeof(SSAA).GetField("_nextSSRation", BindingFlags.NonPublic | BindingFlags.Instance); + _currentSSRatio = typeof(SSAA).GetField("_currentSSRatio", BindingFlags.NonPublic | BindingFlags.Instance); + + Logger.LogInfo($"Updating defaultSSRatio to {_nextSSRation.GetValue(ssaaInstance)}"); + defaultSSRatio = (float)_nextSSRation.GetValue(ssaaInstance); + } + if (isAiming && !doneOnce) { - if (Camera.main == null || Camera.allCamerasCount <= 1) return; - if (scopeCamera == null) scopeCamera = Camera.allCameras[1]; - scopeCamera = Camera.allCameras[1]; - - StartCoroutine(setScaledCameraRes()); + if (FPSCamera == null) return; + if (scopeCamera == null || scopeCamera.isActiveAndEnabled == false) return; + + _nextSSRation.SetValue(ssaaInstance, (float)(defaultSSRatio * cameraResolutionScale.Value / 100f)); + Logger.LogInfo($"Updated to: {_nextSSRation.GetValue(ssaaInstance)}"); + + scopeCamera.GetComponent().OpticCameraToMainCameraResolutionRatio = (float)(scopeCameraResolutionScale.Value / 100f); + doneOnce = true; return; } - if(!isAiming && doneOnce) + if (!isAiming && doneOnce) { - StartCoroutine(unsetScaledCameraRes()); + Logger.LogInfo($"Restoring default scale: {defaultSSRatio}"); + _nextSSRation.SetValue(ssaaInstance, defaultSSRatio); doneOnce = false; return; } } - - IEnumerator setScaledCameraRes() - { - defaultMainCameraRect = Camera.main.rect; - - yield return new WaitForSeconds(0.05f); - - Camera.main.rect = new Rect(0, 0, defaultMainCameraRect.width * (cameraResolutionScale.Value / 100f), defaultMainCameraRect.height * (cameraResolutionScale.Value / 100f)); - scopeCamera.GetComponent().OpticCameraToMainCameraResolutionRatio = (float)(scopeCameraResolutionScale.Value / 100f); - } - - IEnumerator unsetScaledCameraRes() - { - Camera.main.rect = defaultMainCameraRect; - yield return null; - } } }