193 lines
5.3 KiB
C#
193 lines
5.3 KiB
C#
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<AzureThunderSettings> thunderSettingsList = new List<AzureThunderSettings>();
|
|
|
|
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<AzureThunderEffect>();
|
|
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;
|
|
}
|
|
}
|
|
}
|