From 7f493f682503f5186308de7b8f74b5b49233cfe4 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Thu, 2 Nov 2023 11:51:31 +0800 Subject: +init --- GameCode/LevelAudio.cs | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 GameCode/LevelAudio.cs (limited to 'GameCode/LevelAudio.cs') diff --git a/GameCode/LevelAudio.cs b/GameCode/LevelAudio.cs new file mode 100644 index 0000000..0ced3a9 --- /dev/null +++ b/GameCode/LevelAudio.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +public class LevelAudio : MonoBehaviour +{ + [Serializable] + public class CivilisationAudioSource + { + public AudioSource audioSource; + + public float volumeAtCastleCenterBuild = 0.1f; + + public float targetVolume; + + public int targetBuildingAmount; + } + + public List managedCivAudioSources; + + private int buildingCount; + + private void OnValidate() + { + foreach (CivilisationAudioSource managedCivAudioSource in managedCivAudioSources) + { + if (managedCivAudioSource.audioSource != null) + { + managedCivAudioSource.targetVolume = managedCivAudioSource.audioSource.volume; + } + } + } + + private void Start() + { + for (int num = managedCivAudioSources.Count - 1; num >= 0; num--) + { + CivilisationAudioSource civilisationAudioSource = managedCivAudioSources[num]; + if (civilisationAudioSource.audioSource == null) + { + managedCivAudioSources.RemoveAt(num); + } + else + { + civilisationAudioSource.targetVolume = civilisationAudioSource.audioSource.volume; + civilisationAudioSource.audioSource.volume = 0f; + } + } + ThronefallAudioManager.Instance.onBuildingBuild.AddListener(OnNewBuildingBuilt); + } + + private void OnNewBuildingBuilt() + { + for (int num = managedCivAudioSources.Count - 1; num >= 0; num--) + { + CivilisationAudioSource civilisationAudioSource = managedCivAudioSources[num]; + civilisationAudioSource.audioSource.volume = Mathf.Lerp(civilisationAudioSource.volumeAtCastleCenterBuild, civilisationAudioSource.targetVolume, Mathf.InverseLerp(0f, civilisationAudioSource.targetBuildingAmount, buildingCount)); + if (buildingCount >= civilisationAudioSource.targetBuildingAmount) + { + managedCivAudioSources.RemoveAt(num); + } + } + buildingCount++; + if (managedCivAudioSources.Count < 1) + { + ThronefallAudioManager.Instance.onBuildingBuild.RemoveListener(OnNewBuildingBuilt); + } + } +} -- cgit v1.1-26-g67d0