using System; using System.Collections.Generic; using AibisDream.Framework; using AibisDream.Kit; using TMPro; using UnityEngine; using UnityEngine.UI; namespace AibisDream { public class DialogCanvasManager : Singleton { private const string BubbleView = "Dialog Bubble View"; private const string OldBoxView = "Dialog Box"; private const string QuickTalk = "Quick Talk"; #region 引用 private IDialogView _bubbleView; private IDialogView _oldBoxView; private IDialogView _curView; private GameObject _quickTalkButton; #endregion private List _rmvList = new(); public override void OnSingletonInit() { InitDialogViews(); InitQuickTalkButton(); InitEvent(); // 默认为旧Box _curView = _bubbleView; } 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; } private void HideDialog() { _curView.HideDialog(); } #endregion private void Update() { if (Input.GetKeyDown(KeyCode.Q) && Input.GetKey(KeyCode.P)) { _quickTalkButton.SetActive(!_quickTalkButton.activeSelf); } } #region 对话框相关处理 private void InitDialogViews() { _bubbleView = transform.Find(BubbleView).GetComponent(); _oldBoxView = transform.Find(OldBoxView).GetComponent(); _bubbleView.HideDialog(); _oldBoxView.HideDialog(); } private void InitQuickTalkButton() { _quickTalkButton = transform.Find(QuickTalk).gameObject; _quickTalkButton.GetComponent