Skip to content

Commit

Permalink
add: save graphic quality setting to PlayerPrefs
Browse files Browse the repository at this point in the history
Signed-off-by: Alptuğ Cırıt <[email protected]>
  • Loading branch information
mozhoku committed Aug 16, 2024
1 parent 26a8f3f commit 3e313da
Showing 1 changed file with 52 additions and 33 deletions.
85 changes: 52 additions & 33 deletions Assets/AWSIM/Scripts/UI/GraphicsSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,18 @@ public class GraphicsSettings : MonoBehaviour
private List<GameObject> _cameraObjectsList;
private Light _sunSource;

private int _gpuMemorySize;
private int _initialQualityLevel;
private int _currentQualityLevel;
private bool _isInitialised;

/// <summary>
/// PlayerPref key for graphics quality settings:
/// Not set = -1,
/// Low = 0,
/// Medium = 1,
/// High = 2,
/// Ultra = 3,
/// </summary>
private const string UserGraphicsQualityKey = "UserGraphicsQuality";

private readonly List<string> _dropdownOptions = new()
{
Expand All @@ -27,12 +35,13 @@ public class GraphicsSettings : MonoBehaviour

private void Awake()
{
_gpuMemorySize = SystemInfo.graphicsMemorySize;
// Initialize PlayerPref Keys
PlayerPrefs.SetInt(UserGraphicsQualityKey, -1);
}

private void Start()
{
// add main camera to list (BEV cam is not initialized yet will be added later)
// add main camera to list (BEV cam is not initialized yet, will be when enabled)
_cameraObjectsList = new List<GameObject>
{
Camera.main?.gameObject,
Expand All @@ -43,7 +52,17 @@ private void Start()
BirdEyeView.OnCameraInitialized += UpdateGraphicSettingsForAddedCamera;

// Set initial quality level
InitialQualityLevel();
if (PlayerPrefs.HasKey(UserGraphicsQualityKey) &&
PlayerPrefs.GetInt(UserGraphicsQualityKey) != -1)
{
_initialQualityLevel = PlayerPrefs.GetInt(UserGraphicsQualityKey);
UISetQuality(_initialQualityLevel);
}
else
{
// Get GPU memory size
InitialQualityLevel(SystemInfo.graphicsMemorySize);
}

// Populate dropdown with quality settings
_dropdown = GetComponent<Dropdown>();
Expand All @@ -64,36 +83,31 @@ public void Activate()
Start();
}

private void InitialQualityLevel()
private void InitialQualityLevel(int gpuMemorySize)
{
if (!_isInitialised)
// Select Quality settings level (URP Asset) based on the size of the device's graphics memory
switch (gpuMemorySize)
{
// Select Quality settings level (URP Asset) based on the size of the device's graphics memory
switch (_gpuMemorySize)
{
case <= 2048:
_initialQualityLevel = 0;
GraphicsLowQuality();
break;
case <= 4096:
_initialQualityLevel = 1;
GraphicsMediumQuality();
break;
case <= 6144:
_initialQualityLevel = 2;
GraphicsHighQuality();
break;
case <= 8192:
_initialQualityLevel = 3;
GraphicsUltraQuality();
break;
default:
_initialQualityLevel = 3;
GraphicsUltraQuality();
break;
}

_isInitialised = true;
case <= 2048:
_initialQualityLevel = 0;
GraphicsLowQuality();
break;
case <= 4096:
_initialQualityLevel = 1;
GraphicsMediumQuality();
break;
case <= 6144:
_initialQualityLevel = 2;
GraphicsHighQuality();
break;
case <= 8192:
_initialQualityLevel = 3;
GraphicsUltraQuality();
break;
default:
_initialQualityLevel = 3;
GraphicsUltraQuality();
break;
}
}

Expand All @@ -118,8 +132,10 @@ public void UISetQuality(int value)

private void GraphicsLowQuality()
{
// Update quality level
_currentQualityLevel = 0;
QualitySettings.SetQualityLevel(0);
PlayerPrefs.SetInt(UserGraphicsQualityKey, 0);

// update camera parameters
foreach (var cam in _cameraObjectsList)
Expand Down Expand Up @@ -151,6 +167,7 @@ private void GraphicsMediumQuality()
{
_currentQualityLevel = 1;
QualitySettings.SetQualityLevel(1);
PlayerPrefs.SetInt(UserGraphicsQualityKey, 1);

// update camera and volume parameters
foreach (var cam in _cameraObjectsList)
Expand Down Expand Up @@ -184,6 +201,7 @@ private void GraphicsHighQuality()
{
_currentQualityLevel = 2;
QualitySettings.SetQualityLevel(2);
PlayerPrefs.SetInt(UserGraphicsQualityKey, 2);

// update camera parameters
foreach (var cam in _cameraObjectsList)
Expand Down Expand Up @@ -220,6 +238,7 @@ private void GraphicsUltraQuality()
{
_currentQualityLevel = 3;
QualitySettings.SetQualityLevel(3);
PlayerPrefs.SetInt(UserGraphicsQualityKey, 3);

// update camera parameters
foreach (var cam in _cameraObjectsList)
Expand Down

0 comments on commit 3e313da

Please sign in to comment.