Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorManager.cs
@小李xl 小李xl on 11 Dec 2023 5 KB 地图编辑器标记预览功能
  1.  
  2. using System.Collections.Generic;
  3.  
  4. public static class EditorManager
  5. {
  6. /// <summary>
  7. /// 当前使用的地牢组
  8. /// </summary>
  9. public static DungeonRoomGroup SelectDungeonGroup { get; private set; }
  10.  
  11. /// <summary>
  12. /// 当使用的地牢房间
  13. /// </summary>
  14. public static DungeonRoomSplit SelectRoom { get; private set; }
  15.  
  16. /// <summary>
  17. /// 当前使用的预设索引
  18. /// </summary>
  19. public static int SelectPreinstallIndex { get; private set; } = -1;
  20.  
  21. /// <summary>
  22. /// 当前使用的预设
  23. /// </summary>
  24. public static RoomPreinstallInfo SelectPreinstall
  25. {
  26. get
  27. {
  28. if (SelectPreinstallIndex < 0 || SelectPreinstallIndex >= SelectRoom.Preinstall.Count)
  29. {
  30. return null;
  31. }
  32.  
  33. return SelectRoom.Preinstall[SelectPreinstallIndex];
  34. }
  35. }
  36.  
  37. /// <summary>
  38. /// 当前选中的波索引
  39. /// </summary>
  40. public static int SelectWaveIndex { get; private set; } = -1;
  41.  
  42. /// <summary>
  43. /// 当前选中的波
  44. /// </summary>
  45. public static List<MarkInfo> SelectWave
  46. {
  47. get
  48. {
  49. var preinstall = SelectPreinstall;
  50. if (preinstall == null)
  51. {
  52. return null;
  53. }
  54.  
  55. if (SelectWaveIndex < 0 || SelectWaveIndex > preinstall.WaveList.Count)
  56. {
  57. return null;
  58. }
  59.  
  60. return preinstall.WaveList[SelectWaveIndex];
  61. }
  62. }
  63. /// <summary>
  64. /// 当前选中的标记
  65. /// </summary>
  66. public static MarkInfo SelectMark { get; private set; }
  67.  
  68. public static void SetSelectDungeonGroup(DungeonRoomGroup roomGroup)
  69. {
  70. if (SelectDungeonGroup != roomGroup)
  71. {
  72. SelectDungeonGroup = roomGroup;
  73. EventManager.EmitEvent(EventEnum.OnSelectGroup, SelectDungeonGroup);
  74. }
  75. }
  76.  
  77. public static void SetSelectRoom(DungeonRoomSplit roomSplit)
  78. {
  79. if (!ReferenceEquals(SelectRoom, roomSplit))
  80. {
  81. SelectRoom = roomSplit;
  82. EventManager.EmitEvent(EventEnum.OnSelectRoom, SelectRoom);
  83. }
  84. }
  85.  
  86. /// <summary>
  87. /// 选中预设
  88. /// </summary>
  89. /// <param name="index">预设索引</param>
  90. public static void SetSelectPreinstallIndex(int index)
  91. {
  92. if (SelectRoom == null)
  93. {
  94. if (SelectPreinstallIndex != -1)
  95. {
  96. SelectPreinstallIndex = -1;
  97. EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
  98. }
  99. }
  100. else if (index < 0 || SelectRoom.Preinstall == null || index >= SelectRoom.Preinstall.Count)
  101. {
  102. if (SelectPreinstallIndex != -1)
  103. {
  104. SelectPreinstallIndex = -1;
  105. EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
  106. }
  107. }
  108. else if (SelectPreinstallIndex != index)
  109. {
  110. SelectPreinstallIndex = index;
  111. EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
  112. }
  113. }
  114. /// <summary>
  115. /// 选中波数
  116. /// </summary>
  117. /// <param name="index">波数索引</param>
  118. public static void SetSelectWaveIndex(int index)
  119. {
  120. if (SelectPreinstall == null)
  121. {
  122. if (SelectWaveIndex != -1)
  123. {
  124. SelectWaveIndex = -1;
  125. EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
  126. }
  127. }
  128. else if (SelectWaveIndex != index)
  129. {
  130. if (index < 0 || SelectPreinstall.WaveList == null || index >= SelectPreinstall.WaveList.Count)
  131. {
  132. if (SelectWaveIndex != -1)
  133. {
  134. SelectWaveIndex = -1;
  135. EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
  136. }
  137. }
  138. else
  139. {
  140. if (SelectWaveIndex != index)
  141. {
  142. SelectWaveIndex = index;
  143. EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
  144. }
  145. }
  146. }
  147. }
  148.  
  149. /// <summary>
  150. /// 选中某个标记
  151. /// </summary>
  152. public static void SetSelectMark(MarkInfo markInfo)
  153. {
  154. if (SelectMark != markInfo)
  155. {
  156. SelectMark = markInfo;
  157. EventManager.EmitEvent(EventEnum.OnSelectMark, markInfo);
  158. }
  159. }
  160. /// <summary>
  161. /// 根据 RoomErrorType 枚举获取房间错误信息
  162. /// </summary>
  163. public static string GetRoomErrorTypeMessage(RoomErrorType errorType)
  164. {
  165. switch (errorType)
  166. {
  167. case RoomErrorType.None:
  168. return "";
  169. case RoomErrorType.Empty:
  170. return "房间没有绘制地块";
  171. case RoomErrorType.TileError:
  172. return "房间地块存在绘制错误";
  173. case RoomErrorType.DoorAreaError:
  174. return "房间至少要有两个不同方向的门区域";
  175. case RoomErrorType.NoPreinstallError:
  176. return "房间没有预设";
  177. }
  178.  
  179. return null;
  180. }
  181. }