DialogueManager.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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 UnityEngine;
  10. using Utility;
  11. public class DialogueManager : Singleton<DialogueManager>
  12. {
  13. private int currentDialogueID;
  14. private Action onDialogueComplete;
  15. DialogueMono dialogue;
  16. public void CustomInit(DialogueMono dialogueMono)
  17. {
  18. dialogue = dialogueMono;
  19. }
  20. private void DispatchEvent(IEventData e)
  21. {
  22. DispatchEvent dispatchEvent = e as DispatchEvent;
  23. StartDialogue(dispatchEvent.eventId, dispatchEvent.completed);
  24. }
  25. /// <summary>
  26. /// 开始对话
  27. /// </summary>
  28. public void StartDialogue(int dialogueID, Action onComplete = null)
  29. {
  30. currentDialogueID = dialogueID;
  31. PlayDialogue(dialogueID);
  32. }
  33. private void PlayDialogue(int dialogueID)
  34. {
  35. currentDialogueID = dialogueID;
  36. // 找到当前对话组
  37. var dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(dialogueID);
  38. if (dialogueConfig.ID == 0)
  39. {
  40. EndDialogue();
  41. return;
  42. }
  43. dialogue.OpenDialoguePanel(dialogueConfig.ID, null, ShowDialogueEventData.MessageShowType.Verbatim,
  44. (selectedOptionID) =>
  45. {
  46. if (selectedOptionID.HasValue)
  47. {
  48. // 玩家选择了选项,处理结果
  49. SelectOption(selectedOptionID.Value);
  50. }
  51. else
  52. {
  53. // 无选
  54. EndDialogue1();
  55. }
  56. });
  57. }
  58. /// <summary>
  59. /// 处理选项选择
  60. /// </summary>
  61. public void SelectOption(int optionID)
  62. {
  63. PlayDialogue(optionID);
  64. }
  65. /// <summary>
  66. /// 结束对话
  67. /// </summary>
  68. private void EndDialogue1()
  69. {
  70. EventConditionConfig dialogueConfig = ConfigComponent.Instance.Get<EventConditionConfig>(currentDialogueID);
  71. switch (dialogueConfig.optionType)
  72. {
  73. //选项在这里不处理 在ui层处理
  74. case 1:
  75. EndDialogue();
  76. break;
  77. //进入战斗
  78. case 2:
  79. LogTool.Log("对话结束,进入战斗");
  80. break;
  81. //获得奖励
  82. case 3:
  83. LogTool.Log("对话结束,获得奖励");
  84. break;
  85. }
  86. }
  87. /// <summary>
  88. /// 结束对话
  89. /// </summary>
  90. private void EndDialogue()
  91. {
  92. onDialogueComplete?.Invoke();
  93. }
  94. }