UnityGameProjectsCode / RelianceGame / Master Scripts / SoundManager.cs
SoundManager.cs
Raw
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SoundManager : MonoBehaviour
{
    public AudioClip clip;
    public AudioClip clip2;
    public AudioClip clip3;

    private AudioSource audioS;
    private Animator anim;

    private bool trackTime = false;
    private float timePlayed = 0f;

    private Scene currentScene;

    private void Start()
    {
        audioS = GetComponent<AudioSource>();
        anim = GetComponent<Animator>();

        audioS.clip = clip2;
        audioS.Play();
    }

    private void FixedUpdate()
    {
        if (trackTime == true)
        {
            timePlayed += Time.deltaTime;

            if (timePlayed >= 5f)
            {
                timePlayed = 0;
                StartCoroutine(StopCombatMusic());
            }
        }
    }

    public void SetAudio(Scene targetScene)
    {
        var previousScene = currentScene;
        currentScene = targetScene;

        if (currentScene.name == "HUB scene" && previousScene.name != "Main Menu")
        {
            audioS.clip = clip2;
            audioS.Play();
        }
        else if (currentScene.name == "Main Menu" && previousScene.name != "HUB scene")
        {
            audioS.clip = clip2;
            audioS.Play();
        }
        if (currentScene.name != "HUB scene" && currentScene.name != "Main Menu")
        {
            audioS.clip = clip;
            audioS.Play();
        }
    }

    public IEnumerator FadeInMusic(AudioClip targetClip)
    {
        audioS.volume = 0.0f;

        if (anim.GetBool("playing") == false)
        {
            anim.Play("Fade In Music");
        }

        audioS.clip = targetClip;

        audioS.Play();

        yield return new WaitForSecondsRealtime(3.5f);

        audioS.volume = 0.2f;
        anim.Play("Idle");
    }

    public void StartMusicCouroutine()
    {
        StartCoroutine(PlayCombatMusic());
    }

    public IEnumerator PlayCombatMusic()
    {
        trackTime = true;
        timePlayed = 0;
        audioS.volume = 0.0f;

        if (anim.GetBool("playing") == false)
        {
            anim.Play("Fade In Combat Music");
            anim.SetBool("playing", true);
        }

        audioS.clip = clip3;

        if (!audioS.isPlaying)
            audioS.Play();

        yield return new WaitForSecondsRealtime(3.5f);

        audioS.volume = 0.1f;
        anim.Play("Idle");
    }

    public IEnumerator StopCombatMusic()
    {
        trackTime = false;
        anim.SetBool("playing", false);
        anim.Play("Fade Out Music");

        yield return new WaitForSecondsRealtime(3.5f);

        anim.Play("Idle");
        StartCoroutine(FadeInMusic(clip));
    }
}