107 lines
3.1 KiB
C#
107 lines
3.1 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;
|
|
private LocalisedLineProvider _lineProvider;
|
|
|
|
# region controller状态标识
|
|
|
|
public bool quickRunMode;
|
|
public bool autoRunMode;
|
|
|
|
# endregion
|
|
|
|
public static UnityAction OnDialogueStart;
|
|
public static UnityAction OnDialogueComplete;
|
|
|
|
private void Start()
|
|
{
|
|
_dialogueRunner = GetComponentInChildren<DialogueRunner>();
|
|
_lineProvider = GetComponentInChildren<LocalisedLineProvider>();
|
|
|
|
_dialogueRunner.onDialogueStart.AddListener(() =>
|
|
{
|
|
EnumEventSystem.Global.Send(InteractionEventEnum.End);
|
|
OnDialogueStart?.Invoke();
|
|
});
|
|
_dialogueRunner.onDialogueComplete.AddListener(() =>
|
|
{
|
|
EnumEventSystem.Global.Send(InteractionEventEnum.Start);
|
|
OnDialogueComplete?.Invoke();
|
|
});
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开启对话
|
|
/// </summary>
|
|
/// <param name="yarnProject">Yarn组</param>
|
|
public void StartDialog(YarnProject yarnProject)
|
|
{
|
|
_dialogueRunner.SetProject(yarnProject);
|
|
_lineProvider.InitStringTable(yarnProject.name);
|
|
_dialogueRunner.StartDialogue("Start");
|
|
}
|
|
|
|
public string GetCurLocalizedTableName()
|
|
{
|
|
return _lineProvider.GetStringTableName();
|
|
}
|
|
|
|
public void StopDialog()
|
|
{
|
|
_dialogueRunner.Stop();
|
|
StorageSystem.Instance.Clear();
|
|
DialogCanvasManager.Instance.HideDialog();
|
|
DialogCanvasManager.Instance.SwitchDialogView(DialogViewType.OldBox);
|
|
}
|
|
|
|
public void LoadDialog(YarnProject yarnProject)
|
|
{
|
|
_dialogueRunner.SetProject(yarnProject);
|
|
_lineProvider.InitStringTable(yarnProject.name);
|
|
_dialogueRunner.StartDialogue("Center");
|
|
}
|
|
|
|
public void StartDialogNode(string nodeName)
|
|
{
|
|
if (CheckIfNodeExistInCurrentYarnProject(nodeName))
|
|
{
|
|
_dialogueRunner.StartDialogue(nodeName);
|
|
}
|
|
}
|
|
|
|
private 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();
|
|
}
|
|
}
|
|
}
|
|
} |