2022-09-08 21:29:16 +02:00
using BepInEx ;
using BepInEx.Configuration ;
using EFT ;
using UnityEngine ;
using Comfort.Common ;
2022-09-11 18:48:53 +02:00
using System.Collections ;
2022-09-08 21:29:16 +02:00
namespace CameraResolutionScale
{
[BepInPlugin("com.notGreg.cameraScaleControl", "notGreg's Camera Resolution Settings", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
ConfigEntry < int > cameraResolutionScale ;
ConfigEntry < int > scopeCameraResolutionScale ;
void Awake ( )
{
cameraResolutionScale = Config . Bind ( "General" , "Main camera scale %" , 50 , new ConfigDescription ( "Main camera resulution scae" , new AcceptableValueRange < int > ( 10 , 200 ) ) ) ;
scopeCameraResolutionScale = Config . Bind ( "General" , "Scope camera scale %" , 33 , new ConfigDescription ( "Scope camera resulution scae" , new AcceptableValueRange < int > ( 10 , 200 ) ) ) ;
}
Rect defaultMainCameraRect ;
Camera scopeCamera = null ;
bool isAiming = false ;
2022-09-11 18:48:53 +02:00
bool doneOnce = false ;
2022-09-08 21:29:16 +02:00
Utils utils = new Utils ( ) ;
void Update ( )
{
if ( ! utils . gameIsReady ( ) )
{
return ;
}
if ( Camera . allCamerasCount < 1 ) return ;
var handsController = ( ( Singleton < GameWorld > . Instance . RegisteredPlayers [ 0 ] . HandsController ) ) ;
isAiming = handsController . IsAiming ;
2022-09-11 18:48:53 +02:00
if ( isAiming & & ! doneOnce )
2022-09-08 21:29:16 +02:00
{
if ( Camera . main = = null | | Camera . allCamerasCount < = 1 ) return ;
if ( scopeCamera = = null ) scopeCamera = Camera . allCameras [ 1 ] ;
2022-09-11 18:48:53 +02:00
scopeCamera = Camera . allCameras [ 1 ] ;
StartCoroutine ( setScaledCameraRes ( ) ) ;
doneOnce = true ;
2022-09-08 21:29:16 +02:00
return ;
}
2022-09-11 18:48:53 +02:00
if ( ! isAiming & & doneOnce )
2022-09-08 21:29:16 +02:00
{
2022-09-11 18:48:53 +02:00
StartCoroutine ( unsetScaledCameraRes ( ) ) ;
doneOnce = false ;
return ;
2022-09-08 21:29:16 +02:00
}
}
2022-09-11 18:48:53 +02:00
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 < SSAAOptic > ( ) . OpticCameraToMainCameraResolutionRatio = ( float ) ( scopeCameraResolutionScale . Value / 100f ) ;
}
IEnumerator unsetScaledCameraRes ( )
{
Camera . main . rect = defaultMainCameraRect ;
yield return null ;
}
2022-09-08 21:29:16 +02:00
}
}