123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- 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<DialogueManager>
- {
- private int currentDialogueID;
- private Action onDialogueComplete;
- private EventConfig eventConfig;
- IDialogueMono dialogue;
- public void CustomInit(IDialogueMono dialogueMono)
- {
- dialogue = dialogueMono;
- }
- /// <summary>
- /// 开始对话
- /// </summary>
- public void StartDialogue(int dialogueID, int eventId, Action onComplete = null)
- {
- currentDialogueID = dialogueID;
- onDialogueComplete = onComplete;
- eventConfig = ConfigComponent.Instance.Get<EventConfig>(eventId);
- PlayDialogue(dialogueID);
- }
- private void PlayDialogue(int dialogueID)
- {
- currentDialogueID = dialogueID;
- // 找到当前对话组
- var dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(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();
- }
- }
- /// <summary>
- /// 处理选项选择
- /// </summary>
- public void SelectOption(int optionID)
- {
- PlayDialogue(optionID);
- }
- /// <summary>
- /// 结束对话
- /// </summary>
- private async void EndDialogue1()
- {
- EventConditionConfig dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(currentDialogueID);
- switch (dialogueConfig.optionType)
- {
- //选项在这里不处理 在ui层处理 所有这里不是走到1 直接return
- case 1:
- EndDialogue();
- return;
- //进入战斗
- case 2:
- LogTool.Log("对话结束,进入战斗");
- break;
- //获得奖励
- case 3:
- List<ItemInfo> itemInfos = new List<ItemInfo>();
- 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);
- }
- }
- /// <summary>
- /// 结束对话
- /// </summary>
- private void EndDialogue()
- {
- onDialogueComplete?.Invoke();
- }
- }
|