1
This commit is contained in:
@@ -25,10 +25,21 @@ namespace Net.Project.B.Dialogue
|
||||
/// </summary>
|
||||
public event Func<IDialogueData, UniTask> OnDialogueStart;
|
||||
|
||||
public event Action<IDialogueData> OnDynamicDialogueStart;
|
||||
/// <summary>
|
||||
/// 动态对话
|
||||
/// </summary>
|
||||
public event Func<IDialogueData, UniTask<string>> OnDynamicDialogueStartAsync;
|
||||
|
||||
/// <summary>
|
||||
/// 对话结束
|
||||
/// </summary>
|
||||
public event Action<IDialogueData> OnDialogueEnd;
|
||||
|
||||
/// <summary>
|
||||
/// 动态对话结束
|
||||
/// </summary>
|
||||
public event Action<IDialogueData,string> OnDynamicDialogueEnd;
|
||||
|
||||
/// <summary>
|
||||
/// 对话选择
|
||||
@@ -48,6 +59,8 @@ namespace Net.Project.B.Dialogue
|
||||
UniTask CreateDialogue(IDialogueData dialogueData);
|
||||
|
||||
UniTask<int> CreateDialogue(IDialogueData dialogueData, IReadOnlyCollection<IDialogueChoice> dialogueChoices);
|
||||
|
||||
UniTask<string> CreateDynamicDialogue(IDialogueData dialogueData);
|
||||
}
|
||||
|
||||
public class DialogueService : IDialogueService
|
||||
@@ -55,7 +68,10 @@ namespace Net.Project.B.Dialogue
|
||||
public IReadOnlyDictionary<int, IDialogueData> Dialogues => _dialogues;
|
||||
|
||||
public event Func<IDialogueData, UniTask> OnDialogueStart;
|
||||
public event Action<IDialogueData> OnDynamicDialogueStart;
|
||||
public event Func<IDialogueData, UniTask<string>> OnDynamicDialogueStartAsync;
|
||||
public event Action<IDialogueData> OnDialogueEnd;
|
||||
public event Action<IDialogueData, string> OnDynamicDialogueEnd;
|
||||
public event Func<IDialogueData, IReadOnlyCollection<IDialogueChoice>, UniTask<int>> OnDialogueChoose;
|
||||
public event Action<IDialogueData, IDialogueChoice> OnDialogueChose;
|
||||
public async UniTask CreateDialogue(IDialogueData dialogueData)
|
||||
@@ -105,6 +121,19 @@ namespace Net.Project.B.Dialogue
|
||||
return index;
|
||||
}
|
||||
|
||||
public async UniTask<string> CreateDynamicDialogue(IDialogueData dialogueData)
|
||||
{
|
||||
if (OnDynamicDialogueStartAsync is null)throw new Exception("OnDynamicDialogueStartAsync is not null");
|
||||
|
||||
OnDialogueStart?.Invoke(dialogueData);
|
||||
|
||||
var result = await OnDynamicDialogueStartAsync.Invoke(dialogueData);
|
||||
|
||||
OnDynamicDialogueEnd?.Invoke(dialogueData,result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private readonly ConcurrentDictionary<int, IDialogueData> _dialogues = new();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user