Files
Cube-Tower-Defense/Assets/Scripts/AudioManager.cs
T

117 lines
3.4 KiB
C#

using UnityEngine;
public class AudioManager : MonoBehaviour
{
[SerializeField] private Wallet _wallet;
[SerializeField] private GameManager _gameManager;
[SerializeField] private TurretsShop _shop;
[SerializeField] private AudioSource _levelBackgroundMusic;
[SerializeField] private AudioSource _buildBackgroundMusic;
[SerializeField] private AudioSource _winMusic;
[SerializeField] private AudioSource _loseMusic;
[SerializeField] private AudioSource[] _grassBlockDestroySound;
[SerializeField] private AudioSource[] _moneyChangeSound;
private int _grassSoundIndex = 0;
private int _moneyChangeSoundIndex = 0;
private int _money;
private GameManager.GameState _state;
private void OnEnable()
{
_money = _wallet.Money;
_state = _gameManager.CurrentState;
//_wallet.OnMoneyChanged += OnMoneyChanged;
_gameManager.OnStateChanged += OnStateChanged;
_shop.OnTurretBought += OnTurretBought;
}
private void OnDisable()
{
//_wallet.OnMoneyChanged -= OnMoneyChanged;
_gameManager.OnStateChanged -= OnStateChanged;
_shop.OnTurretBought -= OnTurretBought;
}
public void PlayBlockDestroySound(BlockScript block)
{
switch (block.Type)
{
case BlockScript.BlockType.Grass:
case BlockScript.BlockType.PathFinish:
Play(_grassBlockDestroySound, ref _grassSoundIndex);
break;
}
}
private void OnTurretBought(TurretShopItem _)
{
Play(_moneyChangeSound, ref _moneyChangeSoundIndex);
}
//private void OnMoneyChanged(int money)
//{
// var oldMoney = _money;
// _money = money;
// if (_moneyChangeSound.Length == 0 || oldMoney <= money)
// return;
// Play(_moneyChangeSound, ref _moneyChangeSoundIndex);
//}
private void OnStateChanged(GameManager.GameState newState)
{
if (newState == _state ||
_state == GameManager.GameState.BuildingPath && newState == GameManager.GameState.BuildingTurrets)
return;
_state = newState;
switch (newState)
{
case GameManager.GameState.Level:
Stop(_buildBackgroundMusic);
Play(_levelBackgroundMusic);
break;
case GameManager.GameState.BuildingPath:
case GameManager.GameState.BuildingTurrets:
Stop(_levelBackgroundMusic);
Play(_buildBackgroundMusic);
break;
case GameManager.GameState.Win:
Stop(_levelBackgroundMusic);
Stop(_buildBackgroundMusic);
Play(_winMusic);
break;
case GameManager.GameState.Lose:
Stop(_levelBackgroundMusic);
Stop(_buildBackgroundMusic);
Play(_loseMusic);
break;
}
}
private static void Play(AudioSource audioSource)
{
if (audioSource != null)
audioSource.Play();
}
private static void Play(AudioSource[] audioSources, ref int index)
{
if (audioSources == null || index >= audioSources.Length)
return;
Play(audioSources[index]);
index = (index + 1) % audioSources.Length;
}
private static void Stop(AudioSource audioSource)
{
if (audioSource != null && audioSource.isPlaying)
audioSource.Stop();
}
}