summaryrefslogtreecommitdiff
path: root/GameCode/AudioDayNightFader.cs
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2023-11-02 11:51:31 +0800
committerchai <215380520@qq.com>2023-11-02 11:51:31 +0800
commit7f493f682503f5186308de7b8f74b5b49233cfe4 (patch)
tree8a91e2056bc79788ee4735dce88b8d516ba12beb /GameCode/AudioDayNightFader.cs
+init
Diffstat (limited to 'GameCode/AudioDayNightFader.cs')
-rw-r--r--GameCode/AudioDayNightFader.cs87
1 files changed, 87 insertions, 0 deletions
diff --git a/GameCode/AudioDayNightFader.cs b/GameCode/AudioDayNightFader.cs
new file mode 100644
index 0000000..7734d83
--- /dev/null
+++ b/GameCode/AudioDayNightFader.cs
@@ -0,0 +1,87 @@
+using System.Collections;
+using UnityEngine;
+using UnityEngine.Audio;
+
+public class AudioDayNightFader : MonoBehaviour, DayNightCycle.IDaytimeSensitive
+{
+ public float fadeTime = 0.5f;
+
+ public AudioMixer mixer;
+
+ public AudioClip nightMusic;
+
+ public AudioClip finalNightMusic;
+
+ public float nightMusicFadeInTime = 3f;
+
+ public float nightMusicFadeOutTime = 4f;
+
+ private float transitionClock;
+
+ private float dayTargetVol;
+
+ private float nightTargetVol;
+
+ private void Start()
+ {
+ DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this);
+ mixer.GetFloat("DayEnvVolume", out dayTargetVol);
+ mixer.GetFloat("NightEnvVolume", out nightTargetVol);
+ dayTargetVol = Mathf.Pow(10f, dayTargetVol / 20f);
+ nightTargetVol = Mathf.Pow(10f, nightTargetVol / 20f);
+ mixer.SetFloat("NightEnvVolume", Mathf.Log10(0.0001f) * 20f);
+ }
+
+ public void OnDawn_AfterSunrise()
+ {
+ }
+
+ public void OnDawn_BeforeSunrise()
+ {
+ StopAllCoroutines();
+ StartCoroutine(FadeToDay());
+ }
+
+ public void OnDusk()
+ {
+ StopAllCoroutines();
+ StartCoroutine(FadeToNight());
+ }
+
+ private IEnumerator FadeToNight()
+ {
+ if (EnemySpawner.instance.Wavenumber >= EnemySpawner.instance.waves.Count - 1)
+ {
+ MusicManager.instance.PlayMusic(finalNightMusic, nightMusicFadeInTime);
+ }
+ else
+ {
+ MusicManager.instance.PlayMusic(nightMusic, nightMusicFadeInTime);
+ }
+ while (transitionClock < 1f)
+ {
+ transitionClock += Time.deltaTime / fadeTime;
+ mixer.SetFloat("DayEnvVolume", Mathf.Log10(Mathf.Lerp(dayTargetVol, 0.0001f, transitionClock)) * 20f);
+ mixer.SetFloat("NightEnvVolume", Mathf.Log10(Mathf.Lerp(0.0001f, nightTargetVol, transitionClock)) * 20f);
+ yield return null;
+ }
+ transitionClock = 1f;
+ mixer.SetFloat("DayEnvVolume", Mathf.Log10(0.0001f) * 20f);
+ mixer.SetFloat("NightEnvVolume", Mathf.Log10(nightTargetVol) * 20f);
+ }
+
+ private IEnumerator FadeToDay()
+ {
+ MusicManager.instance.PlayMusic(null, nightMusicFadeOutTime);
+ while (transitionClock > 0f)
+ {
+ transitionClock -= Time.deltaTime / fadeTime;
+ mixer.SetFloat("DayEnvVolume", Mathf.Log10(Mathf.Lerp(dayTargetVol, 0.0001f, transitionClock)) * 20f);
+ mixer.SetFloat("NightEnvVolume", Mathf.Log10(Mathf.Lerp(0.0001f, nightTargetVol, transitionClock)) * 20f);
+ yield return null;
+ }
+ transitionClock = 0f;
+ mixer.SetFloat("DayEnvVolume", Mathf.Log10(dayTargetVol) * 20f);
+ mixer.SetFloat("NightEnvVolume", Mathf.Log10(0.0001f) * 20f);
+ }
+}