GameJam Progress Day 2
This commit is contained in:
97
Assets/Scripts/MusicManager.cs
Normal file
97
Assets/Scripts/MusicManager.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
[System.Serializable]
|
||||
public struct MusicMapping
|
||||
{
|
||||
public string sceneName;
|
||||
public AudioClip track;
|
||||
}
|
||||
public class MusicManager : MonoBehaviour
|
||||
{
|
||||
public bool musicEnabled = true;
|
||||
public MusicMapping[] musicMap;
|
||||
public float crossfadeSpeed = 1;
|
||||
public AudioSource[] audioSources;
|
||||
public int activeAudioSource = 0;
|
||||
[Range(0,1)]
|
||||
public float crossfadeT = 1;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
if (GameObject.FindObjectsOfType<MusicManager>().Length != 1)
|
||||
{
|
||||
Destroy(this);
|
||||
}
|
||||
}
|
||||
// Start is called before the first frame update
|
||||
void Start()
|
||||
{
|
||||
DontDestroyOnLoad(this);
|
||||
SceneManager.sceneLoaded += this.OnSceneLoaded;
|
||||
|
||||
this.LoadMeppedTrack(SceneManager.GetActiveScene().name);
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
this.crossfadeT = Mathf.Clamp( this.crossfadeT += this.activeAudioSource == 0 ? .1f * this.crossfadeSpeed : -.1f * this.crossfadeSpeed, 0, 1);
|
||||
float val = Mathf.Lerp(0, 1, this.crossfadeT);
|
||||
this.audioSources[0].volume = val;
|
||||
this.audioSources[1].volume = 1 - val;
|
||||
|
||||
if (this.musicEnabled == false)
|
||||
{
|
||||
this.audioSources[0].volume = 0;
|
||||
this.audioSources[1].volume = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void LoadMeppedTrack(string sceneName)
|
||||
{
|
||||
foreach (MusicMapping mapping in this.musicMap)
|
||||
{
|
||||
if (mapping.sceneName == sceneName)
|
||||
{
|
||||
this.CrossfadeToTrack(mapping.track);
|
||||
Debug.Log("MusicManager: Fading to track " + mapping.track.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool ToggleMusic()
|
||||
{
|
||||
this.musicEnabled = !this.musicEnabled;
|
||||
|
||||
return this.musicEnabled;
|
||||
}
|
||||
void OnSceneLoaded(Scene scene, LoadSceneMode mode)
|
||||
{
|
||||
this.LoadMeppedTrack(scene.name);
|
||||
}
|
||||
|
||||
public void CrossfadeToTrack(AudioClip audioClip, float speed)
|
||||
{
|
||||
this.crossfadeSpeed = speed;
|
||||
if (this.audioSources[this.activeAudioSource].clip == audioClip) { return; } //Don't fade if it's the same clip
|
||||
if (this.activeAudioSource == 0)
|
||||
{
|
||||
this.audioSources[1].clip = audioClip;
|
||||
this.audioSources[1].Play();
|
||||
this.activeAudioSource = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.audioSources[0].clip = audioClip;
|
||||
this.audioSources[0].Play();
|
||||
this.activeAudioSource = 0;
|
||||
}
|
||||
}
|
||||
public void CrossfadeToTrack(AudioClip audioClip)
|
||||
{
|
||||
this.CrossfadeToTrack(audioClip, 1f);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user