using System; using AibisDream.Utility; using Yarn.Unity; namespace AibisDream { public class CommandOptionView : DialogueViewBase { // 进入指令选项模式 private bool _isInCommand; private string _commandName; public override void RunLine(LocalizedLine dialogueLine, Action onDialogueLineFinished) { // 判断选项选项行 if (dialogueLine.Text.IsOptionAttrLine()) { _isInCommand = true; base.RunLine(dialogueLine, onDialogueLineFinished); return; } // 判断是否进入Command状态 _isInCommand = dialogueLine.Text.TryGetCommandAttr(out var curCommandName); if (_isInCommand) { // 保存指令 _commandName = curCommandName; // 进入下一步 onDialogueLineFinished.Invoke(); } else { base.RunLine(dialogueLine, onDialogueLineFinished); } } public override void RunOptions(DialogueOption[] dialogueOptions, Action onOptionSelected) { // 非指令直接跳过 if (!_isInCommand) { base.RunOptions(dialogueOptions, onOptionSelected); return; } DialogController.Instance.IsTalking = false; // 传输选项 YarnOption[] options = YarnOption.GeneOptions(dialogueOptions, onOptionSelected); DialogController.Instance.InvokeOptionCommand(_commandName, options); } 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() { base.UserRequestedViewAdvancement(); } } }