private void DefaultBgMusicLevels()
 {
     Script_AudioMixerVolume.SetVolume(
         audioMixer,
         BGMParam,
         1f
         );
 }
    // ----------------------------------------------------------------------
    // Timeline Signals

    // 1) Dramatic Thoughts Timeline
    // 2) Repeat Drama Node Action
    public void OnDramaticThoughtsCutsceneDone()
    {
        GetComponent <AudioSource>().PlayOneShot(Script_SFXManager.SFX.ThoughtsDone, Script_SFXManager.SFX.ThoughtsDoneVol);

        game.ChangeStateInteract();

        PlayDramaticMusic();

        Script_AudioMixerVolume.SetVolume(
            audioMixer, BGMParam, 1f
            );

        isPauseSpikes = false;

        // Make Attack instantly after cut scene is done.
        attackController.Timer = 0.001f;
    }
    public override void Setup()
    {
        game.SetupPlayerReflection(playerReflectionEro);
        game.SetupInteractableFullArt(fullArtParent, isInit);
        isInit = false;

        playerPlayableDirector = game.GetPlayer().Director;

        if (isCutSceneDone)
        {
            foreach (Script_TriggerEnterOnce trigger in cutSceneTriggers)
            {
                trigger.gameObject.SetActive(false);
            }
        }

        if (isDone)
        {
            fireplacePlayable.gameObject.SetActive(false);
            game.DisableExits(false, 0);
            puzzleTriggerController.isComplete = true;
            pushablesParent.gameObject.SetActive(false);
            Script_AudioMixerVolume.SetVolume(
                audioMixer,
                Const_AudioMixerParams.ExposedBGVolume,
                0f
                );
        }
        else
        {
            game.DisableExits(isDisabled: true, 0);

            if (puzzleTriggerController.currentSuccessCount == 1)
            {
                InitializeFire(isClose: true);
            }
            else
            {
                InitializeFire(isClose: false);
            }

            puzzleTriggerController.Setup();
            game.SetupPushables(pushablesParent, isInit);
        }
    }
    protected override void OnDisable()
    {
        Script_PuzzlesEventsManager.OnPuzzleProgress -= OnPuzzleProgress;
        Script_PuzzlesEventsManager.OnPuzzleSuccess  -= OnPuzzleComplete;

        playerPlayableDirector = null;

        if (Script_VCamManager.VCamMain != null)
        {
            Script_VCamManager.VCamMain.SwitchToMainVCam(staticZoomOutVCam);
        }

        Script_AudioMixerVolume.SetVolume(
            audioMixer,
            Const_AudioMixerParams.ExposedBGVolume,
            1f
            );
    }
    public void FadeInMusic()
    {
        // set master volume to 0 to prep fade in
        Script_AudioMixerVolume.SetVolume(
            audioMixer,
            Const_AudioMixerParams.ExposedBGVolume,
            0f
            );

        // fade in master volume
        StartCoroutine(
            Script_AudioMixerFader.Fade(
                audioMixer,
                Const_AudioMixerParams.ExposedBGVolume,
                bgMusicFadeInTime,
                1f,
                null
                )
            );
    }
    public void IntroDoneWrong()
    {
        if (game.state == Const_States_Game.CutScene)
        {
            StartCoroutine(
                Script_AudioMixerFader.Fade(
                    audioMixer,
                    Const_AudioMixerParams.ExposedMasterVolume,
                    bgMusicEndIntroFadeOutTime,
                    0f,
                    () => {
                Script_AudioMixerVolume.SetVolume(
                    audioMixer,
                    Const_AudioMixerParams.ExposedMasterVolume,
                    1f
                    );
                ElleniaBgThemePlayer.GetComponent <AudioSource>().volume = 0f;
                ElleniaBgThemePlayer.gameObject.SetActive(false);

                /// Need to wait for music to fade out before return facing easle
                /// otherwise, would use controller/NextNodeAction
                Ellenia.FaceDirection(Directions.Left);

                // need to change state in LateUpdate so NPC doesn't read the button event
                shouldChangeGameStateToInteract = true;
                game.UnPauseBgMusic();
            }
                    )
                );
        }
        else
        {
            Ellenia.FaceDirection(Directions.Left);
        }

        ElleniaIntroDoneDialogueNodes();
        spokenWithEllenia = true;
    }
    /// NextNodeAction START =====================================================================

    /// Node: "i'm part of the..."
    public void PlayOminousMusic()
    {
        game.ChangeStateCutScene();
        Ellenia.FaceDirection(Directions.Left);
        // fade out music and pause
        StartCoroutine(
            Script_AudioMixerFader.Fade(
                audioMixer,
                Const_AudioMixerParams.ExposedMasterVolume,
                bgMusicFadeOutTime,
                0f,
                () => {
            // after faded out, pause bg music and start theme music where Ellenia
            // should turn on beat
            game.PauseBgMusic();
            Script_AudioMixerVolume
            .SetVolume(audioMixer, Const_AudioMixerParams.ExposedMasterVolume, 1f);
            ElleniaBgThemePlayer.gameObject.SetActive(true);

            StartCoroutine(StartDialogueOnBeat());
        }
                )
            );

        IEnumerator StartDialogueOnBeat()
        {
            yield return(new WaitForSeconds(waitToTurnTime));

            Directions directionToPlayer = Script_Utils.GetDirectionToTarget(
                Ellenia.transform.position,
                Script_Game.Game.GetPlayer().transform.position
                );

            Ellenia.FaceDirection(directionToPlayer);
            // then play dialogueNode
            Script_DialogueManager.DialogueManager.StartDialogueNode(introContinuationNode, false);
        }
    }