74 lines
1.9 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|