using SLSUtilities.UI;
using UnityEngine;
using Yarn.Unity;
namespace Cielonos.UI
{
public class DialogUIPage : UIPageBase
{
public DialogueRunner dialogueRunner;
private string _pendingNode;
///
/// 带参数打开:指定要启动的 Yarn 节点名。
///
public void Open(string yarnNode)
{
_pendingNode = yarnNode;
Open(); // 调用 base.Open() -> 注册到 UIPageManager -> 自动阻塞游戏输入
}
public override void Open()
{
base.Open();
string node = string.IsNullOrEmpty(_pendingNode) ? "Start" : _pendingNode;
if (dialogueRunner != null)
{
if (dialogueRunner.IsDialogueRunning)
{
dialogueRunner.Stop();
}
dialogueRunner.StartDialogue(node);
}
_pendingNode = null;
}
protected override void Start()
{
base.Start();
// 绑定对话结束时的回调函数,关闭 UI 页面从而释放输入锁定
if (dialogueRunner != null)
{
dialogueRunner.onDialogueComplete.AddListener(OnDialogueComplete);
}
}
private void OnDestroy()
{
if (dialogueRunner != null)
{
dialogueRunner.onDialogueComplete.RemoveListener(OnDialogueComplete);
}
}
///
/// 对话结束时,由 DialogueRunner 的 onDialogueComplete 事件触发。
///
public void OnDialogueComplete()
{
Close(); // base.Close() -> UIPageManager.UnregisterPage -> 恢复输入锁定
}
}
}