Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorWindowManager.cs
@小李xl 小李xl on 13 Aug 2023 8 KB 创建房间标记, 开发中
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using Config;
  5. using Godot;
  6. using UI.EditorTips;
  7. using UI.EditorWindow;
  8. using UI.MapEditorCreateGroup;
  9. using UI.MapEditorCreateMark;
  10. using UI.MapEditorCreatePreinstall;
  11. using UI.MapEditorCreateRoom;
  12. using UI.MapEditorSelectObject;
  13.  
  14. public static class EditorWindowManager
  15. {
  16. /// <summary>
  17. /// 弹出通用提示面板
  18. /// </summary>
  19. /// <param name="title">标题</param>
  20. /// <param name="message">显示内容</param>
  21. /// <param name="onClose">关闭时的回调</param>
  22. /// <param name="parentUi">所属父级Ui</param>
  23. public static void ShowTips(string title, string message, Action onClose = null, UiBase parentUi = null)
  24. {
  25. var window = CreateWindowInstance(parentUi);
  26. window.SetWindowTitle(title);
  27. if (onClose != null)
  28. {
  29. window.CloseEvent += onClose;
  30. }
  31. window.SetButtonList(
  32. new EditorWindowPanel.ButtonData("确定", () =>
  33. {
  34. window.CloseWindow();
  35. })
  36. );
  37. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiName.EditorTips);
  38. body.SetMessage(message);
  39. }
  40.  
  41. /// <summary>
  42. /// 弹出询问窗口
  43. /// </summary>
  44. /// <param name="title">标题</param>
  45. /// <param name="message">显示内容</param>
  46. /// <param name="onClose">关闭时的回调, 参数如果为 true 表示点击了确定</param>
  47. /// <param name="parentUi">所属父级Ui</param>
  48. public static void ShowConfirm(string title, string message, Action<bool> onClose, UiBase parentUi = null)
  49. {
  50. var window = CreateWindowInstance(parentUi);
  51. window.SetWindowTitle(title);
  52. window.CloseEvent += () =>
  53. {
  54. onClose(false);
  55. };
  56. window.SetButtonList(
  57. new EditorWindowPanel.ButtonData("确定", () =>
  58. {
  59. window.CloseWindow();
  60. onClose(true);
  61. }),
  62. new EditorWindowPanel.ButtonData("取消", () =>
  63. {
  64. window.CloseWindow();
  65. onClose(false);
  66. })
  67. );
  68. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiName.EditorTips);
  69. body.SetMessage(message);
  70. }
  71.  
  72. /// <summary>
  73. /// 打开创建地牢组弹窗
  74. /// </summary>
  75. /// <param name="onCreateGroup">创建成功时回调</param>
  76. /// <param name="parentUi">所属父级Ui</param>
  77. public static void ShowCreateGroup(Action<DungeonRoomGroup> onCreateGroup, UiBase parentUi = null)
  78. {
  79. var window = CreateWindowInstance(parentUi);
  80. window.SetWindowTitle("创建地牢组");
  81. window.SetWindowSize(new Vector2I(700, 500));
  82. var body = window.OpenBody<MapEditorCreateGroupPanel>(UiManager.UiName.MapEditorCreateGroup);
  83. window.SetButtonList(
  84. new EditorWindowPanel.ButtonData("确定", () =>
  85. {
  86. //获取填写的数据, 并创建ui
  87. var groupInfo = body.GetGroupInfo();
  88. if (groupInfo != null)
  89. {
  90. window.CloseWindow();
  91. onCreateGroup(groupInfo);
  92. }
  93. }),
  94. new EditorWindowPanel.ButtonData("取消", () =>
  95. {
  96. window.CloseWindow();
  97. })
  98. );
  99. }
  100. /// <summary>
  101. /// 打开创建地牢房间弹窗
  102. /// </summary>
  103. /// <param name="groupName">选择的组名称, 如果不需要有选择的项, 则传 null</param>
  104. /// <param name="roomType">选择的房间类型</param>
  105. /// <param name="onCreateRoom">创建成功时回调</param>
  106. public static void ShowCreateRoom(string groupName, int roomType, Action<DungeonRoomSplit> onCreateRoom)
  107. {
  108. var window = UiManager.Open_EditorWindow();
  109. window.SetWindowTitle("创建地牢房间");
  110. window.SetWindowSize(new Vector2I(700, 600));
  111. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiName.MapEditorCreateRoom);
  112. if (groupName != null)
  113. {
  114. body.SetSelectGroup(groupName);
  115. }
  116. body.SetSelectType(roomType);
  117. window.SetButtonList(
  118. new EditorWindowPanel.ButtonData("确定", () =>
  119. {
  120. //获取填写的数据, 并创建ui
  121. var roomSplit = body.GetRoomInfo();
  122. if (roomSplit != null)
  123. {
  124. window.CloseWindow();
  125. onCreateRoom(roomSplit);
  126. }
  127. }),
  128. new EditorWindowPanel.ButtonData("取消", () =>
  129. {
  130. window.CloseWindow();
  131. })
  132. );
  133. }
  134.  
  135. /// <summary>
  136. /// 打开创建房间预设弹窗
  137. /// </summary>
  138. /// <param name="list">当前房间已经包含的所有预设列表</param>
  139. /// <param name="onCreatePreinstall">创建成功时的回调</param>
  140. public static void ShowCreatePreinstall(List<RoomPreinstall> list, Action<RoomPreinstall> onCreatePreinstall)
  141. {
  142. var window = UiManager.Open_EditorWindow();
  143. window.SetWindowTitle("创建房间预设");
  144. window.SetWindowSize(new Vector2I(700, 600));
  145. var body = window.OpenBody<MapEditorCreatePreinstallPanel>(UiManager.UiName.MapEditorCreatePreinstall);
  146. window.SetButtonList(
  147. new EditorWindowPanel.ButtonData("确定", () =>
  148. {
  149. var roomPreinstall = body.GetRoomPreinstall(list);
  150. if (roomPreinstall != null)
  151. {
  152. window.CloseWindow();
  153. onCreatePreinstall(roomPreinstall);
  154. }
  155. }),
  156. new EditorWindowPanel.ButtonData("取消", () =>
  157. {
  158. window.CloseWindow();
  159. })
  160. );
  161. }
  162.  
  163. /// <summary>
  164. /// 打开创建标记页面
  165. /// </summary>
  166. /// <param name="onCreateMarkInfo">创建标记回调</param>
  167. public static void ShowCreateMark(Action<MarkInfo> onCreateMarkInfo)
  168. {
  169. var window = UiManager.Open_EditorWindow();
  170. window.SetWindowTitle("创建标记");
  171. window.SetWindowSize(new Vector2I(1400, 900));
  172. var body = window.OpenBody<MapEditorCreateMarkPanel>(UiManager.UiName.MapEditorCreateMark);
  173. window.SetButtonList(
  174. new EditorWindowPanel.ButtonData("确定", () =>
  175. {
  176. var markInfo = body.GetMarkInfo();
  177. if (markInfo != null)
  178. {
  179. window.CloseWindow();
  180. onCreateMarkInfo(markInfo);
  181. }
  182. }),
  183. new EditorWindowPanel.ButtonData("取消", () =>
  184. {
  185. window.CloseWindow();
  186. })
  187. );
  188. }
  189. /// <summary>
  190. /// 打开选中的物体
  191. /// </summary>
  192. /// <param name="onSelectObject">选中物体时回调</param>
  193. /// <param name="parentUi">所属父级Ui</param>
  194. public static void ShowSelectObject(Action<ExcelConfig.ActivityObject> onSelectObject, UiBase parentUi = null)
  195. {
  196. var window = CreateWindowInstance(parentUi);
  197. window.S_Window.Instance.Size = new Vector2I(1000, 700);
  198. window.SetWindowTitle("选择物体");
  199. var body = window.OpenBody<MapEditorSelectObjectPanel>(UiManager.UiName.MapEditorSelectObject);
  200. window.SetButtonList(
  201. new EditorWindowPanel.ButtonData("确定", () =>
  202. {
  203. var selectObject = body.GetSelectData();
  204. if (selectObject == null)
  205. {
  206. ShowTips("提示", "您未选择任何物体");
  207. }
  208. else
  209. {
  210. window.CloseWindow();
  211. onSelectObject(selectObject);
  212. }
  213. }),
  214. new EditorWindowPanel.ButtonData("取消", () =>
  215. {
  216. window.CloseWindow();
  217. })
  218. );
  219. //绑定双击选中物体事件
  220. body.SelectObjectEvent += selectObject =>
  221. {
  222. window.CloseWindow();
  223. onSelectObject(selectObject);
  224. };
  225. }
  226.  
  227. private static EditorWindowPanel CreateWindowInstance(UiBase parentUi)
  228. {
  229. if (parentUi != null)
  230. {
  231. return parentUi.OpenNestedUi<EditorWindowPanel>(UiManager.UiName.EditorWindow);
  232. }
  233.  
  234. return UiManager.Open_EditorWindow();
  235. }
  236. }