DialogueManager.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using System;
  2. using System.Collections.Generic;
  3. using Common.Utility.CombatEvent;
  4. using Core.Event.Event;
  5. using Excel2Json;
  6. using Fort23.Core;
  7. using Fort23.Mono;
  8. using Fort23.UTool;
  9. using GameLogic.Bag;
  10. using UnityEngine;
  11. using Utility;
  12. public class DialogueManager : Singleton<DialogueManager>
  13. {
  14. private int currentDialogueID;
  15. private Action onDialogueComplete;
  16. IDialogueMono dialogue;
  17. public void CustomInit(IDialogueMono dialogueMono)
  18. {
  19. dialogue = dialogueMono;
  20. }
  21. private void DispatchEvent(IEventData e)
  22. {
  23. DispatchEvent dispatchEvent = e as DispatchEvent;
  24. StartDialogue(dispatchEvent.eventId, dispatchEvent.completed);
  25. }
  26. /// <summary>
  27. /// 开始对话
  28. /// </summary>
  29. public void StartDialogue(int dialogueID, Action onComplete = null)
  30. {
  31. currentDialogueID = dialogueID;
  32. PlayDialogue(dialogueID);
  33. }
  34. private void PlayDialogue(int dialogueID)
  35. {
  36. currentDialogueID = dialogueID;
  37. // 找到当前对话组
  38. var dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(dialogueID);
  39. if (dialogueConfig.ID == 0)
  40. {
  41. EndDialogue();
  42. return;
  43. }
  44. dialogue.OpenDialoguePanel(dialogueConfig.ID, null, ShowDialogueEventData.MessageShowType.Verbatim,
  45. (selectedOptionID) =>
  46. {
  47. if (selectedOptionID.HasValue)
  48. {
  49. // 玩家选择了选项,处理结果
  50. SelectOption(selectedOptionID.Value);
  51. }
  52. else
  53. {
  54. // 无选
  55. EndDialogue1();
  56. }
  57. });
  58. }
  59. /// <summary>
  60. /// 处理选项选择
  61. /// </summary>
  62. public void SelectOption(int optionID)
  63. {
  64. PlayDialogue(optionID);
  65. }
  66. /// <summary>
  67. /// 结束对话
  68. /// </summary>
  69. private async void EndDialogue1()
  70. {
  71. EventConditionConfig dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(currentDialogueID);
  72. switch (dialogueConfig.optionType)
  73. {
  74. //选项在这里不处理 在ui层处理 所有这里不是走到1 直接return
  75. case 1:
  76. EndDialogue();
  77. return;
  78. //进入战斗
  79. case 2:
  80. LogTool.Log("对话结束,进入战斗");
  81. break;
  82. //获得奖励
  83. case 3:
  84. List<ItemInfo> itemInfos = new List<ItemInfo>();
  85. for (var i = 0; i < dialogueConfig.PrizeIDs.Length; i++)
  86. {
  87. ItemInfo itemInfo = new ItemInfo(dialogueConfig.PrizeIDs[i], dialogueConfig.PrizeNums[i]);
  88. itemInfos.Add(itemInfo);
  89. }
  90. await dialogue.OpenRewardsPanel(itemInfos);
  91. LogTool.Log("对话结束,获得奖励");
  92. break;
  93. }
  94. //如果有下一个对话id 走下一个id
  95. if (dialogueConfig.ResultOptions != null && dialogueConfig.ResultOptions[0] != 0)
  96. {
  97. PlayDialogue(dialogueConfig.ResultOptions[0]);
  98. }
  99. }
  100. /// <summary>
  101. /// 结束对话
  102. /// </summary>
  103. private void EndDialogue()
  104. {
  105. onDialogueComplete?.Invoke();
  106. }
  107. }