EnviroLightningModule.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using System;
  5. namespace Enviro
  6. {
  7. [Serializable]
  8. public class EnviroLightning
  9. {
  10. public Enviro.Lightning prefab;
  11. public bool lightningStorm = false;
  12. [Range(1f,60f)]
  13. public float randomLightingDelay = 10.0f;
  14. [Range(0f,10000f)]
  15. public float randomSpawnRange = 5000.0f;
  16. [Range(0f,10000f)]
  17. public float randomTargetRange = 5000.0f;
  18. }
  19. [Serializable]
  20. public class EnviroLightningModule : EnviroModule
  21. {
  22. public Enviro.EnviroLightning Settings;
  23. public EnviroLightningModule preset;
  24. public bool showLightningControls;
  25. private bool spawned = false;
  26. // Update Method
  27. public override void UpdateModule ()
  28. {
  29. if(Application.isPlaying && Settings.lightningStorm && Settings.prefab != null)
  30. {
  31. CastLightningBoltRandom();
  32. }
  33. }
  34. public void CastLightningBolt(Vector3 from, Vector3 to)
  35. {
  36. if(Settings.prefab != null)
  37. {
  38. Enviro.Lightning lightn = (Enviro.Lightning)Instantiate(Settings.prefab,from,Quaternion.identity);
  39. lightn.target = to;
  40. //Play Thunder SFX with delay if Audio module is used.
  41. if(EnviroManager.instance.Audio != null)
  42. {
  43. EnviroManager.instance.StartCoroutine(PlayThunderSFX(0.05f));
  44. }
  45. }
  46. else
  47. {
  48. Debug.Log("Please assign a lightning prefab in your Enviro Ligthning module!");
  49. }
  50. }
  51. public void CastLightningBoltRandom()
  52. {
  53. if(!spawned)
  54. {
  55. //Calculate some random spawn and target locations.
  56. Vector2 circlSpawn = UnityEngine.Random.insideUnitCircle * Settings.randomSpawnRange;
  57. Vector2 circlTarget = UnityEngine.Random.insideUnitCircle * Settings.randomTargetRange;
  58. Vector3 spawnPosition = new Vector3(circlSpawn.x + EnviroManager.instance.transform.position.x,2500f,circlSpawn.y + EnviroManager.instance.transform.position.z);
  59. Vector3 targetPosition = new Vector3(circlTarget.x + spawnPosition.x,0f,circlTarget.y + spawnPosition.z);
  60. EnviroManager.instance.StartCoroutine(LightningStorm(spawnPosition,targetPosition));
  61. }
  62. }
  63. private IEnumerator LightningStorm(Vector3 spwn, Vector3 targ)
  64. {
  65. spawned = true;
  66. yield return new WaitForSeconds(Settings.randomLightingDelay);
  67. CastLightningBolt(spwn,targ);
  68. spawned = false;
  69. }
  70. private IEnumerator PlayThunderSFX(float delay)
  71. {
  72. yield return new WaitForSeconds(delay);
  73. EnviroManager.instance.Audio.PlayRandomThunderSFX();
  74. }
  75. //Save and Load
  76. public void LoadModuleValues ()
  77. {
  78. if(preset != null)
  79. {
  80. Settings = JsonUtility.FromJson<Enviro.EnviroLightning>(JsonUtility.ToJson(preset.Settings));
  81. }
  82. else
  83. {
  84. Debug.Log("Please assign a saved module to load from!");
  85. }
  86. }
  87. public void SaveModuleValues ()
  88. {
  89. #if UNITY_EDITOR
  90. EnviroLightningModule t = ScriptableObject.CreateInstance<EnviroLightningModule>();
  91. t.name = "Lightning Preset";
  92. t.Settings = JsonUtility.FromJson<Enviro.EnviroLightning>(JsonUtility.ToJson(Settings));
  93. string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset");
  94. UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
  95. UnityEditor.AssetDatabase.SaveAssets();
  96. UnityEditor.AssetDatabase.Refresh();
  97. #endif
  98. }
  99. public void SaveModuleValues (EnviroLightningModule module)
  100. {
  101. module.Settings = JsonUtility.FromJson<Enviro.EnviroLightning>(JsonUtility.ToJson(Settings));
  102. #if UNITY_EDITOR
  103. UnityEditor.EditorUtility.SetDirty(module);
  104. UnityEditor.AssetDatabase.SaveAssets();
  105. #endif
  106. }
  107. }
  108. }