using AibisDream.Framework; using AibisDream.Kit; using AibisDream.UI; using UnityEngine; namespace AibisDream { public class DialogUIManager : Singleton { private CanvasGroup _canvasGroup; [SerializeField] private LineRunner lineView; [SerializeField] private OptionView optionView; public override void OnSingletonInit() { _canvasGroup = GetComponent(); EnumEventSystem.Global.Register(DialogEventEnum.LineStart, AddDialogueLine); EnumEventSystem.Global.Register(DialogEventEnum.OptionSelected, AddDialogueLine); EnumEventSystem.Global.Register(EventEnum.NextYarn, CleanDialogHistory); EnumEventSystem.Global.Register(GameLoopEnum.GameQuit, CleanDialogHistory); } public override void OnSingletonDestroy() { EnumEventSystem.Global.UnRegister(DialogEventEnum.LineStart, AddDialogueLine); EnumEventSystem.Global.UnRegister(DialogEventEnum.OptionSelected, AddDialogueLine); EnumEventSystem.Global.UnRegister(EventEnum.NextYarn, CleanDialogHistory); EnumEventSystem.Global.UnRegister(GameLoopEnum.GameQuit, CleanDialogHistory); } private RecordPanel RecordPanel => UIManager.Instance.GetPanel(); /// /// 记录对话 /// /// 对话 private void AddDialogueLine(LineInfo line) { if (line.character.dialogViewType == DialogViewType.Task) { return; } RecordPanel.AppendDialogLine(line); } private void CleanDialogHistory() { RecordPanel.ClearDialog(); } public void CloseCanvas() { gameObject.SetActive(false); } public void OpenCanvas() { gameObject.SetActive(true); } public void HideDialog() { // 关闭所有对话框 BubbleGroup.Instance.HideDialog(); // 关闭所有选项框 optionView.HideOptions(); } public void RegisterScreenView(DialogViewType dialogViewType, ILineView screenView) { lineView.RegisterView(dialogViewType, screenView); } public void UnRegisterScreenView(DialogViewType dialogViewType) { lineView.UnRegisterView(dialogViewType); } } public enum DialogViewType { Default, Screen, CenterText, CenterOption, Task, StandardBubble } }