Files
aibis-dream/Assets/Scripts/Dialog System/LineView.cs
T

99 lines
3.0 KiB
C#

using System;
using AibisDream.Utility;
using Yarn.Unity;
namespace AibisDream
{
public class LineView : DialogueViewBase
{
// 进入指令选项模式
private bool _isInCommand;
public override void RunLine(LocalizedLine dialogueLine, Action onDialogueLineFinished)
{
_isInCommand = dialogueLine.Text.HasCommandAttr();
if (_isInCommand)
{
DialogCanvasManager.GetCurView().HideDialog();
base.RunLine(dialogueLine, onDialogueLineFinished);
return;
}
Action jumpVoice = SkipVoice;
HandleLineOutput(dialogueLine, jumpVoice, onDialogueLineFinished);
HandleVoiceOutput(dialogueLine);
if (DialogController.Instance.quickRunMode)
{
onDialogueLineFinished.Invoke();
}
}
private void HandleLineOutput(LocalizedLine dialogueLine, Action onTextShowed, Action onDialogueLineFinished)
{
// 对话系统正在交谈状态
//DialogController.Instance.IsTalking = true;
DialogCanvasManager.GetCurView().ShowLine(dialogueLine.TextWithoutCharacterName.Text,
dialogueLine.GetCharacterVo(), onDialogueLineFinished, onTextShowed, dialogueLine.IsAutoSkipLine());
}
private void HandleVoiceOutput(LocalizedLine dialogueLine)
{
// 播放语音
var voicePath = dialogueLine.GetCharacterVo().voicePath;
if (!string.IsNullOrWhiteSpace(voicePath))
{
AudioManager.Instance.RandomPlayVoice(voicePath);
}
}
private void SkipVoice()
{
AudioManager.Instance.StopVoice();
}
public override void RunOptions(DialogueOption[] dialogueOptions, Action<int> onOptionSelected)
{
if (_isInCommand)
{
DialogCanvasManager.GetCurView().HideDialog();
base.RunOptions(dialogueOptions, onOptionSelected);
return;
}
//DialogController.Instance.IsTalking = true;
DialogCanvasManager.GetCurView().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 (DialogController.Instance.IsBlock)
{
return;
}
if (!DialogCanvasManager.GetCurView().TrySkipLine())
{
AudioManager.Instance.StopVoice();
requestInterrupt.Invoke();
}
}
}
}