Files
2026-03-04 10:03:45 +08:00

242 lines
5.9 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace Artngame.SKYMASTER
{
public class playMusicAtTimeSM : MonoBehaviour
{
public bool reduceOtherSounds;
public List<AudioSource> audioSourcesToPause = new List<AudioSource>();
public float pauseSpeed = 10f;
public float lowThres = 0.01f;
public AudioSource audioDawn;
public AudioSource audioMidday;
public AudioSource audioDusk;
public AudioSource audioNight;
public float volumeIncreaseSpeed = 0.01f;
public float maxVolumeDawn = 0.65f;
public float maxVolumeMidday = 0.65f;
public float maxVolumeDusk = 0.65f;
public float maxVolumeNight = 0.65f;
public SkyMasterManager skymanager;
public bool changeWeatherPerMusic;
public SkyMasterManager.Volume_Weather_types dawnWeather;
public SkyMasterManager.Volume_Weather_types middayWeather = SkyMasterManager.Volume_Weather_types.Cloudy;
public SkyMasterManager.Volume_Weather_types duskWeather = SkyMasterManager.Volume_Weather_types.LightningStorm;
public SkyMasterManager.Volume_Weather_types nightWeather = SkyMasterManager.Volume_Weather_types.Rain;
public float dawnTime = 9f;
public float middayTime = 14f;
public float duskTime = 20f;
public float nightTime = 23.5f;
public bool playOnce;
private void Start()
{
}
private void LateUpdate()
{
if (skymanager.Current_Time > dawnTime && skymanager.Current_Time < middayTime)
{
if (audioDawn.volume < maxVolumeDawn)
{
if (playOnce && !audioDawn.isPlaying)
{
audioDawn.Play();
}
audioDawn.volume += volumeIncreaseSpeed * Time.deltaTime;
}
if (reduceOtherSounds && audioDawn.isPlaying)
{
for (int i = 0; i < audioSourcesToPause.Count; i++)
{
audioSourcesToPause[i].volume -= pauseSpeed * Time.deltaTime;
if (audioSourcesToPause[i].volume <= lowThres)
{
audioSourcesToPause[i].volume = lowThres;
}
}
}
audioMidday.volume -= volumeIncreaseSpeed * Time.deltaTime;
audioDusk.volume -= volumeIncreaseSpeed * Time.deltaTime;
audioNight.volume -= volumeIncreaseSpeed * Time.deltaTime;
if (playOnce)
{
if (audioMidday.volume < 0.01f)
{
audioMidday.Stop();
}
if (audioDusk.volume < 0.01f)
{
audioDusk.Stop();
}
if (audioNight.volume < 0.01f)
{
audioNight.Stop();
}
}
if (changeWeatherPerMusic)
{
skymanager.currentWeatherName = dawnWeather;
}
}
if (skymanager.Current_Time >= middayTime && skymanager.Current_Time < duskTime)
{
audioDawn.volume -= volumeIncreaseSpeed * Time.deltaTime;
if (audioMidday.volume < maxVolumeMidday)
{
if (playOnce && !audioMidday.isPlaying)
{
audioMidday.Play();
}
audioMidday.volume += volumeIncreaseSpeed * Time.deltaTime;
}
if (reduceOtherSounds && audioMidday.isPlaying)
{
for (int j = 0; j < audioSourcesToPause.Count; j++)
{
audioSourcesToPause[j].volume -= pauseSpeed * Time.deltaTime;
if (audioSourcesToPause[j].volume <= lowThres)
{
audioSourcesToPause[j].volume = lowThres;
}
}
}
audioDusk.volume -= volumeIncreaseSpeed * Time.deltaTime;
audioNight.volume -= volumeIncreaseSpeed * Time.deltaTime;
if (playOnce)
{
if (audioDawn.volume < 0.01f)
{
audioDawn.Stop();
}
if (audioDusk.volume < 0.01f)
{
audioDusk.Stop();
}
if (audioNight.volume < 0.01f)
{
audioNight.Stop();
}
}
if (changeWeatherPerMusic)
{
skymanager.currentWeatherName = middayWeather;
}
}
if (skymanager.Current_Time >= duskTime && skymanager.Current_Time < nightTime)
{
audioDawn.volume -= volumeIncreaseSpeed * Time.deltaTime;
audioMidday.volume -= volumeIncreaseSpeed * Time.deltaTime;
if (audioDusk.volume < maxVolumeDusk)
{
if (playOnce && !audioDusk.isPlaying)
{
audioDusk.Play();
}
audioDusk.volume += volumeIncreaseSpeed * Time.deltaTime;
}
if (reduceOtherSounds && audioDusk.isPlaying)
{
for (int k = 0; k < audioSourcesToPause.Count; k++)
{
audioSourcesToPause[k].volume -= pauseSpeed * Time.deltaTime;
if (audioSourcesToPause[k].volume <= lowThres)
{
audioSourcesToPause[k].volume = lowThres;
}
}
}
audioNight.volume -= volumeIncreaseSpeed * Time.deltaTime;
if (playOnce)
{
if (audioDawn.volume < 0.01f)
{
audioDawn.Stop();
}
if (audioMidday.volume < 0.01f)
{
audioMidday.Stop();
}
if (audioNight.volume < 0.01f)
{
audioNight.Stop();
}
}
if (changeWeatherPerMusic)
{
skymanager.currentWeatherName = duskWeather;
}
}
if ((!(skymanager.Current_Time >= nightTime) || !(skymanager.Current_Time <= 24f)) && (!(skymanager.Current_Time >= 0f) || !(skymanager.Current_Time <= dawnTime)))
{
return;
}
audioDawn.volume -= volumeIncreaseSpeed * Time.deltaTime;
audioMidday.volume -= volumeIncreaseSpeed * Time.deltaTime;
audioDusk.volume -= volumeIncreaseSpeed * Time.deltaTime;
if (audioNight.volume < maxVolumeNight)
{
if (playOnce && !audioNight.isPlaying)
{
audioNight.Play();
}
audioNight.volume += volumeIncreaseSpeed * Time.deltaTime;
}
if (reduceOtherSounds && audioNight.isPlaying)
{
for (int l = 0; l < audioSourcesToPause.Count; l++)
{
audioSourcesToPause[l].volume -= pauseSpeed * Time.deltaTime;
if (audioSourcesToPause[l].volume <= lowThres)
{
audioSourcesToPause[l].volume = lowThres;
}
}
}
if (playOnce)
{
if (audioDawn.volume < 0.01f)
{
audioDawn.Stop();
}
if (audioMidday.volume < 0.01f)
{
audioMidday.Stop();
}
if (audioDusk.volume < 0.01f)
{
audioDusk.Stop();
}
}
if (changeWeatherPerMusic)
{
skymanager.currentWeatherName = nightWeather;
}
}
}
}