Files
aibis-dream/Assets/Scripts/Game Loop/GameLoopManager.cs
T
2024-11-15 06:35:27 +08:00

86 lines
2.3 KiB
C#

using System.Collections;
using AibisDream.Kit;
using UnityEngine;
using Yarn.Unity;
namespace AibisDream
{
public class GameLoopManager : Singleton<GameLoopManager>
{
[Header("运行模式")]
[SerializeField]
private RunMode runMode;
[Header("正式环境参数")]
[SerializeField] private TalkSceneSO firstTalkSO;
private TalkSceneSO currentTalkSceneSO;
[SerializeField]
private string clinicScene;
[Header("测试环境参数")]
[SerializeField] private string testYarnProject;
public void Start()
{
if (runMode == RunMode.Test)
{
MainUIController.Instance.TVFadeOut(1);
GameObject.Find("Menu Canvas").SetActive(false);
StartCoroutine(StartTestGame());
}
}
public void StartNewGame()
{
currentTalkSceneSO = firstTalkSO;
StartCoroutine(LoadClinicScene());
}
public void StartNewGame(TalkSceneSO sceneSo)
{
currentTalkSceneSO = sceneSo;
StartCoroutine(LoadClinicScene());
}
private IEnumerator LoadClinicScene()
{
yield return SceneLoader.Instance.LoadSceneAsync(clinicScene);
StartMenu.Instance.HideStartMenu();
DialogController.Instance.StartDialog(currentTalkSceneSO.yarnProject);
}
public IEnumerator StartTestGame()
{
yield return SceneLoader.Instance.LoadSceneAsync(clinicScene);
var proj = Resources.Load<YarnProject>($"Yarn/{testYarnProject}/{testYarnProject}");
DialogController.Instance.StartDialog(proj);
}
public IEnumerator NextSceneSo()
{
if (currentTalkSceneSO && currentTalkSceneSO.nextScene)
{
currentTalkSceneSO = currentTalkSceneSO.nextScene;
yield return MainUIController.Instance.FadeInSync(1);
yield return LoadClinicScene();
yield return MainUIController.Instance.FadeOutSync(1);
}
else
{
yield return null;
Debug.Log("没有下个场景了");
}
}
}
public enum RunMode
{
Test, Pro, FixTest
}
}