EnviroQualityModule.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. namespace Enviro
  6. {
  7. [Serializable]
  8. public class EnviroQualities
  9. {
  10. public EnviroQuality defaultQuality;
  11. public List<EnviroQuality> Qualities = new List<EnviroQuality>();
  12. }
  13. [Serializable]
  14. public class EnviroQualityModule : EnviroModule
  15. {
  16. public Enviro.EnviroQualities Settings = new EnviroQualities();
  17. public EnviroQualityModule preset;
  18. public bool showQualityControls;
  19. public override void Enable()
  20. {
  21. base.Enable();
  22. //Make sure that we always have at least one quality profile!
  23. if(Settings.defaultQuality == null)
  24. {
  25. if(Settings.Qualities.Count > 0)
  26. {
  27. Settings.defaultQuality = Settings.Qualities[0];
  28. }
  29. else
  30. {
  31. CreateNewQuality();
  32. Settings.defaultQuality = Settings.Qualities[0];
  33. }
  34. }
  35. }
  36. public override void UpdateModule ()
  37. {
  38. if(Settings.defaultQuality != null)
  39. {
  40. if(EnviroManager.instance.VolumetricClouds != null)
  41. {
  42. EnviroManager.instance.VolumetricClouds.settingsQuality.volumetricClouds = Settings.defaultQuality.volumetricCloudsOverride.volumetricClouds;
  43. EnviroManager.instance.VolumetricClouds.settingsGlobal.dualLayer = Settings.defaultQuality.volumetricCloudsOverride.dualLayer;
  44. EnviroManager.instance.VolumetricClouds.settingsQuality.downsampling = Settings.defaultQuality.volumetricCloudsOverride.downsampling;
  45. EnviroManager.instance.VolumetricClouds.settingsQuality.stepsLayer1 = Settings.defaultQuality.volumetricCloudsOverride.stepsLayer1;
  46. EnviroManager.instance.VolumetricClouds.settingsQuality.stepsLayer2 = Settings.defaultQuality.volumetricCloudsOverride.stepsLayer2;
  47. EnviroManager.instance.VolumetricClouds.settingsQuality.blueNoiseIntensity = Settings.defaultQuality.volumetricCloudsOverride.blueNoiseIntensity;
  48. EnviroManager.instance.VolumetricClouds.settingsQuality.reprojectionBlendTime = Settings.defaultQuality.volumetricCloudsOverride.reprojectionBlendTime;
  49. EnviroManager.instance.VolumetricClouds.settingsQuality.lodDistance = Settings.defaultQuality.volumetricCloudsOverride.lodDistance;
  50. }
  51. if(EnviroManager.instance.Fog != null)
  52. {
  53. EnviroManager.instance.Fog.Settings.fog = Settings.defaultQuality.fogOverride.fog;
  54. EnviroManager.instance.Fog.Settings.volumetrics = Settings.defaultQuality.fogOverride.volumetrics;
  55. EnviroManager.instance.Fog.Settings.quality = Settings.defaultQuality.fogOverride.quality;
  56. EnviroManager.instance.Fog.Settings.steps = Settings.defaultQuality.fogOverride.steps;
  57. }
  58. }
  59. }
  60. public void CleanupQualityList()
  61. {
  62. for (int i = 0; i < Settings.Qualities.Count; i++)
  63. {
  64. if(Settings.Qualities[i] == null)
  65. Settings.Qualities.RemoveAt(i);
  66. }
  67. }
  68. //Add new or assigned quality
  69. public void CreateNewQuality()
  70. {
  71. EnviroQuality quality = EnviroQualityCreation.CreateMyAsset();
  72. Settings.Qualities.Add(quality);
  73. }
  74. /// Removes the quality from the list.
  75. public void RemoveQuality(EnviroQuality quality)
  76. {
  77. Settings.Qualities.Remove(quality);
  78. }
  79. //Save and Load
  80. public void LoadModuleValues ()
  81. {
  82. if(preset != null)
  83. {
  84. Settings = JsonUtility.FromJson<Enviro.EnviroQualities>(JsonUtility.ToJson(preset.Settings));
  85. }
  86. else
  87. {
  88. Debug.Log("Please assign a saved module to load from!");
  89. }
  90. }
  91. public void SaveModuleValues ()
  92. {
  93. #if UNITY_EDITOR
  94. EnviroQualityModule t = ScriptableObject.CreateInstance<EnviroQualityModule>();
  95. t.name = "Quality Module Preset";
  96. t.Settings = JsonUtility.FromJson<Enviro.EnviroQualities>(JsonUtility.ToJson(Settings));
  97. string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset");
  98. UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
  99. UnityEditor.AssetDatabase.SaveAssets();
  100. UnityEditor.AssetDatabase.Refresh();
  101. #endif
  102. }
  103. public void SaveModuleValues (EnviroQualityModule module)
  104. {
  105. module.Settings = JsonUtility.FromJson<Enviro.EnviroQualities>(JsonUtility.ToJson(Settings));
  106. #if UNITY_EDITOR
  107. UnityEditor.EditorUtility.SetDirty(module);
  108. UnityEditor.AssetDatabase.SaveAssets();
  109. #endif
  110. }
  111. }
  112. }