using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using Yarn.Unity; namespace AibisDream { public class YarnOption { private int _idx; private readonly DialogueOption _dialogueOption; private Action _onOptionSelected; /// /// 选项中的文字 /// public string Text => _dialogueOption.Line.TextWithoutCharacterName.Text; public bool IsAvailable => _dialogueOption.IsAvailable; public int Index => _idx; public YarnOption(int idx, DialogueOption dialogueOption, Action onOptionSelected) { _dialogueOption = dialogueOption; _onOptionSelected = onOptionSelected; _idx = idx; } /// /// 选择该选项 /// public void SelectOption() { if (!IsAvailable) { Debug.LogWarning($"选项 {Text} 不可用"); return; } if (_onOptionSelected == null) { Debug.LogWarning($"选项 {Text} 已经执行过了"); return; } // 执行选项 _onOptionSelected.Invoke(_dialogueOption.DialogueOptionID); _onOptionSelected = null; } /// /// 生成选项 /// /// 原始选项 /// 选择 /// 包装选项 public static YarnOption[] GeneOptions(DialogueOption[] options, Action onOptionSelected) { var yarnOptions = new YarnOption[options.Length]; for (var i = 0; i < options.Length; i++) { yarnOptions[i] = new YarnOption(i, options[i], onOptionSelected); } return yarnOptions; } } }