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 GameLogic.Bag; using UnityEngine; using Utility; public class DialogueManager : Singleton { private int currentDialogueID; private Action onDialogueComplete; private EventConfig eventConfig; IDialogueMono dialogue; public void CustomInit(IDialogueMono dialogueMono) { dialogue = dialogueMono; } /// /// 开始对话 /// public void StartDialogue(int dialogueID, int eventId, Action onComplete = null) { currentDialogueID = dialogueID; onDialogueComplete = onComplete; eventConfig = ConfigComponent.Instance.Get(eventId); PlayDialogue(dialogueID); } private void PlayDialogue(int dialogueID) { currentDialogueID = dialogueID; // 找到当前对话组 var dialogueConfig = ConfigComponent.Instance.Get(dialogueID); if (dialogueConfig.ID == 0) { EndDialogue(); return; } //挂机事件 弹出简单气泡对话 if (eventConfig.EventTriggerType != 2) { dialogue.OpenDialoguePanel(dialogueConfig.ID, null, ShowDialogueEventData.MessageShowType.Verbatim, FishDialogue); } else { dialogue.OpenDialoguePanel(dialogueConfig.ID, FishDialogue); } } public void FishDialogue(int? selectedOptionID) { if (selectedOptionID.HasValue) { // 玩家选择了选项,处理结果 SelectOption(selectedOptionID.Value); } else { // 无选 EndDialogue1(); } } /// /// 处理选项选择 /// public void SelectOption(int optionID) { PlayDialogue(optionID); } /// /// 结束对话 /// private async void EndDialogue1() { EventConditionConfig dialogueConfig = ConfigComponent.Instance.Get(currentDialogueID); switch (dialogueConfig.optionType) { //选项在这里不处理 在ui层处理 所有这里不是走到1 直接return case 1: EndDialogue(); return; //进入战斗 case 2: LogTool.Log("对话结束,进入战斗"); break; //获得奖励 case 3: List itemInfos = new List(); for (var i = 0; i < dialogueConfig.PrizeIDs.Length; i++) { ItemInfo itemInfo = new ItemInfo(dialogueConfig.PrizeIDs[i], dialogueConfig.PrizeNums[i]); itemInfos.Add(itemInfo); } await dialogue.OpenRewardsPanel(itemInfos); LogTool.Log("对话结束,获得奖励"); break; } //如果有下一个对话id 走下一个id if (dialogueConfig.ResultOptions != 0) { PlayDialogue(dialogueConfig.ResultOptions); } } /// /// 结束对话 /// private void EndDialogue() { onDialogueComplete?.Invoke(); } }