Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorManager.cs
  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. public static void SetSelectPreinstallIndex(int index)
  87. {
  88. if (SelectRoom == null)
  89. {
  90. if (SelectPreinstallIndex != -1)
  91. {
  92. SelectPreinstallIndex = -1;
  93. EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
  94. }
  95. }
  96. else if (index < 0 || SelectRoom.Preinstall == null || index >= SelectRoom.Preinstall.Count)
  97. {
  98. if (SelectPreinstallIndex != -1)
  99. {
  100. SelectPreinstallIndex = -1;
  101. EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
  102. }
  103. }
  104. else if (SelectPreinstallIndex != index)
  105. {
  106. SelectPreinstallIndex = index;
  107. EventManager.EmitEvent(EventEnum.OnSelectPreinstall, SelectPreinstall);
  108. }
  109. }
  110.  
  111. public static void SetSelectWaveIndex(int index)
  112. {
  113. if (SelectPreinstall == null)
  114. {
  115. if (SelectWaveIndex != -1)
  116. {
  117. SelectWaveIndex = -1;
  118. EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
  119. }
  120. }
  121. else if (SelectWaveIndex != index)
  122. {
  123. if (index < 0 || SelectPreinstall.WaveList == null || index >= SelectPreinstall.WaveList.Count)
  124. {
  125. if (SelectWaveIndex != -1)
  126. {
  127. SelectWaveIndex = -1;
  128. EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
  129. }
  130. }
  131. else
  132. {
  133. if (SelectWaveIndex != index)
  134. {
  135. SelectWaveIndex = index;
  136. EventManager.EmitEvent(EventEnum.OnSelectWave, SelectWave);
  137. }
  138. }
  139. }
  140. }
  141.  
  142. public static void SetSelectMark(MarkInfo markInfo)
  143. {
  144. if (SelectMark != markInfo)
  145. {
  146. SelectMark = markInfo;
  147. EventManager.EmitEvent(EventEnum.OnSelectMark, markInfo);
  148. }
  149. }
  150. /// <summary>
  151. /// 根据 RoomErrorType 枚举获取房间错误信息
  152. /// </summary>
  153. public static string GetRoomErrorTypeMessage(RoomErrorType errorType)
  154. {
  155. switch (errorType)
  156. {
  157. case RoomErrorType.None:
  158. return "";
  159. case RoomErrorType.Empty:
  160. return "房间没有绘制地块";
  161. case RoomErrorType.TileError:
  162. return "房间地块存在绘制错误";
  163. case RoomErrorType.DoorAreaError:
  164. return "房间至少要有两个不同方向的门区域";
  165. case RoomErrorType.NoPreinstallError:
  166. return "房间没有预设";
  167. }
  168.  
  169. return null;
  170. }
  171. }