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 GameLogic.Combat.CombatTool; 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; //神识探索的事件记录步骤 if (EventSystemManager.Instance.CurrentEventList != null) EventSystemManager.Instance.CurrentEventList.curStep = currentDialogueID; AccountFileInfo.Instance.SavePlayerData(); // 找到当前对话组 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); bool isCombatWin = false; switch (dialogueConfig.optionType) { //选项在这里不处理 在ui层处理 所有这里不是走到1 直接return case 1: EndDialogue(); return; //进入战斗 case 2: LogTool.Log("对话结束,进入战斗"); CTask cTask = CTask.Create(); dialogue.StartCombat(dialogueConfig.optionPara1[0], delegate(bool isWin) { LogTool.Log("战斗完成" + isWin); isCombatWin = isWin; cTask.SetResult(); }); await cTask; dialogue.ChangeComabtState(CombatController.idle); 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(eventConfig.ID,itemInfos); LogTool.Log("对话结束,获得奖励"); break; } //如果有下一个对话id 走下一个id if (dialogueConfig.ResultOptions != null && dialogueConfig.ResultOptions.Length > 0) { if (dialogueConfig.optionType == 2) { if (isCombatWin) { PlayDialogue(dialogueConfig.ResultOptions[0]); } else { PlayDialogue(dialogueConfig.ResultOptions[1]); } } else { PlayDialogue(dialogueConfig.ResultOptions[0]); } } else { EndDialogue(); } } /// /// 结束对话 /// private void EndDialogue() { onDialogueComplete?.Invoke(); } }