Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorWindowManager.cs
  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.UiNames.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(false);
  60. onClose(true);
  61. }),
  62. new EditorWindowPanel.ButtonData("取消", () =>
  63. {
  64. window.CloseWindow();
  65. })
  66. );
  67. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiNames.EditorTips);
  68. body.SetMessage(message);
  69. }
  70. /// <summary>
  71. /// 弹出询问窗口, 包含3个按钮
  72. /// </summary>
  73. /// <param name="title">标题</param>
  74. /// <param name="message">显示内容</param>
  75. /// <param name="btn1">按钮1文本</param>
  76. /// <param name="btn2">按钮2文本</param>
  77. /// <param name="btn3">按钮3文本</param>
  78. /// <param name="onClose">关闭时的回调, 参数如果为点击按钮的索引表示点击了确定, -1表示点击了x</param>
  79. /// <param name="parentUi">所属父级Ui</param>
  80. public static void ShowConfirm(string title, string message, string btn1, string btn2, string btn3, Action<int> onClose, UiBase parentUi = null)
  81. {
  82. var window = CreateWindowInstance(parentUi);
  83. window.SetWindowTitle(title);
  84. window.CloseEvent += () =>
  85. {
  86. onClose(-1);
  87. };
  88. window.SetButtonList(
  89. new EditorWindowPanel.ButtonData(btn1, () =>
  90. {
  91. window.CloseWindow(false);
  92. onClose(0);
  93. }),
  94. new EditorWindowPanel.ButtonData(btn2, () =>
  95. {
  96. window.CloseWindow(false);
  97. onClose(1);
  98. }),
  99. new EditorWindowPanel.ButtonData(btn3, () =>
  100. {
  101. window.CloseWindow(false);
  102. onClose(2);
  103. })
  104. );
  105. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiNames.EditorTips);
  106. body.SetMessage(message);
  107. }
  108.  
  109. /// <summary>
  110. /// 打开创建地牢组弹窗
  111. /// </summary>
  112. /// <param name="onCreateGroup">创建成功时回调</param>
  113. /// <param name="parentUi">所属父级Ui</param>
  114. public static void ShowCreateGroup(Action<DungeonRoomGroup> onCreateGroup, UiBase parentUi = null)
  115. {
  116. var window = CreateWindowInstance(parentUi);
  117. window.SetWindowTitle("创建地牢组");
  118. window.SetWindowSize(new Vector2I(700, 500));
  119. var body = window.OpenBody<MapEditorCreateGroupPanel>(UiManager.UiNames.MapEditorCreateGroup);
  120. window.SetButtonList(
  121. new EditorWindowPanel.ButtonData("确定", () =>
  122. {
  123. //获取填写的数据, 并创建ui
  124. var groupInfo = body.GetGroupInfo();
  125. if (groupInfo != null)
  126. {
  127. window.CloseWindow();
  128. onCreateGroup(groupInfo);
  129. }
  130. }),
  131. new EditorWindowPanel.ButtonData("取消", () =>
  132. {
  133. window.CloseWindow();
  134. })
  135. );
  136. }
  137. /// <summary>
  138. /// 打开创建地牢房间弹窗
  139. /// </summary>
  140. /// <param name="groupName">选择的组名称, 如果不需要有选择的项, 则传 null</param>
  141. /// <param name="roomType">选择的房间类型</param>
  142. /// <param name="onCreateRoom">创建成功时回调</param>
  143. public static void ShowCreateRoom(string groupName, int roomType, Action<DungeonRoomSplit> onCreateRoom)
  144. {
  145. var window = UiManager.Open_EditorWindow();
  146. window.SetWindowTitle("创建地牢房间");
  147. window.SetWindowSize(new Vector2I(700, 600));
  148. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiNames.MapEditorCreateRoom);
  149. if (groupName != null)
  150. {
  151. body.SetSelectGroup(groupName);
  152. }
  153. body.SetSelectType(roomType);
  154. window.SetButtonList(
  155. new EditorWindowPanel.ButtonData("确定", () =>
  156. {
  157. //获取填写的数据, 并创建ui
  158. var roomSplit = body.GetRoomInfo();
  159. if (roomSplit != null)
  160. {
  161. window.CloseWindow();
  162. onCreateRoom(roomSplit);
  163. }
  164. }),
  165. new EditorWindowPanel.ButtonData("取消", () =>
  166. {
  167. window.CloseWindow();
  168. })
  169. );
  170. }
  171.  
  172. /// <summary>
  173. /// 编辑地牢房间
  174. /// </summary>
  175. /// <param name="roomSplit">原数据</param>
  176. /// <param name="onSave">保存时回调</param>
  177. public static void ShowEditRoom(DungeonRoomSplit roomSplit, Action<DungeonRoomSplit> onSave)
  178. {
  179. var window = UiManager.Open_EditorWindow();
  180. window.SetWindowTitle("编辑地牢房间");
  181. window.SetWindowSize(new Vector2I(700, 600));
  182. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiNames.MapEditorCreateRoom);
  183. body.InitEditData(roomSplit);
  184. window.SetButtonList(
  185. new EditorWindowPanel.ButtonData("确定", () =>
  186. {
  187. //获取填写的数据, 并创建ui
  188. var saveData = body.GetRoomInfo();
  189. if (saveData != null)
  190. {
  191. window.CloseWindow();
  192. onSave(saveData);
  193. }
  194. }),
  195. new EditorWindowPanel.ButtonData("取消", () =>
  196. {
  197. window.CloseWindow();
  198. })
  199. );
  200. }
  201.  
  202. /// <summary>
  203. /// 打开创建房间预设弹窗
  204. /// </summary>
  205. /// <param name="roomType">当前房间的类型</param>
  206. /// <param name="list">当前房间已经包含的所有预设列表</param>
  207. /// <param name="onCreatePreinstall">创建成功时的回调</param>
  208. public static void ShowCreatePreinstall(DungeonRoomType roomType, List<RoomPreinstallInfo> list, Action<RoomPreinstallInfo> onCreatePreinstall)
  209. {
  210. var window = UiManager.Open_EditorWindow();
  211. window.SetWindowTitle("创建房间预设");
  212. window.SetWindowSize(new Vector2I(700, 600));
  213. var body = window.OpenBody<MapEditorCreatePreinstallPanel>(UiManager.UiNames.MapEditorCreatePreinstall);
  214. body.InitData(roomType);
  215. window.SetButtonList(
  216. new EditorWindowPanel.ButtonData("确定", () =>
  217. {
  218. var roomPreinstall = body.GetRoomPreinstall(list);
  219. if (roomPreinstall != null)
  220. {
  221. window.CloseWindow();
  222. onCreatePreinstall(roomPreinstall);
  223. }
  224. }),
  225. new EditorWindowPanel.ButtonData("取消", () =>
  226. {
  227. window.CloseWindow();
  228. })
  229. );
  230. }
  231.  
  232. /// <summary>
  233. /// 打开编辑房间预设弹窗
  234. /// </summary>
  235. /// <param name="roomType">当前房间的类型</param>
  236. /// <param name="list">当前房间已经包含的所有预设列表</param>
  237. /// <param name="preinstallInfo">需要编辑的预设数据</param>
  238. /// <param name="onSavePreinstall">保存时的回调</param>
  239. public static void ShowEditPreinstall(DungeonRoomType roomType, List<RoomPreinstallInfo> list, RoomPreinstallInfo preinstallInfo, Action<RoomPreinstallInfo> onSavePreinstall)
  240. {
  241. var window = UiManager.Open_EditorWindow();
  242. window.SetWindowTitle("创建房间预设");
  243. window.SetWindowSize(new Vector2I(700, 600));
  244. var body = window.OpenBody<MapEditorCreatePreinstallPanel>(UiManager.UiNames.MapEditorCreatePreinstall);
  245. body.InitData(roomType, preinstallInfo);
  246. window.SetButtonList(
  247. new EditorWindowPanel.ButtonData("确定", () =>
  248. {
  249. var roomPreinstall = body.GetRoomPreinstall(list);
  250. if (roomPreinstall != null)
  251. {
  252. window.CloseWindow();
  253. onSavePreinstall(roomPreinstall);
  254. }
  255. }),
  256. new EditorWindowPanel.ButtonData("取消", () =>
  257. {
  258. window.CloseWindow();
  259. })
  260. );
  261. }
  262.  
  263. /// <summary>
  264. /// 打开创建标记页面
  265. /// </summary>
  266. /// <param name="position">初始坐标</param>
  267. /// <param name="preloading">是否提前加载</param>
  268. /// <param name="onCreateMarkInfo">创建标记回调</param>
  269. /// <param name="parentUi">所属父级Ui</param>
  270. public static void ShowCreateMark(Vector2I position, bool preloading, Action<MarkInfo> onCreateMarkInfo , UiBase parentUi = null)
  271. {
  272. var window = CreateWindowInstance(parentUi);
  273. window.SetWindowTitle("创建标记");
  274. window.SetWindowSize(new Vector2I(1400, 900));
  275. var body = window.OpenBody<MapEditorCreateMarkPanel>(UiManager.UiNames.MapEditorCreateMark);
  276. body.InitData(position, preloading);
  277. window.SetButtonList(
  278. new EditorWindowPanel.ButtonData("确定", () =>
  279. {
  280. var markInfo = body.GetMarkInfo();
  281. if (markInfo != null)
  282. {
  283. window.CloseWindow();
  284. onCreateMarkInfo(markInfo);
  285. }
  286. }),
  287. new EditorWindowPanel.ButtonData("取消", () =>
  288. {
  289. window.CloseWindow();
  290. })
  291. );
  292. }
  293.  
  294. /// <summary>
  295. /// 打开编辑标记页面
  296. /// </summary>
  297. /// <param name="data">标记数据对象</param>
  298. /// <param name="preloading">是否提前加载</param>
  299. /// <param name="onSaveMarkInfo">保存时回调</param>
  300. /// <param name="parentUi">所属父级Ui</param>
  301. public static void ShowEditMark(MarkInfo data, bool preloading, Action<MarkInfo> onSaveMarkInfo, UiBase parentUi = null)
  302. {
  303. var window = CreateWindowInstance(parentUi);
  304. window.SetWindowTitle("编辑标记");
  305. window.SetWindowSize(new Vector2I(1400, 900));
  306. var body = window.OpenBody<MapEditorCreateMarkPanel>(UiManager.UiNames.MapEditorCreateMark);
  307. body.InitData(data, preloading);
  308. window.SetButtonList(
  309. new EditorWindowPanel.ButtonData("确定", () =>
  310. {
  311. var markInfo = body.GetMarkInfo();
  312. if (markInfo != null)
  313. {
  314. window.CloseWindow();
  315. onSaveMarkInfo(markInfo);
  316. }
  317. }),
  318. new EditorWindowPanel.ButtonData("取消", () =>
  319. {
  320. window.CloseWindow();
  321. })
  322. );
  323. }
  324.  
  325. /// <summary>
  326. /// 打开选中的物体
  327. /// </summary>
  328. /// <param name="findType">查找的类型, 如果为 none, 则查找所有类型数据</param>
  329. /// <param name="onSelectObject">选中物体时回调</param>
  330. /// <param name="parentUi">所属父级Ui</param>
  331. public static void ShowSelectObject(ActivityType findType, Action<ExcelConfig.ActivityBase> onSelectObject, UiBase parentUi = null)
  332. {
  333. var window = CreateWindowInstance(parentUi);
  334. window.S_Window.Instance.Size = new Vector2I(1000, 700);
  335. window.SetWindowTitle("选择物体");
  336. var body = window.OpenBody<MapEditorSelectObjectPanel>(UiManager.UiNames.MapEditorSelectObject);
  337. //设置显示的物体类型
  338. body.SetShowType(findType);
  339. window.SetButtonList(
  340. new EditorWindowPanel.ButtonData("确定", () =>
  341. {
  342. var selectObject = body.GetSelectData();
  343. if (selectObject == null)
  344. {
  345. ShowTips("提示", "您未选择任何物体");
  346. }
  347. else
  348. {
  349. window.CloseWindow();
  350. onSelectObject(selectObject);
  351. }
  352. }),
  353. new EditorWindowPanel.ButtonData("取消", () =>
  354. {
  355. window.CloseWindow();
  356. })
  357. );
  358. //绑定双击选中物体事件
  359. body.SelectObjectEvent += selectObject =>
  360. {
  361. window.CloseWindow();
  362. onSelectObject(selectObject);
  363. };
  364. }
  365.  
  366. private static EditorWindowPanel CreateWindowInstance(UiBase parentUi)
  367. {
  368. if (parentUi != null)
  369. {
  370. return parentUi.OpenNestedUi<EditorWindowPanel>(UiManager.UiNames.EditorWindow);
  371. }
  372.  
  373. return UiManager.Open_EditorWindow();
  374. }
  375. }