| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 | using System.Collections;using System.Collections.Generic;using System.Text.RegularExpressions;using UnityEngine;namespace FXV.FogDemo{    [ExecuteInEditMode]    public class fxvFogPresentation : MonoBehaviour    {        [SerializeField]        VolumeFog fog;        TextMesh textMesh;        float lightsFadeTarget = 1.0f;        Light[] lights;        void Start()        {            lights = GetComponentsInChildren<Light>();        }        void UpdateState()        {            if (textMesh == null)            {                textMesh = GetComponentInChildren<TextMesh>();            }            if (textMesh != null && fog)            {                string formatStr = System.Text.RegularExpressions.Regex.Replace(fog.GetFogType().ToString(), "([A-Z])", " $1", System.Text.RegularExpressions.RegexOptions.Compiled).Trim();                textMesh.text = "Fog: " + formatStr + " " + (fog.IsAffectedByLights() ? "Lit" : "Unlit");            }        }        private void OnEnable()        {            UpdateState();        }        private void OnValidate()        {            UpdateState();        }        public void SetLightsFade(float target, float delay)        {            StartCoroutine(_SetLightsFade(target, delay));        }        IEnumerator _SetLightsFade(float target, float delay)        {            yield return new WaitForSeconds(delay);            SetLightsFade(target);        }        public void SetAffectedByLights(bool affected)        {            if (lights == null)            {                lights = GetComponentsInChildren<Light>();            }            for (int i = 0; i < lights.Length; i++)            {                lights[i].gameObject.SetActive(affected);            }            fog.SetAffectedByLights(affected);            UpdateState();        }        public void SetFogColor(Color c)        {            fog.SetFogColor(c);        }        public void SetLightsFade(float target, bool animated = true)        {            if (lights == null)            {                lights = GetComponentsInChildren<Light>();            }            lightsFadeTarget = target;            if (!animated)            {                for (int i = 0; i < lights.Length; i++)                {                    lights[i].intensity = target;                    if (lights[i].enabled && lights[i].intensity < 0.01f)                    {                        lights[i].enabled = false;                    }                    else if (!lights[i].enabled && lights[i].intensity > 0.01f)                    {                        lights[i].enabled = true;                    }                }            }        }        void Update()        {            for (int i = 0; i < lights.Length; i++)            {                lights[i].intensity = Mathf.MoveTowards(lights[i].intensity, lightsFadeTarget, Time.deltaTime * 2.0f);                if (lights[i].enabled && lights[i].intensity < 0.01f)                {                    lights[i].enabled = false;                }                else if (!lights[i].enabled && lights[i].intensity > 0.01f)                {                    lights[i].enabled = true;                }            }        }    }}
 |