using System.Collections.Generic; using UnityEngine; using Articy.Unity; using Articy.Touhou; namespace Game { /// /// 剧情管理 /// public class DramaManager : ManagerBase { private GameObject _dramaRoot; private ArticyFlowPlayer _articyFlowPlayer; private DramaFlowPlayer _flowPlayer; public DramaManager() { } public override void OnCreate() { Object.DontDestroyOnLoad(GameObject.Find("FlowRoot")); _dramaRoot = GameObject.Find("FlowRoot/DramaRoot"); _articyFlowPlayer = _dramaRoot.GetComponent(); _flowPlayer = _dramaRoot.GetComponent(); _dramaRoot.SetActive(false); } public override void Update() { } public override void OnDestroy() { Object.DestroyImmediate(_dramaRoot); } public void StartDrama(string dramaId) { if (_dramaRoot.activeSelf) { return; } var dialog = ArticyDatabase.GetObject(dramaId); if (dialog == null) { Util.Print("剧情不存在:", dramaId); return; } Util.EntityStopMove(Util.GetMasterID()); UIManager.Instance.Open(EuiPage.Drama); _articyFlowPlayer.StartOn = dialog; _dramaRoot.SetActive(true); } public void EndDrama() { _dramaRoot.SetActive(false); SendDialogEnd(); } public void NextDrama() { _flowPlayer.NextDrama(); } public void NextDramaChoice(int index) { _flowPlayer.NextDramaChoice(index); } public void SendDialog(string name, string content, ArticyObject icon) { var param = new PDialog() { Name = name, Content = content, Pic = icon, }; EventManager.Instance.SendEvent(EEvent.Dialog, param); } public void SendDialogChoice(List choices) { var param = new PDialogChoice() { Choices = choices, }; EventManager.Instance.SendEvent(EEvent.DialogChoice, param); } private void SendDialogEnd() { EventManager.Instance.SendEvent(EEvent.DialogEnd); } } public abstract partial class Util { public static void StartDrama(string dramaId) { DramaManager.Instance.StartDrama(dramaId); } public static void EndDrama() { DramaManager.Instance.EndDrama(); } public static void NextDrama() { DramaManager.Instance.NextDrama(); } public static void NextDramaChoice(int index) { DramaManager.Instance.NextDramaChoice(index); } public static void SendDialog(string name, string content, ArticyObject icon) { DramaManager.Instance.SendDialog(name, content, icon); } public static void SendDialogChoice(List choices) { DramaManager.Instance.SendDialogChoice(choices); } } }