using System.Collections.Generic; namespace UnityEngine.AzureSky { public class AzureEffectsController : MonoBehaviour { public WindZone windZone; public AudioSource lightRainAudioSource; public AudioSource mediumRainAudioSource; public AudioSource heavyRainAudioSource; public AudioSource lightWindAudioSource; public AudioSource mediumWindAudioSource; public AudioSource heavyWindAudioSource; public Material defaultRainMaterial; public Material heavyRainMaterial; public Material snowMaterial; public Material rippleMaterial; public ParticleSystem lightRainParticle; public ParticleSystem mediumRainParticle; public ParticleSystem heavyRainParticle; public ParticleSystem snowParticle; [SerializeField] private Collider m_particlesTriggerCollider; public float lightRainIntensity; public float mediumRainIntensity; public float heavyRainIntensity; public float snowIntensity; public Color rainColor = Color.white; public Color snowColor = Color.white; public float lightRainSoundFx; public float mediumRainSoundFx; public float heavyRainSoundFx; public float lightWindSoundFx; public float mediumWindSoundFx; public float heavyWindSoundFx; public float windSpeed; public float windDirection; private ParticleSystem.EmissionModule m_particleEmission; private ParticleSystem.TriggerModule m_particleTrigger; private ParticleSystem.SubEmittersModule m_particleSubEmitters; public List thunderSettingsList = new List(); private void Start() { UpdateParticlesMaterials(); } private void Update() { UpdateParticlesMaterials(); if (Application.isPlaying) { SoundEffectController(lightRainSoundFx, lightRainAudioSource); SoundEffectController(mediumRainSoundFx, mediumRainAudioSource); SoundEffectController(heavyRainSoundFx, heavyRainAudioSource); SoundEffectController(lightWindSoundFx, lightWindAudioSource); SoundEffectController(mediumWindSoundFx, mediumWindAudioSource); SoundEffectController(heavyWindSoundFx, heavyWindAudioSource); ParticleEffectController(lightRainIntensity * 4000f, lightRainParticle); ParticleEffectController(mediumRainIntensity * 4000f, mediumRainParticle); ParticleEffectController(heavyRainIntensity * 2000f, heavyRainParticle); ParticleEffectController(snowIntensity * 1000f, snowParticle); windZone.windMain = windSpeed; windZone.transform.rotation = Quaternion.Euler(new Vector3(0f, Mathf.Lerp(-180f, 180f, windDirection) + 180f, 0f)); } } private void SoundEffectController(float volume, AudioSource sound) { sound.volume = volume; if (volume > 0f) { if (!sound.isPlaying) { sound.Play(); } } else if (sound.isPlaying) { sound.Stop(); } } private void ParticleEffectController(float intensity, ParticleSystem particle) { m_particleEmission = particle.emission; m_particleEmission.rateOverTimeMultiplier = intensity; if (intensity > 0f) { if (!particle.isPlaying) { particle.Play(); } } else if (particle.isPlaying) { particle.Stop(); } } private void UpdateParticlesMaterials() { defaultRainMaterial.SetColor("_TintColor", rainColor); heavyRainMaterial.SetColor("_TintColor", rainColor); snowMaterial.SetColor("_TintColor", snowColor); rippleMaterial.SetColor("_TintColor", rainColor); } public void InstantiateThunderEffect(int index) { AzureThunderEffect component = Object.Instantiate(thunderSettingsList[index].thunderPrefab, thunderSettingsList[index].position, thunderSettingsList[index].thunderPrefab.rotation).GetComponent(); component.audioClip = thunderSettingsList[index].audioClip; component.audioDelay = thunderSettingsList[index].audioDelay; component.lightFrequency = thunderSettingsList[index].lightFrequency; } public void SetParticlesSubEmittersModuleState(bool value) { m_particleSubEmitters = lightRainParticle.subEmitters; m_particleSubEmitters.enabled = value; m_particleSubEmitters = mediumRainParticle.subEmitters; m_particleSubEmitters.enabled = value; m_particleSubEmitters = heavyRainParticle.subEmitters; m_particleSubEmitters.enabled = value; m_particleSubEmitters = snowParticle.subEmitters; m_particleSubEmitters.enabled = value; } public void SetParticlesTriggerModuleState(bool value) { m_particleTrigger = lightRainParticle.trigger; m_particleTrigger.enabled = value; m_particleTrigger = mediumRainParticle.trigger; m_particleTrigger.enabled = value; m_particleTrigger = heavyRainParticle.trigger; m_particleTrigger.enabled = value; m_particleTrigger = snowParticle.trigger; m_particleTrigger.enabled = value; } public void SetParticlesTriggerCollider(Collider collider) { m_particlesTriggerCollider = collider; m_particleTrigger = lightRainParticle.trigger; m_particleTrigger.SetCollider(0, collider); m_particleTrigger = mediumRainParticle.trigger; m_particleTrigger.SetCollider(0, collider); m_particleTrigger = heavyRainParticle.trigger; m_particleTrigger.SetCollider(0, collider); m_particleTrigger = snowParticle.trigger; m_particleTrigger.SetCollider(0, collider); } public Collider GetParticlesTriggerCollider() { return m_particlesTriggerCollider; } } }