EnviroAuroraModule.cs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. namespace Enviro
  6. {
  7. [Serializable]
  8. public class EnviroAurora
  9. {
  10. [Header("Aurora Intensity")]
  11. [Range(0f,1f)]
  12. public float auroraIntensityModifier = 1f;
  13. public AnimationCurve auroraIntensity = new AnimationCurve(new Keyframe(0f, 1f), new Keyframe(0.5f, 0.1f), new Keyframe(1f, 0f));
  14. //
  15. [Header("Aurora Color and Brightness")]
  16. public Color auroraColor = new Color(0.1f, 0.5f, 0.7f);
  17. public float auroraBrightness = 75f;
  18. public float auroraContrast = 10f;
  19. //
  20. [Header("Aurora Height and Scale")]
  21. public float auroraHeight = 20000f;
  22. [Range(0f, 0.025f)]
  23. public float auroraScale = 0.01f;
  24. //
  25. [Header("Aurora Performance")]
  26. [Range(8, 32)]
  27. public int auroraSteps = 20;
  28. //
  29. [Header("Aurora Modelling and Animation")]
  30. public Vector4 auroraLayer1Settings = new Vector4(0.1f, 0.1f, 0f, 0.5f);
  31. public Vector4 auroraLayer2Settings = new Vector4(5f, 5f, 0f, 0.5f);
  32. public Vector4 auroraColorshiftSettings = new Vector4(0.05f, 0.05f, 0f, 5f);
  33. [Range(0f, 0.1f)]
  34. public float auroraSpeed = 0.005f;
  35. [Header("Aurora Textures")]
  36. public Texture2D aurora_layer_1;
  37. public Texture2D aurora_layer_2;
  38. public Texture2D aurora_colorshift;
  39. }
  40. [Serializable]
  41. public class EnviroAuroraModule : EnviroModule
  42. {
  43. public Enviro.EnviroAurora Settings;
  44. public EnviroAuroraModule preset;
  45. public bool showAuroraControls;
  46. // Update Method
  47. public override void UpdateModule ()
  48. {
  49. if(EnviroManager.instance.Sky != null && EnviroManager.instance.Sky.mySkyboxMat != null)
  50. {
  51. UpdateAuroraShader(EnviroManager.instance.Sky.mySkyboxMat);
  52. }
  53. }
  54. public void UpdateAuroraShader(Material mat)
  55. {
  56. mat.SetFloat("_Aurora", 1f);
  57. if (Settings.aurora_layer_1 != null)
  58. mat.SetTexture("_Aurora_Layer_1", Settings.aurora_layer_1);
  59. if (Settings.aurora_layer_2 != null)
  60. mat.SetTexture("_Aurora_Layer_2", Settings.aurora_layer_2);
  61. if (Settings.aurora_colorshift != null)
  62. mat.SetTexture("_Aurora_Colorshift", Settings.aurora_colorshift);
  63. mat.SetFloat("_AuroraIntensity", Mathf.Clamp01(Settings.auroraIntensityModifier * Settings.auroraIntensity.Evaluate(EnviroManager.instance.solarTime)));
  64. mat.SetFloat("_AuroraBrightness", Settings.auroraBrightness);
  65. mat.SetFloat("_AuroraContrast", Settings.auroraContrast);
  66. mat.SetColor("_AuroraColor", Settings.auroraColor);
  67. mat.SetFloat("_AuroraHeight", Settings.auroraHeight);
  68. mat.SetFloat("_AuroraScale", Settings.auroraScale);
  69. mat.SetFloat("_AuroraSpeed", Settings.auroraSpeed);
  70. mat.SetFloat("_AuroraSteps", Settings.auroraSteps);
  71. mat.SetFloat("_AuroraSteps", Settings.auroraSteps);
  72. mat.SetVector("_Aurora_Tiling_Layer1", Settings.auroraLayer1Settings);
  73. mat.SetVector("_Aurora_Tiling_Layer2", Settings.auroraLayer2Settings);
  74. mat.SetVector("_Aurora_Tiling_ColorShift", Settings.auroraColorshiftSettings);
  75. }
  76. //Save and Load
  77. public void LoadModuleValues ()
  78. {
  79. if(preset != null)
  80. {
  81. Settings = JsonUtility.FromJson<Enviro.EnviroAurora>(JsonUtility.ToJson(preset.Settings));
  82. }
  83. else
  84. {
  85. Debug.Log("Please assign a saved module to load from!");
  86. }
  87. }
  88. public void SaveModuleValues ()
  89. {
  90. #if UNITY_EDITOR
  91. EnviroAuroraModule t = ScriptableObject.CreateInstance<EnviroAuroraModule>();
  92. t.name = "Aurora Preset";
  93. t.Settings = JsonUtility.FromJson<Enviro.EnviroAurora>(JsonUtility.ToJson(Settings));
  94. string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset");
  95. UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
  96. UnityEditor.AssetDatabase.SaveAssets();
  97. UnityEditor.AssetDatabase.Refresh();
  98. #endif
  99. }
  100. public void SaveModuleValues (EnviroAuroraModule module)
  101. {
  102. module.Settings = JsonUtility.FromJson<Enviro.EnviroAurora>(JsonUtility.ToJson(Settings));
  103. #if UNITY_EDITOR
  104. UnityEditor.EditorUtility.SetDirty(module);
  105. UnityEditor.AssetDatabase.SaveAssets();
  106. #endif
  107. }
  108. }
  109. }