Files
aibis-dream/Assets/Scripts/Dialog System/DialogController.cs
T
dingyuntian 9f20ef52d8 UI工具翻新
1. 增加UI工具
2. 增加设置页面
3. GameLoop更新
4. 导入ActionKit工具
2025-04-21 18:53:30 +08:00

122 lines
3.3 KiB
C#

using System;
using AibisDream.Framework;
using AibisDream.Kit;
using UnityEngine;
using UnityEngine.Events;
using Yarn.Unity;
namespace AibisDream
{
public class DialogController : Singleton<DialogController>
{
private DialogueRunner _dialogueRunner;
# region controller状态标识
private bool _isTalking;
public bool IsTalking
{
set
{
if (_isTalking == value) return;
_isTalking = value;
Debug.Log($"IsTalking 状态更改: {_isTalking}");
if (value)
{
OnDialogueStart?.Invoke();
}
else
{
OnDialogueComplete?.Invoke();
}
}
get => _isTalking;
}
public bool quickRunMode;
# endregion
public static UnityAction OnDialogueStart;
public static UnityAction OnDialogueComplete;
private void Start()
{
_dialogueRunner = GetComponentInChildren<DialogueRunner>();
_dialogueRunner.onDialogueStart.AddListener(() =>
{
EnumEventSystem.Global.Send(InteractionEventEnum.End);
OnDialogueStart?.Invoke();
IsTalking = true;
});
_dialogueRunner.onDialogueComplete.AddListener(() =>
{
EnumEventSystem.Global.Send(InteractionEventEnum.Start);
OnDialogueComplete?.Invoke();
IsTalking = false;
});
}
/// <summary>
/// 开启对话
/// </summary>
/// <param name="yarnProject">Yarn组</param>
public void StartDialog(YarnProject yarnProject)
{
_dialogueRunner.SetProject(yarnProject);
_dialogueRunner.StartDialogue("Start");
}
public void StopDialog()
{
_dialogueRunner.Stop();
StorageSystem.Instance.Clear();
DialogCanvasManager.Instance.HideDialog();
DialogCanvasManager.Instance.SwitchDialogView(DialogViewType.OldBox);
}
public void LoadDialog(YarnProject yarnProject)
{
_dialogueRunner.SetProject(yarnProject);
_dialogueRunner.StartDialogue("Center");
}
public void StartDialogNode(string nodeName)
{
if (CheckIfNodeExistInCurrentYarnProject(nodeName))
{
_dialogueRunner.StartDialogue(nodeName);
}
}
public bool CheckIfNodeExistInCurrentYarnProject(string nodeName)
{
YarnProject currentProject = _dialogueRunner.yarnProject;
string[] nodeNames = currentProject.NodeNames;
if (Array.Exists(nodeNames, item => item == nodeName))
{
return true;
}
else
{
Debug.Log($"节点 {nodeName} 不存在!");
return false;
}
}
/// <summary>
/// 跳到下一句
/// </summary>
public void JumpLine()
{
if (!DialogCanvasManager.Instance.TrySkipLine())
{
DialogCanvasManager.Instance.NextStep();
}
}
}
}