diff --git a/CameraResolutionScale/Plugin.cs b/CameraResolutionScale/Plugin.cs index 37164b1..b8a4fb3 100644 --- a/CameraResolutionScale/Plugin.cs +++ b/CameraResolutionScale/Plugin.cs @@ -3,7 +3,7 @@ using BepInEx.Configuration; using EFT; using UnityEngine; using Comfort.Common; - +using System.Collections; namespace CameraResolutionScale { @@ -20,13 +20,10 @@ namespace CameraResolutionScale } Rect defaultMainCameraRect; - float rectScale; - bool setupDone = false; - - Camera scopeCamera = null; bool isAiming = false; + bool doneOnce = false; Utils utils = new Utils(); void Update() @@ -37,47 +34,43 @@ namespace CameraResolutionScale return; } if (Camera.allCamerasCount < 1) return; - if (Camera.main == null || Camera.main.isActiveAndEnabled == false) - { - setupDone = false; - return; - } - - var handsController = ((Singleton.Instance.RegisteredPlayers[0].HandsController)); isAiming = handsController.IsAiming; - - - if (isAiming) + if (isAiming && !doneOnce) { if (Camera.main == null || Camera.allCamerasCount <= 1) return; - - if (!setupDone) - { - Logger.LogInfo("Storing default Camera.main.rect"); - defaultMainCameraRect = Camera.main.rect; - rectScale = defaultMainCameraRect.width; - Logger.LogInfo($"Rect: {defaultMainCameraRect}"); - setupDone = true; - } - if (scopeCamera == null) scopeCamera = Camera.allCameras[1]; - - scopeCamera.GetComponent().OpticCameraToMainCameraResolutionRatio = (float)(scopeCameraResolutionScale.Value / 100f); - float scale = (float)cameraResolutionScale.Value / 100f; - Camera.main.rect = new Rect(0, 0, rectScale * scale, rectScale * scale); - //Logger.LogInfo($"Updating render resolutions: Main Camera: {cameraResolutionScale.Value}% Scope Camera: {scopeCameraResolutionScale.Value}%"); - + scopeCamera = Camera.allCameras[1]; + + StartCoroutine(setScaledCameraRes()); + doneOnce = true; return; } - if (Camera.main.rect != defaultMainCameraRect && setupDone) + if(!isAiming && doneOnce) { - Logger.LogInfo("Restoring default render resolution"); - Camera.main.rect = defaultMainCameraRect; + StartCoroutine(unsetScaledCameraRes()); + 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; + } } }