Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorWindowManager.cs
@小李xl 小李xl on 20 Aug 2023 9 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. })
  66. );
  67. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiName.EditorTips);
  68. body.SetMessage(message);
  69. }
  70.  
  71. /// <summary>
  72. /// 打开创建地牢组弹窗
  73. /// </summary>
  74. /// <param name="onCreateGroup">创建成功时回调</param>
  75. /// <param name="parentUi">所属父级Ui</param>
  76. public static void ShowCreateGroup(Action<DungeonRoomGroup> onCreateGroup, UiBase parentUi = null)
  77. {
  78. var window = CreateWindowInstance(parentUi);
  79. window.SetWindowTitle("创建地牢组");
  80. window.SetWindowSize(new Vector2I(700, 500));
  81. var body = window.OpenBody<MapEditorCreateGroupPanel>(UiManager.UiName.MapEditorCreateGroup);
  82. window.SetButtonList(
  83. new EditorWindowPanel.ButtonData("确定", () =>
  84. {
  85. //获取填写的数据, 并创建ui
  86. var groupInfo = body.GetGroupInfo();
  87. if (groupInfo != null)
  88. {
  89. window.CloseWindow();
  90. onCreateGroup(groupInfo);
  91. }
  92. }),
  93. new EditorWindowPanel.ButtonData("取消", () =>
  94. {
  95. window.CloseWindow();
  96. })
  97. );
  98. }
  99. /// <summary>
  100. /// 打开创建地牢房间弹窗
  101. /// </summary>
  102. /// <param name="groupName">选择的组名称, 如果不需要有选择的项, 则传 null</param>
  103. /// <param name="roomType">选择的房间类型</param>
  104. /// <param name="onCreateRoom">创建成功时回调</param>
  105. public static void ShowCreateRoom(string groupName, int roomType, Action<DungeonRoomSplit> onCreateRoom)
  106. {
  107. var window = UiManager.Open_EditorWindow();
  108. window.SetWindowTitle("创建地牢房间");
  109. window.SetWindowSize(new Vector2I(700, 600));
  110. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiName.MapEditorCreateRoom);
  111. if (groupName != null)
  112. {
  113. body.SetSelectGroup(groupName);
  114. }
  115. body.SetSelectType(roomType);
  116. window.SetButtonList(
  117. new EditorWindowPanel.ButtonData("确定", () =>
  118. {
  119. //获取填写的数据, 并创建ui
  120. var roomSplit = body.GetRoomInfo();
  121. if (roomSplit != null)
  122. {
  123. window.CloseWindow();
  124. onCreateRoom(roomSplit);
  125. }
  126. }),
  127. new EditorWindowPanel.ButtonData("取消", () =>
  128. {
  129. window.CloseWindow();
  130. })
  131. );
  132. }
  133.  
  134. /// <summary>
  135. /// 打开创建房间预设弹窗
  136. /// </summary>
  137. /// <param name="list">当前房间已经包含的所有预设列表</param>
  138. /// <param name="onCreatePreinstall">创建成功时的回调</param>
  139. public static void ShowCreatePreinstall(List<RoomPreinstall> list, Action<RoomPreinstall> onCreatePreinstall)
  140. {
  141. var window = UiManager.Open_EditorWindow();
  142. window.SetWindowTitle("创建房间预设");
  143. window.SetWindowSize(new Vector2I(700, 600));
  144. var body = window.OpenBody<MapEditorCreatePreinstallPanel>(UiManager.UiName.MapEditorCreatePreinstall);
  145. window.SetButtonList(
  146. new EditorWindowPanel.ButtonData("确定", () =>
  147. {
  148. var roomPreinstall = body.GetRoomPreinstall(list);
  149. if (roomPreinstall != null)
  150. {
  151. window.CloseWindow();
  152. onCreatePreinstall(roomPreinstall);
  153. }
  154. }),
  155. new EditorWindowPanel.ButtonData("取消", () =>
  156. {
  157. window.CloseWindow();
  158. })
  159. );
  160. }
  161.  
  162. /// <summary>
  163. /// 打开创建标记页面
  164. /// </summary>
  165. /// <param name="onCreateMarkInfo">创建标记回调</param>
  166. /// <param name="parentUi">所属父级Ui</param>
  167. public static void ShowCreateMark(Action<MarkInfo> onCreateMarkInfo, UiBase parentUi = null)
  168. {
  169. var window = CreateWindowInstance(parentUi);
  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.  
  190. /// <summary>
  191. /// 打开编辑标记页面
  192. /// </summary>
  193. /// <param name="data">标记数据对象</param>
  194. /// <param name="onSaveMarkInfo">保存时回调</param>
  195. /// <param name="parentUi">所属父级Ui</param>
  196. public static void ShowEditMark(MarkInfo data, Action<MarkInfo> onSaveMarkInfo, UiBase parentUi = null)
  197. {
  198. var window = CreateWindowInstance(parentUi);
  199. window.SetWindowTitle("编辑标记");
  200. window.SetWindowSize(new Vector2I(1400, 900));
  201. var body = window.OpenBody<MapEditorCreateMarkPanel>(UiManager.UiName.MapEditorCreateMark);
  202. body.InitData(data);
  203. window.SetButtonList(
  204. new EditorWindowPanel.ButtonData("确定", () =>
  205. {
  206. var markInfo = body.GetMarkInfo();
  207. if (markInfo != null)
  208. {
  209. window.CloseWindow();
  210. onSaveMarkInfo(markInfo);
  211. }
  212. }),
  213. new EditorWindowPanel.ButtonData("取消", () =>
  214. {
  215. window.CloseWindow();
  216. })
  217. );
  218. }
  219.  
  220. /// <summary>
  221. /// 打开选中的物体
  222. /// </summary>
  223. /// <param name="findType">查找的类型, 如果为 none, 则查找所有类型数据</param>
  224. /// <param name="onSelectObject">选中物体时回调</param>
  225. /// <param name="parentUi">所属父级Ui</param>
  226. public static void ShowSelectObject(ActivityType findType, Action<ExcelConfig.ActivityObject> onSelectObject, UiBase parentUi = null)
  227. {
  228. var window = CreateWindowInstance(parentUi);
  229. window.S_Window.Instance.Size = new Vector2I(1000, 700);
  230. window.SetWindowTitle("选择物体");
  231. var body = window.OpenBody<MapEditorSelectObjectPanel>(UiManager.UiName.MapEditorSelectObject);
  232. //设置显示的物体类型
  233. body.SetShowType(findType);
  234. window.SetButtonList(
  235. new EditorWindowPanel.ButtonData("确定", () =>
  236. {
  237. var selectObject = body.GetSelectData();
  238. if (selectObject == null)
  239. {
  240. ShowTips("提示", "您未选择任何物体");
  241. }
  242. else
  243. {
  244. window.CloseWindow();
  245. onSelectObject(selectObject);
  246. }
  247. }),
  248. new EditorWindowPanel.ButtonData("取消", () =>
  249. {
  250. window.CloseWindow();
  251. })
  252. );
  253. //绑定双击选中物体事件
  254. body.SelectObjectEvent += selectObject =>
  255. {
  256. window.CloseWindow();
  257. onSelectObject(selectObject);
  258. };
  259. }
  260.  
  261. private static EditorWindowPanel CreateWindowInstance(UiBase parentUi)
  262. {
  263. if (parentUi != null)
  264. {
  265. return parentUi.OpenNestedUi<EditorWindowPanel>(UiManager.UiName.EditorWindow);
  266. }
  267.  
  268. return UiManager.Open_EditorWindow();
  269. }
  270. }