196 lines
7.4 KiB
C#
196 lines
7.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Playables;
|
|
using UnityEngine.Timeline;
|
|
using Cinemachine;
|
|
|
|
public class CutscenesManager : MonoBehaviour
|
|
{
|
|
[Header("Player")]
|
|
[HideInInspector] public Transform _playerTeleportPosition;
|
|
[HideInInspector] public Transform _playerParent;
|
|
|
|
[Header("Cutscenes")]
|
|
public PlayableDirector MedeaKillingBabyCutscene;
|
|
[HideInInspector] public PlayableDirector gameLoadedFadeOutPlayableDirector;
|
|
public string gameLoadedFadeOutPlayableDirectorName = "GameLoadedFadeOutPlayableDirector";
|
|
|
|
[SerializeField] PlayableDirector[] playableDirectorsOfScene;
|
|
private HashSet<PlayableDirector> uniqueDirectors = new HashSet<PlayableDirector>();
|
|
|
|
private static CutscenesManager _instance;
|
|
public static CutscenesManager GetInstance() { return _instance; }
|
|
|
|
private void Awake()
|
|
{
|
|
if (!_instance)
|
|
{
|
|
_instance = this;
|
|
}
|
|
}
|
|
|
|
public void AssignPlayerToPlayableDirectorsOfSceneAfterSeconds()
|
|
{
|
|
StartCoroutine(AssignToPlayableDirectorsOfSceneAfterSeconds());
|
|
}
|
|
|
|
IEnumerator AssignToPlayableDirectorsOfSceneAfterSeconds()
|
|
{
|
|
yield return new WaitForSeconds(0.5f);
|
|
GetAllPlayableDirectorsOfScene();
|
|
AssignPlayerToTimelines();
|
|
}
|
|
|
|
public void FindGameLoadedFadeOutPlayableDirector()
|
|
{
|
|
// Find the PlayableDirectors in the scene
|
|
PlayableDirector[] directors = FindObjectsOfType<PlayableDirector>();
|
|
|
|
// Iterate through each director
|
|
foreach (PlayableDirector director in directors)
|
|
{
|
|
// Check if the current director has the desired name
|
|
if (director.name == gameLoadedFadeOutPlayableDirectorName)
|
|
{
|
|
// Found the PlayableDirector, you can do something with it
|
|
Debug.Log("Found PlayableDirector: " + gameLoadedFadeOutPlayableDirectorName);
|
|
gameLoadedFadeOutPlayableDirector = director;
|
|
// Do something with the director if needed
|
|
// director.Play(); // for example
|
|
return; // Exit the loop since you found the director
|
|
}
|
|
}
|
|
|
|
// If the loop completes and the director is not found
|
|
Debug.LogWarning("PlayableDirector not found: " + gameLoadedFadeOutPlayableDirectorName);
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
//GetAllPlayableDirectorsOfScene();
|
|
//AssignPlayerToTimelines();
|
|
//AssignMedeaToTimelines();
|
|
StartCoroutine(AssignToPlayableDirectorsOfSceneAfterSeconds());
|
|
}
|
|
|
|
public void GetAllPlayableDirectorsOfScene()
|
|
{
|
|
//playableDirectorsOfScene = FindObjectsOfType<PlayableDirector>();
|
|
|
|
// Find all PlayableDirectors in the scene
|
|
PlayableDirector[] directorsInScene = FindObjectsOfType<PlayableDirector>();
|
|
|
|
// Iterate through each director and add to the HashSet if not already present
|
|
foreach (PlayableDirector director in directorsInScene)
|
|
{
|
|
if (!uniqueDirectors.Contains(director))
|
|
{
|
|
uniqueDirectors.Add(director);
|
|
}
|
|
}
|
|
|
|
// Convert the HashSet to an array
|
|
playableDirectorsOfScene = new PlayableDirector[uniqueDirectors.Count];
|
|
uniqueDirectors.CopyTo(playableDirectorsOfScene);
|
|
}
|
|
|
|
public void AssignPlayerToTimelines()
|
|
{
|
|
// Remove null references from the array
|
|
playableDirectorsOfScene = System.Array.FindAll(playableDirectorsOfScene, director => director != null);
|
|
|
|
//GameObject cameraProp = PlayersManager.GetInstance().MaxReplaceCharacterModel.characterSpawnPoint.GetComponentInChildren<CameraProp>(true).gameObject;
|
|
//GameObject polaroidProp = PlayersManager.GetInstance().MaxReplaceCharacterModel.characterSpawnPoint.GetComponentInChildren<PolaroidProp>(true).gameObject;
|
|
//GameObject cameraFlash = cameraProp.transform.Find("CameraFlash").gameObject;
|
|
//AudioSource cameraAudioSource = PlayersManager.GetInstance().MaxReplaceCharacterModel.characterSpawnPoint.GetComponentInChildren<CameraProp>(true).gameObject.GetComponent<AudioSource>();
|
|
|
|
Animator playerAnimator = PlayerManager.GetInstance().FPSControllerAnimator;
|
|
CinemachineBrain mainCameraCinemachineBrain = PlayerManager.GetInstance().PlayerMainCamera.GetComponent<CinemachineBrain>();
|
|
|
|
for (int i = 0; i < playableDirectorsOfScene.Length; i++)
|
|
{
|
|
var timelineAsset = playableDirectorsOfScene[i].playableAsset as TimelineAsset;
|
|
var trackList = timelineAsset.GetOutputTracks();
|
|
foreach (var track in trackList)
|
|
{
|
|
#region Props
|
|
if (track.name == "Player Animator Track")
|
|
{
|
|
playableDirectorsOfScene[i].SetGenericBinding(track, playerAnimator);
|
|
}
|
|
if(track.name == "Main Camera Cinemachine Track")
|
|
{
|
|
playableDirectorsOfScene[i].SetGenericBinding(track, mainCameraCinemachineBrain);
|
|
}
|
|
//if (track.name == "Polaroid Activation Track")
|
|
//{
|
|
// playableDiretorsOfScene[i].SetGenericBinding(track, polaroidProp);
|
|
//}
|
|
//if (track.name == "Camera Flash Activation Track")
|
|
//{
|
|
// playableDiretorsOfScene[i].SetGenericBinding(track, cameraFlash);
|
|
//}
|
|
//if (track.name == "Camera Audio Track")
|
|
//{
|
|
// playableDiretorsOfScene[i].SetGenericBinding(track, cameraAudioSource);
|
|
//}
|
|
#endregion
|
|
playableDirectorsOfScene[i].RebuildGraph();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public void AssignMedeaToTimelines()
|
|
{
|
|
// Remove null references from the array
|
|
playableDirectorsOfScene = System.Array.FindAll(playableDirectorsOfScene, director => director != null);
|
|
|
|
Animator medeaAnimator = MedeaDemonicEnemyBehaviour.GetInstance().medeaAnimator;
|
|
|
|
for (int i = 0; i < playableDirectorsOfScene.Length; i++)
|
|
{
|
|
var timelineAsset = playableDirectorsOfScene[i].playableAsset as TimelineAsset;
|
|
var trackList = timelineAsset.GetOutputTracks();
|
|
foreach (var track in trackList)
|
|
{
|
|
#region Props
|
|
if (track.name == "Medea Animator Track")
|
|
{
|
|
playableDirectorsOfScene[i].SetGenericBinding(track, medeaAnimator);
|
|
}
|
|
#endregion
|
|
playableDirectorsOfScene[i].RebuildGraph();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void TeleportPlayer()
|
|
{
|
|
PlayerManager.GetInstance().playerGameObj.transform.localPosition = _playerTeleportPosition.localPosition;
|
|
PlayerManager.GetInstance().playerGameObj.transform.localRotation = _playerTeleportPosition.localRotation;
|
|
}
|
|
|
|
public void UpdatePlayerParent()
|
|
{
|
|
PlayerManager.GetInstance().playerGameObj.transform.parent = _playerParent;
|
|
}
|
|
|
|
public void PlayCutscene(PlayableDirector Cutscene)
|
|
{
|
|
Cutscene.enabled = true;
|
|
Cutscene.Play();
|
|
}
|
|
|
|
public void ScreenTitlesFadeIn()
|
|
{
|
|
UIManager.GetInstance().TitlesUI.GetComponent<Animator>().SetBool("IsFadingIn", true);
|
|
}
|
|
|
|
public void ScreenTitlesFadeOut()
|
|
{
|
|
UIManager.GetInstance().TitlesUI.GetComponent<Animator>().SetBool("IsFadingIn", false);
|
|
}
|
|
}
|