Files
aibis-dream/Assets/Scripts/UI/DialogUI/IDialogView.cs
T
dingyuntian f22b7087fb 问题修复
1. 保存存档时立绘信息未保存
2. AMB切到Main时失效
3. 跳过对话功能不停止语音
2025-03-18 14:37:40 +08:00

65 lines
1.9 KiB
C#

using System;
using System.Linq;
using AibisDream.Framework;
using AibisDream.Kit;
using AibisDream.Utility;
using UnityEngine;
using Yarn.Unity;
namespace AibisDream
{
public interface IDialogView
{
public void ShowLine(string dialogLine, CharacterVo character, Action nextStep, bool isAutoSkip = false);
public void ShowOptions(DialogOption[] dialogueOptions);
public void HideDialog();
public bool TrySkipLine(bool isForceSkip = false);
public void NextStep();
}
public struct DialogOption
{
private Action<int> _onOptionSelected;
private DialogueOption _option;
public bool IsAvailable => _option.IsAvailable;
public string Line => _option.Line.TextWithoutCharacterName.Text;
public CharacterVo Character => _option.Line.GetCharacterVo();
/// <summary>
/// 选择该选项
/// </summary>
public void Select()
{
if (!_option.IsAvailable)
{
Debug.Log($"{_option.Line} 不可用");
return;
}
EnumEventSystem.Global.Send(DialogEventEnum.OptionSelected, TransToLine());
_onOptionSelected.Invoke(_option.DialogueOptionID);
}
private DialogText TransToLine()
{
return new DialogText
{
isOption = true,
lineId = _option.TextID,
line = _option.Line.TextWithoutCharacterName.Text,
actor = _option.Line.GetCharacterVo()
};
}
public static DialogOption[] GeneOptions(DialogueOption[] dialogueOptions, Action<int> onOptionSelected)
{
return dialogueOptions
.Select(item => new DialogOption { _option = item, _onOptionSelected = onOptionSelected }).ToArray();
}
}
}