Health/Assets/Shift - Complete Sci-Fi UI/Scripts/Other/QualityManager.cs

213 lines
7.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;
using UnityEngine.Events;
using TMPro;
namespace Michsky.UI.Shift
{
public class QualityManager : MonoBehaviour
{
[Header("Audio")]
public AudioMixer mixer;
public SliderManager masterSlider;
public SliderManager musicSlider;
public SliderManager sfxSlider;
[Header("Resolution")]
public bool preferSelector = true;
public HorizontalSelector resolutionSelector;
public TMP_Dropdown resolutionDropdown;
[System.Serializable]
public class DynamicRes : UnityEvent<int> { }
public DynamicRes clickEvent;
Resolution[] resolutions;
List<string> options = new List<string>();
[System.Obsolete]
void Start()
{
mixer.SetFloat("Master", Mathf.Log10(PlayerPrefs.GetFloat(masterSlider.sliderTag + "SliderValue")) * 20);
mixer.SetFloat("Music", Mathf.Log10(PlayerPrefs.GetFloat(musicSlider.sliderTag + "SliderValue")) * 20);
mixer.SetFloat("SFX", Mathf.Log10(PlayerPrefs.GetFloat(sfxSlider.sliderTag + "SliderValue")) * 20);
resolutions = Screen.resolutions;
if (preferSelector == true)
{
if (resolutionDropdown != null) { resolutionDropdown.gameObject.SetActive(false); }
if (resolutionSelector != null) { resolutionSelector.gameObject.SetActive(true); }
else { return; }
resolutionSelector.itemList.RemoveRange(0, resolutionSelector.itemList.Count);
int currentResolutionIndex = -1;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + "x" + resolutions[i].height + " " + resolutions[i].refreshRate + "hz";
options.Add(option);
resolutionSelector.CreateNewItem(options[i]);
// resolutionSelector.itemList[i].onValueChanged.AddListener(UpdateResolution);
if (resolutions[i].width == Screen.currentResolution.width
&& resolutions[i].height == Screen.currentResolution.height
&& resolutions[i].refreshRate == Screen.currentResolution.refreshRate)
{
currentResolutionIndex = i;
resolutionSelector.index = currentResolutionIndex;
}
}
if (currentResolutionIndex == 0) { resolutionSelector.index = resolutionSelector.itemList.Count - 1; }
resolutionSelector.UpdateUI();
}
else
{
if (resolutionSelector != null) { resolutionSelector.gameObject.SetActive(false); }
if (resolutionDropdown != null) { resolutionDropdown.gameObject.SetActive(true); }
else { return; }
resolutionDropdown.ClearOptions();
List<string> options = new List<string>();
int currentResolutionIndex = 0;
for (int i = 0; i < resolutions.Length; i++)
{
string option = resolutions[i].width + "x" + resolutions[i].height + " " + resolutions[i].refreshRate + "hz";
options.Add(option);
if (resolutions[i].width == Screen.currentResolution.width
&& resolutions[i].height == Screen.currentResolution.height
&& resolutions[i].refreshRate == Screen.currentResolution.refreshRate)
currentResolutionIndex = i;
}
resolutionDropdown.AddOptions(options);
resolutionDropdown.value = currentResolutionIndex;
resolutionDropdown.RefreshShownValue();
}
}
public void UpdateResolution()
{
clickEvent.Invoke(resolutionSelector.index);
}
public void SetResolution(int resolutionIndex)
{
Screen.SetResolution(resolutions[resolutionIndex].width, resolutions[resolutionIndex].height, Screen.fullScreen);
}
public void AnisotrpicFilteringEnable()
{
QualitySettings.anisotropicFiltering = AnisotropicFiltering.ForceEnable;
}
public void AnisotrpicFilteringDisable()
{
QualitySettings.anisotropicFiltering = AnisotropicFiltering.Disable;
}
public void AntiAlisasingSet(int index)
{
// 0, 2, 4, 8 - Zero means off
QualitySettings.antiAliasing = index;
}
public void VsyncSet(int index)
{
// 0, 1 - Zero means off
QualitySettings.vSyncCount = index;
}
public void ShadowResolutionSet(int index)
{
if (index == 3)
QualitySettings.shadowResolution = ShadowResolution.VeryHigh;
else if (index == 2)
QualitySettings.shadowResolution = ShadowResolution.High;
else if (index == 1)
QualitySettings.shadowResolution = ShadowResolution.Medium;
else if (index == 0)
QualitySettings.shadowResolution = ShadowResolution.Low;
}
public void ShadowsSet(int index)
{
if (index == 0)
QualitySettings.shadows = ShadowQuality.Disable;
else if (index == 1)
QualitySettings.shadows = ShadowQuality.All;
}
public void ShadowsCascasedSet(int index)
{
//0 = No, 2 = Two, 4 = Four
QualitySettings.shadowCascades = index;
}
public void TextureSet(int index)
{
// 0 = Full, 4 = Eight Resolution
QualitySettings.globalTextureMipmapLimit = index;
}
public void SoftParticleSet(int index)
{
if (index == 0)
QualitySettings.softParticles = false;
else if (index == 1)
QualitySettings.softParticles = true;
}
public void ReflectionSet(int index)
{
if (index == 0)
QualitySettings.realtimeReflectionProbes = false;
else if (index == 1)
QualitySettings.realtimeReflectionProbes = true;
}
public void VolumeSetMaster(float volume)
{
mixer.SetFloat("Master", Mathf.Log10(volume) * 20);
}
public void VolumeSetMusic(float volume)
{
mixer.SetFloat("Music", Mathf.Log10(volume) * 20);
}
public void VolumeSetSFX(float volume)
{
mixer.SetFloat("SFX", Mathf.Log10(volume) * 20);
}
public void SetOverallQuality(int qualityIndex)
{
QualitySettings.SetQualityLevel(qualityIndex);
}
public void WindowFullscreen()
{
Screen.fullScreen = true;
Screen.fullScreenMode = FullScreenMode.FullScreenWindow;
}
public void WindowBorderless()
{
Screen.fullScreenMode = FullScreenMode.MaximizedWindow;
}
public void WindowWindowed()
{
Screen.fullScreen = false;
Screen.fullScreenMode = FullScreenMode.Windowed;
}
}
}