92 lines
2.8 KiB
C#
92 lines
2.8 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Yarn.Unity;
|
|
|
|
namespace AibisDream
|
|
{
|
|
public class LineView : DialogueViewBase
|
|
{
|
|
private const string AutoNext = "auto_next";
|
|
|
|
// 进入指令选项模式
|
|
private bool _isInCommand;
|
|
|
|
public override void RunLine(LocalizedLine dialogueLine, Action onDialogueLineFinished)
|
|
{
|
|
_isInCommand = dialogueLine.Text.HasCommandAttr();
|
|
|
|
if (_isInCommand)
|
|
{
|
|
DialogUiViewer.Instance.HideDialog();
|
|
base.RunLine(dialogueLine, onDialogueLineFinished);
|
|
return;
|
|
}
|
|
|
|
HandleLineOutput(dialogueLine, onDialogueLineFinished);
|
|
|
|
if (DialogController.Instance.quickRunMode)
|
|
{
|
|
onDialogueLineFinished.Invoke();
|
|
}
|
|
}
|
|
|
|
private void HandleLineOutput(LocalizedLine dialogueLine, Action onDialogueLineFinished)
|
|
{
|
|
// 对话系统正在交谈状态
|
|
DialogController.Instance.IsTalking = true;
|
|
|
|
// 解析LocalizedLine
|
|
if (dialogueLine.Metadata != null && dialogueLine.Metadata.Contains(AutoNext))
|
|
{
|
|
// 自动跳过
|
|
DialogUiViewer.Instance.ShowAutoLine(dialogueLine.TextWithoutCharacterName.Text,
|
|
dialogueLine.CharacterName, onDialogueLineFinished);
|
|
}
|
|
else
|
|
{
|
|
// 需要玩家点击
|
|
DialogUiViewer.Instance.ShowLine(dialogueLine.TextWithoutCharacterName.Text,
|
|
dialogueLine.CharacterName, onDialogueLineFinished);
|
|
}
|
|
}
|
|
|
|
public override void RunOptions(DialogueOption[] dialogueOptions, Action<int> onOptionSelected)
|
|
{
|
|
if (_isInCommand)
|
|
{
|
|
DialogUiViewer.Instance.HideDialog();
|
|
base.RunOptions(dialogueOptions, onOptionSelected);
|
|
return;
|
|
}
|
|
|
|
DialogController.Instance.IsTalking = true;
|
|
DialogUiViewer.Instance.ShowOptions(dialogueOptions, onOptionSelected);
|
|
}
|
|
|
|
public override void InterruptLine(LocalizedLine dialogueLine, Action onDialogueLineFinished)
|
|
{
|
|
base.InterruptLine(dialogueLine, onDialogueLineFinished);
|
|
}
|
|
|
|
public override void DismissLine(Action onDismissalComplete)
|
|
{
|
|
base.DismissLine(onDismissalComplete);
|
|
}
|
|
|
|
public override void UserRequestedViewAdvancement()
|
|
{
|
|
if (_isInCommand)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!DialogUiViewer.Instance.TrySkipLine())
|
|
{
|
|
DialogUiViewer.Instance.AfterEndLine();
|
|
requestInterrupt.Invoke();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|