First commit for private source control. Older commits available on Github.
This commit is contained in:
115
Assets/Scripts/Game/Cinematics/OpeningCinematic.cs
Normal file
115
Assets/Scripts/Game/Cinematics/OpeningCinematic.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
using System;
|
||||
using BriarQueen.Data.Identifiers;
|
||||
using BriarQueen.Framework.Assets;
|
||||
using BriarQueen.Framework.Coordinators.Events;
|
||||
using BriarQueen.Framework.Managers.Input;
|
||||
using BriarQueen.Framework.Managers.IO;
|
||||
using BriarQueen.Framework.Managers.Levels;
|
||||
using BriarQueen.Framework.Registries;
|
||||
using BriarQueen.Framework.Services.Game;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using UnityEngine.ResourceManagement.AsyncOperations;
|
||||
using UnityEngine.ResourceManagement.ResourceProviders;
|
||||
using VContainer;
|
||||
|
||||
namespace BriarQueen.Game.Cinematics
|
||||
{
|
||||
public class OpeningCinematic : BaseCinematic
|
||||
{
|
||||
private AddressableManager _addressableManager;
|
||||
private AssetRegistry _assetRegistry;
|
||||
private GameService _gameService;
|
||||
private LevelManager _levelManager;
|
||||
private SaveManager _saveManager;
|
||||
|
||||
private SceneInstance _loadedScene;
|
||||
private AsyncOperationHandle<SceneInstance> _loadedSceneHandle;
|
||||
|
||||
protected async UniTaskVoid Start()
|
||||
{
|
||||
var destroyToken = this.GetCancellationTokenOnDestroy();
|
||||
|
||||
try
|
||||
{
|
||||
if (_assetRegistry == null ||
|
||||
!_assetRegistry.TryGetReference(
|
||||
AssetKeyIdentifiers.Get(SceneKey.GameScene),
|
||||
out var loadedSceneRef))
|
||||
{
|
||||
Debug.LogWarning("[OpeningCinematic] Missing GameScene reference in AssetRegistry.");
|
||||
return;
|
||||
}
|
||||
|
||||
_loadedSceneHandle = await _addressableManager.LoadSceneAsync(
|
||||
loadedSceneRef,
|
||||
autoLoad: false,
|
||||
cancellationToken: destroyToken);
|
||||
|
||||
if (_loadedSceneHandle.IsValid())
|
||||
_loadedScene = _loadedSceneHandle.Result;
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[OpeningCinematic] Failed to preload GameScene.");
|
||||
return;
|
||||
}
|
||||
|
||||
await PlayCinematic(destroyToken);
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Debug.LogException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
protected override async UniTask OnCinematicEnd()
|
||||
{
|
||||
if (!_loadedSceneHandle.IsValid())
|
||||
{
|
||||
Debug.LogWarning("[OpeningCinematic] Game scene handle invalid; cannot transition.");
|
||||
await _gameService.LoadMainMenu();
|
||||
return;
|
||||
}
|
||||
|
||||
gameObject.SetActive(false);
|
||||
|
||||
await _loadedScene.ActivateAsync().ToUniTask();
|
||||
await _gameService.SwapGameSceneHandle(_loadedSceneHandle);
|
||||
|
||||
if (_saveManager.CurrentSave != null)
|
||||
_saveManager.CurrentSave.OpeningCinematicPlayed = true;
|
||||
|
||||
var levelLoaded = await _levelManager.LoadLevel(
|
||||
AssetKeyIdentifiers.Get(LevelKey.ChapterOneVillageEdge));
|
||||
|
||||
if (!levelLoaded)
|
||||
{
|
||||
Debug.LogError(
|
||||
"[OpeningCinematic] Failed to load ChapterOneVillageEdge after cinematic. Returning to main menu.");
|
||||
await _gameService.LoadMainMenu();
|
||||
}
|
||||
}
|
||||
|
||||
[Inject]
|
||||
public void Construct(
|
||||
AddressableManager addressableManager,
|
||||
AssetRegistry assetRegistry,
|
||||
EventCoordinator eventCoordinator,
|
||||
LevelManager levelManager,
|
||||
GameService gameService,
|
||||
InputManager inputManager,
|
||||
SaveManager saveManager)
|
||||
{
|
||||
base.Construct(eventCoordinator, inputManager);
|
||||
|
||||
_addressableManager = addressableManager;
|
||||
_assetRegistry = assetRegistry;
|
||||
_levelManager = levelManager;
|
||||
_gameService = gameService;
|
||||
_saveManager = saveManager;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user