revival/game/Assets/Scripts/Rendering/GraphicsSettings.cs

86 lines
2.2 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class GraphicsSettings : MonoBehaviour
{
private static Resolution[] _resolutions;
public static Resolution[] RESOLUTIONS
{
get
{
if ( _resolutions != null )
{
return _resolutions;
}
var resList = new List<Resolution>();
Resolution last = new Resolution();
foreach (var res in Screen.resolutions)
{
if ( res.height != last.height || res.height != last.height )
{
resList.Add(res);
last = res;
}
}
_resolutions = resList.ToArray();
return _resolutions;
}
}
private Resolution _currentResolution;
private FullScreenMode _fullscreenMode;
[SerializeField]
private PlayerPrefValue _resolutionPlayerPref;
[SerializeField]
private PlayerPrefValue _fullscreenPlayerPref;
private const FullScreenMode FULLSCREEN = FullScreenMode.FullScreenWindow;
private const FullScreenMode WINDOWED = FullScreenMode.Windowed;
private void Awake()
{
_currentResolution = RESOLUTIONS[ _resolutionPlayerPref.GetInt( RESOLUTIONS.Length - 1 ) ];
_fullscreenMode
= ( _fullscreenPlayerPref.GetInt( 1 ) > 0 )
? FULLSCREEN
: WINDOWED;
UpdateGraphics();
_resolutionPlayerPref.OnIntSet.AddListener(SetResolution);
_fullscreenPlayerPref.OnIntSet.AddListener( ( value ) => { SetFullscreen( value > 0 ); } );
}
private void SetResolution( int value )
{
_currentResolution = RESOLUTIONS[ value ];
UpdateGraphics();
}
private void SetFullscreen( bool value )
{
_fullscreenMode
= value
? FULLSCREEN
: WINDOWED;
UpdateGraphics();
}
private void UpdateGraphics()
{
Screen.SetResolution(
_currentResolution.width,
_currentResolution.height,
_fullscreenMode
);
}
}