123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using System;
- namespace Enviro
- {
- [Serializable]
- public class EnviroLightning
- {
- public Enviro.Lightning prefab;
- public bool lightningStorm = false;
- [Range(1f,60f)]
- public float randomLightingDelay = 10.0f;
- [Range(0f,10000f)]
- public float randomSpawnRange = 5000.0f;
- [Range(0f,10000f)]
- public float randomTargetRange = 5000.0f;
- }
- [Serializable]
- public class EnviroLightningModule : EnviroModule
- {
- public Enviro.EnviroLightning Settings;
- public EnviroLightningModule preset;
- public bool showLightningControls;
- private bool spawned = false;
- // Update Method
- public override void UpdateModule ()
- {
- if(Application.isPlaying && Settings.lightningStorm && Settings.prefab != null)
- {
- CastLightningBoltRandom();
- }
- }
- public void CastLightningBolt(Vector3 from, Vector3 to)
- {
- if(Settings.prefab != null)
- {
- Enviro.Lightning lightn = (Enviro.Lightning)Instantiate(Settings.prefab,from,Quaternion.identity);
- lightn.target = to;
- //Play Thunder SFX with delay if Audio module is used.
- if(EnviroManager.instance.Audio != null)
- {
- EnviroManager.instance.StartCoroutine(PlayThunderSFX(0.05f));
- }
- }
- else
- {
- Debug.Log("Please assign a lightning prefab in your Enviro Ligthning module!");
- }
- }
- public void CastLightningBoltRandom()
- {
- if(!spawned)
- {
- //Calculate some random spawn and target locations.
- Vector2 circlSpawn = UnityEngine.Random.insideUnitCircle * Settings.randomSpawnRange;
- Vector2 circlTarget = UnityEngine.Random.insideUnitCircle * Settings.randomTargetRange;
- Vector3 spawnPosition = new Vector3(circlSpawn.x + EnviroManager.instance.transform.position.x,2500f,circlSpawn.y + EnviroManager.instance.transform.position.z);
- Vector3 targetPosition = new Vector3(circlTarget.x + spawnPosition.x,0f,circlTarget.y + spawnPosition.z);
- EnviroManager.instance.StartCoroutine(LightningStorm(spawnPosition,targetPosition));
- }
- }
-
- private IEnumerator LightningStorm(Vector3 spwn, Vector3 targ)
- {
- spawned = true;
- yield return new WaitForSeconds(Settings.randomLightingDelay);
- CastLightningBolt(spwn,targ);
- spawned = false;
- }
- private IEnumerator PlayThunderSFX(float delay)
- {
- yield return new WaitForSeconds(delay);
- EnviroManager.instance.Audio.PlayRandomThunderSFX();
- }
- //Save and Load
- public void LoadModuleValues ()
- {
- if(preset != null)
- {
- Settings = JsonUtility.FromJson<Enviro.EnviroLightning>(JsonUtility.ToJson(preset.Settings));
- }
- else
- {
- Debug.Log("Please assign a saved module to load from!");
- }
- }
- public void SaveModuleValues ()
- {
- #if UNITY_EDITOR
- EnviroLightningModule t = ScriptableObject.CreateInstance<EnviroLightningModule>();
- t.name = "Lightning Preset";
- t.Settings = JsonUtility.FromJson<Enviro.EnviroLightning>(JsonUtility.ToJson(Settings));
-
- string assetPathAndName = UnityEditor.AssetDatabase.GenerateUniqueAssetPath("Assets/Enviro 3" + "/New " + t.name + ".asset");
- UnityEditor.AssetDatabase.CreateAsset(t, assetPathAndName);
- UnityEditor.AssetDatabase.SaveAssets();
- UnityEditor.AssetDatabase.Refresh();
- #endif
- }
- public void SaveModuleValues (EnviroLightningModule module)
- {
- module.Settings = JsonUtility.FromJson<Enviro.EnviroLightning>(JsonUtility.ToJson(Settings));
- #if UNITY_EDITOR
- UnityEditor.EditorUtility.SetDirty(module);
- UnityEditor.AssetDatabase.SaveAssets();
- #endif
- }
- }
- }
|