using System; 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; } // 传输选项 YarnOption[] options = YarnOption.GeneOptions(dialogueOptions, onOptionSelected); DialogController.Instance.InvokeOptionCommand(commandName, options); commandName = null; } 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(); } } }