using System; using System.Collections.Generic; using Common.Utility.CombatEvent; using Core.Event.Event; using Excel2Json; using Fort23.Core; using Fort23.Mono; using Fort23.UTool; using UnityEngine; using Utility; public class DialogueManager : Singleton { private int currentDialogueID; private Action onDialogueComplete; DialogueMono dialogue; public void CustomInit(DialogueMono dialogueMono) { dialogue = dialogueMono; } private void DispatchEvent(IEventData e) { DispatchEvent dispatchEvent = e as DispatchEvent; StartDialogue(dispatchEvent.eventId, dispatchEvent.completed); } /// /// 开始对话 /// public void StartDialogue(int dialogueID, Action onComplete = null) { currentDialogueID = dialogueID; PlayDialogue(dialogueID); } private void PlayDialogue(int dialogueID) { currentDialogueID = dialogueID; // 找到当前对话组 var dialogueConfig = ConfigComponent.Instance.Get(dialogueID); if (dialogueConfig.ID == 0) { EndDialogue(); return; } dialogue.OpenDialoguePanel(dialogueConfig.ID, null, ShowDialogueEventData.MessageShowType.Verbatim, (selectedOptionID) => { if (selectedOptionID.HasValue) { // 玩家选择了选项,处理结果 SelectOption(selectedOptionID.Value); } else { // 无选 EndDialogue1(); } }); } /// /// 处理选项选择 /// public void SelectOption(int optionID) { PlayDialogue(optionID); } /// /// 结束对话 /// private void EndDialogue1() { EventConditionConfig dialogueConfig = ConfigComponent.Instance.Get(currentDialogueID); switch (dialogueConfig.optionType) { //选项在这里不处理 在ui层处理 case 1: EndDialogue(); break; //进入战斗 case 2: LogTool.Log("对话结束,进入战斗"); break; //获得奖励 case 3: LogTool.Log("对话结束,获得奖励"); break; } } /// /// 结束对话 /// private void EndDialogue() { onDialogueComplete?.Invoke(); } }