settings.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using UnityEngine.Rendering.PostProcessing;
  6. using UnityEditor;
  7. public class settings : MonoBehaviour
  8. {
  9. public AudioSource audSrc;
  10. public GameObject[] settingsSections;
  11. public Button[] settingsSectionsBtns;
  12. public AudioClip settingsSectionSelectedSFX;
  13. public AudioClip settingsChangedSFX;
  14. public AudioClip onHoverSfx;
  15. [Header("Graphics")]
  16. public Toggle vsync;
  17. public Dropdown shadows;
  18. public Dropdown aa;
  19. public Dropdown pp;
  20. public Dropdown particles;
  21. public Dropdown textureQ;
  22. public Dropdown lightningQ;
  23. public void show()
  24. {
  25. gameObject.SetActive(true);
  26. }
  27. public void hide()
  28. {
  29. gameObject.SetActive(false);
  30. }
  31. void Start()
  32. {
  33. DontDestroyOnLoad(gameObject);
  34. SettingPage.instance = this;
  35. vsync.onValueChanged.AddListener((bool b) => {
  36. PlayerPrefs.SetInt("vsync", (b) ? 1 : 0);
  37. PlayerPrefs.Save();
  38. playSettingsChangedSFX();
  39. reloadGraphicSettings();
  40. });
  41. shadows.onValueChanged.AddListener((int option) =>
  42. {
  43. PlayerPrefs.SetInt("shadows", option);
  44. PlayerPrefs.Save();
  45. playSettingsChangedSFX();
  46. reloadGraphicSettings();
  47. });
  48. aa.onValueChanged.AddListener((int option) =>
  49. {
  50. PlayerPrefs.SetInt("aa", option);
  51. PlayerPrefs.Save();
  52. playSettingsChangedSFX();
  53. reloadGraphicSettings();
  54. });
  55. pp.onValueChanged.AddListener((int option) =>
  56. {
  57. PlayerPrefs.SetInt("pp", option);
  58. PlayerPrefs.Save();
  59. playSettingsChangedSFX();
  60. reloadGraphicSettings();
  61. });
  62. particles.onValueChanged.AddListener((int option) =>
  63. {
  64. PlayerPrefs.SetInt("particles", option);
  65. PlayerPrefs.Save();
  66. playSettingsChangedSFX();
  67. reloadGraphicSettings();
  68. });
  69. textureQ.onValueChanged.AddListener((int option) =>
  70. {
  71. PlayerPrefs.SetInt("textureQ", option);
  72. PlayerPrefs.Save();
  73. playSettingsChangedSFX();
  74. reloadGraphicSettings();
  75. });
  76. lightningQ.onValueChanged.AddListener((int option) =>
  77. {
  78. PlayerPrefs.SetInt("lightningQ", option);
  79. PlayerPrefs.Save();
  80. playSettingsChangedSFX();
  81. reloadGraphicSettings();
  82. });
  83. reloadGraphicSettings();
  84. if (settingsSections.Length != settingsSectionsBtns.Length) { Debug.LogError("IMBALANCED SETTINGS CONFIG!"); }
  85. else
  86. {
  87. for (int i = 0; i < settingsSectionsBtns.Length; i++)
  88. {
  89. int x = i;
  90. settingsSectionsBtns[x].onClick.AddListener(() => { onSettingsSectionClick(x); });
  91. }
  92. }
  93. onSettingsSectionClick(0);
  94. }
  95. void onSettingsSectionClick(int i)
  96. {
  97. Debug.Log("Selected " + i + " button");
  98. for (int x = 0; x < settingsSectionsBtns.Length; x++)
  99. {
  100. settingsSectionsBtns[x].interactable = (x != i);
  101. settingsSections[x].SetActive((x == i));
  102. }
  103. reloadGraphicSettings();
  104. audSrc.PlayOneShot(settingsSectionSelectedSFX);
  105. }
  106. void playSettingsChangedSFX()
  107. {
  108. audSrc.PlayOneShot(settingsChangedSFX);
  109. }
  110. public void OnHoverSFX()
  111. {
  112. audSrc.PlayOneShot(onHoverSfx);
  113. }
  114. // Update is called once per frame
  115. void Update()
  116. {
  117. if (Input.GetKeyDown(KeyCode.Escape))
  118. {
  119. hide();
  120. }
  121. }
  122. public void reloadGraphicSettings()
  123. {
  124. //Read all settings from prefs
  125. vsync.isOn = PlayerPrefs.GetInt("vsync") == 1;
  126. shadows.value = PlayerPrefs.GetInt("shadows");
  127. aa.value = PlayerPrefs.GetInt("aa");
  128. pp.value = PlayerPrefs.GetInt("pp");
  129. particles.value = PlayerPrefs.GetInt("particles");
  130. textureQ.value = PlayerPrefs.GetInt("textureQ");
  131. lightningQ.value = PlayerPrefs.GetInt("lightningQ");
  132. //APPLY EACH
  133. QualitySettings.vSyncCount = PlayerPrefs.GetInt("vsync");
  134. QualitySettings.softParticles = pp.value == 1;
  135. switch (shadows.value)
  136. {
  137. case 0:
  138. QualitySettings.shadows = ShadowQuality.All;
  139. QualitySettings.shadowResolution = ShadowResolution.VeryHigh;
  140. break;
  141. case 1:
  142. QualitySettings.shadows = ShadowQuality.All;
  143. QualitySettings.shadowResolution = ShadowResolution.High;
  144. break;
  145. case 2:
  146. QualitySettings.shadows = ShadowQuality.HardOnly;
  147. QualitySettings.shadowResolution = ShadowResolution.Medium;
  148. break;
  149. case 3:
  150. QualitySettings.shadows = ShadowQuality.HardOnly;
  151. QualitySettings.shadowResolution = ShadowResolution.Low;
  152. break;
  153. case 4:
  154. QualitySettings.shadows = ShadowQuality.Disable;
  155. break;
  156. }
  157. switch (aa.value)
  158. {
  159. case 0:
  160. QualitySettings.antiAliasing = 0;
  161. break;
  162. case 1:
  163. QualitySettings.antiAliasing = 2;
  164. break;
  165. case 2:
  166. QualitySettings.antiAliasing = 4;
  167. break;
  168. case 3:
  169. QualitySettings.antiAliasing = 8;
  170. break;
  171. }
  172. PostProcessVolume[] volumes = FindObjectsOfType<PostProcessVolume>();
  173. switch (pp.value)
  174. {
  175. case 0:
  176. foreach (PostProcessVolume vol in volumes)
  177. {
  178. vol.enabled = true;
  179. }
  180. break;
  181. case 3:
  182. foreach(PostProcessVolume vol in volumes)
  183. {
  184. vol.enabled = false;
  185. }
  186. break;
  187. }
  188. QualitySettings.masterTextureLimit = textureQ.value;
  189. switch (lightningQ.value)
  190. {
  191. case 0:
  192. // PlayerSettings.colorSpace = ColorSpace.Linear;
  193. break;
  194. case 1:
  195. // PlayerSettings.colorSpace = ColorSpace.Gamma;
  196. break;
  197. }
  198. }
  199. }
  200. public static class SettingPage
  201. {
  202. public static settings instance;
  203. }