ZeroVR/ZeroPacientVR/Assets/Scripts/MusicSound/MusicControll.cs

74 lines
1.9 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using FMOD.Studio;
using FMODUnity;
using UnityEngine;
public class MusicControll : MonoBehaviour
{
private static MusicControll instance;
[Range(0f, 1f)] [SerializeField] private float volume = 1f;
[SerializeField] private EventReference musicClip;
public List<NpcCombatAbstract> npcCombats;
public TypeMusic typeMusicCache = TypeMusic.None;
private EventInstance eventInstance;
private float oldVolume = -1;
public enum TypeMusic
{
None = -1,
Ambient = 0,
Combat = 1,
}
private void Awake()
{
instance = this;
npcCombats = new List<NpcCombatAbstract>();
eventInstance = RuntimeManager.CreateInstance(musicClip);
eventInstance.start();
if(Math.Abs(volume - oldVolume) > 0.01f)
{
oldVolume = volume;
eventInstance.setVolume(volume);
}
}
public static void Register(NpcCombatAbstract npc)
{
if (instance == null) return;
if (!instance.npcCombats.Contains(npc)) instance.npcCombats.Add(npc);
}
public static void UnRegister(NpcCombatAbstract npc)
{
if (instance == null) return;
if (instance.npcCombats.Contains(npc)) instance.npcCombats.Remove(npc);
}
private void Update()
{
if(npcCombats == null)
{
return;
}
var isCombat = npcCombats.Any(x => x.IsCombat);
var typeMusic = isCombat ? TypeMusic.Combat : TypeMusic.Ambient;
if(typeMusicCache != typeMusic)
{
typeMusicCache = typeMusic;
eventInstance.setParameterByName("Music", (int)typeMusic, true);
}
if(Math.Abs(volume - oldVolume) > 0.01f)
{
oldVolume = volume;
eventInstance.setVolume(volume);
}
}
}