using Bootstrap; using System; using UnityEditor; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.InputSystem; using UnityEngine.Playables; using UnityEngine.SceneManagement; using UnityEngine.UI; namespace CinematicsM { /// /// Handles loading, playing and unloading cinematics /// public class CinematicsManager : MonoBehaviour { private static CinematicsManager _instance; private static bool _isQuitting; private Image cinematicSprites; public PlayableAsset cinematicToPlay; public static CinematicsManager Instance { get { if (_instance == null && Application.isPlaying && !_isQuitting) { _instance = FindAnyObjectByType(); if (_instance == null) { var go = new GameObject("CinematicsManager"); _instance = go.AddComponent(); // DontDestroyOnLoad(go); } } return _instance; } } public PlayableDirector playableDirector; private void OnEnable() { } /// /// Plays a cinematic from an object reference and returns the PlayableDirector playing the timeline /// public PlayableDirector PlayCinematic(PlayableAsset assetToPlay) { cinematicSprites.enabled = true; playableDirector.stopped += OnPlayableDirectorStopped; playableDirector.Play(assetToPlay); Debug.Log("Playing cinematic " + assetToPlay.name); return playableDirector; } void OnPlayableDirectorStopped(PlayableDirector director) { cinematicSprites.enabled = false; Debug.Log("Cinematic stopped!"); } /// /// Loads a playable from an asset path and plays it as a cinematic /// public PlayableDirector LoadAndPlayCinematic(string key) { var handle = Addressables.LoadAssetAsync(key); var result = handle.WaitForCompletion(); return PlayCinematic(result); } // Update is called once per frame void Update() { } private void Awake() { _instance = this; playableDirector = GetComponent(); cinematicSprites = GetComponentInChildren(true); LoadAndPlayCinematic("IntroSequence"); } } }