using System; using System.Linq; using System.Collections.Generic; using AibisDream.Framework; using AibisDream.Kit; using AibisDream.Utility; using UnityEngine; using Yarn.Unity; namespace AibisDream { public struct DialogOption { private Action _onOptionSelected; private DialogueOption _option; public bool IsAvailable => _option.IsAvailable; public string Line => _option.Line.TextWithoutCharacterName.Text; public CharacterVo Character => _option.Line.GetCharacterVo(); /// /// 选择该选项 /// public void Select() { if (!_option.IsAvailable) { Debug.Log($"{_option.Line} 不可用"); return; } EnumEventSystem.Global.Send(DialogEventEnum.OptionSelected, TransToLine()); _onOptionSelected.Invoke(_option.DialogueOptionID); } private LineInfo TransToLine() { return new LineInfo { isOption = true, lineId = _option.TextID, lineText = _option.Line.TextWithoutCharacterName.Text, character = _option.Line.GetCharacterVo(), isAutoSkip = false }; } public static DialogOption[] GeneOptions(DialogueOption[] dialogueOptions, Action onOptionSelected) { return dialogueOptions .Select(item => new DialogOption { _option = item, _onOptionSelected = onOptionSelected }).ToArray(); } } [Serializable] public struct TextParam { public float charSpace; public float lineSpace; public int maxCharNum; } }