using System; using System.Collections.Generic; using System.Text; using AibisDream.Framework; using AibisDream.Kit; using UnityEngine; using UnityEngine.UI; namespace AibisDream { public class DialogCanvasManager : Singleton, IDialogView { private const string QuickTalk = "Quick Talk"; #region 引用 private readonly Dictionary _dialogViewDict = new(); private IDialogView _curView; private IDialogView _lastShowView; private GameObject _quickTalkButton; #endregion private readonly List _rmvList = new(); public override void OnSingletonInit() { InitQuickTalkButton(); InitEvent(); // 默认对话框直接加载 var box = transform.Find("Dialog Box").GetComponent(); RegisterDialogView(DialogViewType.OldBox, box); var centerText = transform.Find("Center Text").GetComponent(); RegisterDialogView(DialogViewType.CenterText, centerText); var centerOption = transform.Find("Center Option").GetComponent(); RegisterDialogView(DialogViewType.CenterOption, centerOption); } private void Start() { _curView = _dialogViewDict[DialogViewType.OldBox]; } private void InitEvent() { _rmvList.Add( EnumEventSystem.Global.Register(DialogEventEnum.LineStart, AddDialogueLine)); _rmvList.Add( EnumEventSystem.Global.Register(DialogEventEnum.OptionSelected, AddDialogueLine)); _rmvList.Add(EnumEventSystem.Global.Register(EventEnum.NextYarn, CleanDialogHistory)); } public override void OnSingletonDestroy() { // 销毁前处理事件 _rmvList.ForEach(item => item.UnRegister()); } #region 对话结束后隐藏 private void OnEnable() { DialogController.OnDialogueComplete += HideDialog; } private void OnDisable() { DialogController.OnDialogueComplete -= HideDialog; } #endregion private void Update() { if (Input.GetKeyDown(KeyCode.Q) && Input.GetKey(KeyCode.P)) { _quickTalkButton.SetActive(!_quickTalkButton.activeSelf); } } #region 对话框相关处理 private void InitQuickTalkButton() { _quickTalkButton = transform.Find(QuickTalk).gameObject; _quickTalkButton.GetComponent