using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; namespace UltraCombos { public class DisplayConfig : MonoBehaviour { [Header( "Display" )] [SerializeField] private FullScreenMode mode = FullScreenMode.Windowed; [SerializeField] private int displayCount = 1; [SerializeField] private Vector2Int resolution = new Vector2Int( 1600, 900 ); [SerializeField] private int fps = 60; [Header( "Misc" )] [Range( 0, 10 )] [SerializeField] private float autoHideCursor = 0; private float cursorStamp; private Vector2 cursorLastPosition; [SerializeField] private bool exitOnEsc = true; private float timestamp = -1; public float currentFps = 30.0f; [Header( "Event" )] public UnityEvent onQuit = new UnityEvent(); private void Awake() { Application.targetFrameRate = fps; #if UNITY_STANDALONE || UNITY_EDITOR if ( mode == FullScreenMode.ExclusiveFullScreen ) { var displays = Display.displays; int num = Mathf.Min( Mathf.Max( displayCount, 1 ), displays.Length ); for ( int i = 0; i < num; ++i ) { displays[i].Activate(); } Screen.SetResolution( Screen.width, Screen.height, mode ); } else if ( mode == FullScreenMode.FullScreenWindow ) { Screen.SetResolution( Screen.width, Screen.height, mode ); } else { Screen.SetResolution( resolution.x, resolution.y, mode ); } #else Screen.sleepTimeout = SleepTimeout.NeverSleep; #endif } private void Update() { if ( autoHideCursor > 0 ) { #if ENABLE_INPUT_SYSTEM var pos = UnityEngine.InputSystem.Mouse.current.position.ReadValue(); #else var pos = (Vector2)Input.mousePosition; #endif var bias = pos - cursorLastPosition; if ( bias.magnitude > 1 ) { cursorLastPosition = pos; cursorStamp = Time.time; } Cursor.visible = Time.time - cursorStamp < autoHideCursor; } if ( Time.time - timestamp > 0 ) { currentFps = Mathf.Lerp( currentFps, 1.0f / (Time.time - timestamp), Time.deltaTime ); timestamp = Time.time; } if ( exitOnEsc ) { #if ENABLE_INPUT_SYSTEM if ( UnityEngine.InputSystem.Keyboard.current.escapeKey.isPressed ) #else if ( Input.GetKey( KeyCode.Escape ) ) #endif { onQuit.Invoke(); Application.Quit(); } } } } }