| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | using System.Collections;using System.Collections.Generic;using UnityEngine;using System;namespace Enviro {    [Serializable]    public class EnviroEffectTypes    {        public enum ControlType        {            Rain1,            Rain2,            Snow1,            Snow2,            Custom1,            Custom2        }        public ControlType controlType;        public ParticleSystem mySystem;         public string name;        public GameObject prefab;        public Vector3 localPositionOffset;        public Vector3 localRotationOffset;        public float maxEmission;     }    [Serializable]    public class EnviroEffects    {        public List<EnviroEffectTypes> effectTypes = new List<EnviroEffectTypes>();        [Range(0f,1f)]        public float rain1Emission, rain2Emission, snow1Emission, snow2Emission, custom1Emission, custom2Emission = 0f;    }     [Serializable]    [ExecuteInEditMode]    public class EnviroEffectsModule : EnviroModule    {          public Enviro.EnviroEffects Settings;        public EnviroEffectsModule preset;        //Inspector        public bool showSetupControls;        public bool showEmissionControls;        public override void Enable ()        {             Setup();        }         public override void Disable ()        {             Cleanup();        }        private void Setup()        {            CreateEffects();        }           private void Cleanup()        {            if(EnviroManager.instance.Objects.effects != null)               DestroyImmediate(EnviroManager.instance.Objects.effects);        }        public override void UpdateModule ()        {             UpdateEffects();        }        public void CreateEffects()         {            if(EnviroManager.instance.Objects.effects != null)               DestroyImmediate(EnviroManager.instance.Objects.effects);            if(EnviroManager.instance.Objects.effects == null)            {                EnviroManager.instance.Objects.effects = new GameObject();                EnviroManager.instance.Objects.effects.name = "Effects";                EnviroManager.instance.Objects.effects.transform.SetParent(EnviroManager.instance.transform);                EnviroManager.instance.Objects.effects.transform.localPosition = Vector3.zero;            }            for(int i = 0; i < Settings.effectTypes.Count; i++)            {                if(Settings.effectTypes[i].mySystem != null)                    DestroyImmediate(Settings.effectTypes[i].mySystem.gameObject);                GameObject sys;                                  if(Settings.effectTypes[i].prefab != null)                {                   sys = Instantiate(Settings.effectTypes[i].prefab,Settings.effectTypes[i].localPositionOffset,Quaternion.identity);                   sys.transform.SetParent(EnviroManager.instance.Objects.effects.transform);                   sys.name = Settings.effectTypes[i].name;                   sys.transform.localPosition = Settings.effectTypes[i].localPositionOffset;                   sys.transform.localEulerAngles = Settings.effectTypes[i].localRotationOffset;                   Settings.effectTypes[i].mySystem = sys.GetComponent<ParticleSystem>();                }            }        }        public float GetEmissionRate(ParticleSystem system)        {            return system.emission.rateOverTime.constantMax;        }        public void SetEmissionRate(ParticleSystem sys, float emissionRate)        {            var emission = sys.emission;            var rate = emission.rateOverTime;            rate.constantMax = emissionRate;            emission.rateOverTime = rate;        }        private void UpdateEffects()        {            for(int i = 0; i < Settings.effectTypes.Count; i++)            {                if(Settings.effectTypes[i].mySystem != null)                {                    float currentEmission = Settings.effectTypes[i].maxEmission;                    switch(Settings.effectTypes[i].controlType)                    {                        case EnviroEffectTypes.ControlType.Rain1:                        currentEmission *= Settings.rain1Emission;                        break;                        case EnviroEffectTypes.ControlType.Rain2:                        currentEmission *= Settings.rain2Emission;                        break;                        case EnviroEffectTypes.ControlType.Snow1:                        currentEmission *= Settings.snow1Emission;                        break;                                case EnviroEffectTypes.ControlType.Snow2:                        currentEmission *= Settings.snow2Emission;                        break;                        case EnviroEffectTypes.ControlType.Custom1:                        currentEmission *= Settings.custom1Emission;                        break;                        case EnviroEffectTypes.ControlType.Custom2:                        currentEmission *= Settings.custom2Emission;                        break;                    }                    SetEmissionRate(Settings.effectTypes[i].mySystem,currentEmission);                    if(currentEmission > 0f && !Settings.effectTypes[i].mySystem.isPlaying)                       Settings.effectTypes[i].mySystem.Play();                }            }        }        //Save and Load        public void LoadModuleValues ()        {            if(preset != null)            {                Settings = JsonUtility.FromJson<Enviro.EnviroEffects>(JsonUtility.ToJson(preset.Settings));            }            else            {                Debug.Log("Please assign a saved module to load from!");            }        }        public void SaveModuleValues ()        {#if UNITY_EDITOR        EnviroEffectsModule t =  ScriptableObject.CreateInstance<EnviroEffectsModule>();        t.name = "Effects Module";        t.Settings = JsonUtility.FromJson<Enviro.EnviroEffects>(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 (EnviroEffectsModule module)        {            module.Settings = JsonUtility.FromJson<Enviro.EnviroEffects>(JsonUtility.ToJson(Settings));            #if UNITY_EDITOR            UnityEditor.EditorUtility.SetDirty(module);            UnityEditor.AssetDatabase.SaveAssets();            #endif        }    }}
 |