Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / manager / EditorWindowManager.cs
@小李xl 小李xl on 7 Jan 2024 24 KB TileSet管理器开发完成
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using Config;
  6. using Godot;
  7. using UI.EditorColorPicker;
  8. using UI.EditorImportCombination;
  9. using UI.EditorInfo;
  10. using UI.EditorInput;
  11. using UI.EditorTips;
  12. using UI.EditorWindow;
  13. using UI.MapEditorCreateMark;
  14. using UI.MapEditorCreatePreinstall;
  15. using UI.MapEditorCreateRoom;
  16. using UI.MapEditorSelectObject;
  17.  
  18. /// <summary>
  19. /// 通用弹窗管理类
  20. /// </summary>
  21. public static class EditorWindowManager
  22. {
  23. /// <summary>
  24. /// 打开颜色选择器弹窗
  25. /// </summary>
  26. /// <param name="position">位置</param>
  27. /// <param name="color">当前选中的颜色</param>
  28. /// <param name="onChangeColor">颜色改变时回调</param>
  29. /// <param name="onClose">关闭时回调</param>
  30. public static void ShowColorPicker(Vector2 position, Color color, ColorPicker.ColorChangedEventHandler onChangeColor, Action onClose = null)
  31. {
  32. var window = CreateWindowInstance();
  33. var colorPickerPanel = window.OpenBody<EditorColorPickerPanel>(UiManager.UiNames.EditorColorPicker);
  34. window.SetWindowTitle("颜色选择器");
  35. window.SetWindowSize(new Vector2I(298, 720));
  36. window.S_Window.Instance.Position = new Vector2I((int)(position.X - 298f * 0.5f), (int)(position.Y + 80));
  37. colorPickerPanel.S_ColorPicker.Instance.Color = color;
  38. colorPickerPanel.S_ColorPicker.Instance.ColorChanged += onChangeColor;
  39. if (onClose != null)
  40. {
  41. window.CloseEvent += onClose;
  42. }
  43. }
  44.  
  45. /// <summary>
  46. /// 显示打开文件窗口
  47. /// </summary>
  48. /// <param name="filters">过滤文件后缀</param>
  49. /// <param name="onClose">关闭回调, 回调参数为选择的文件路径, 如果选择文件, 则回调参数为null</param>
  50. public static void ShowOpenFileDialog(string[] filters, Action<string> onClose)
  51. {
  52. //UiManager.Open_EditorFileDialog();
  53. var fileDialog = new FileDialog();
  54. fileDialog.UseNativeDialog = true;
  55. fileDialog.ModeOverridesTitle = false;
  56. fileDialog.FileMode = FileDialog.FileModeEnum.OpenFile;
  57. fileDialog.Access = FileDialog.AccessEnum.Filesystem;
  58. fileDialog.Filters = filters;
  59. fileDialog.FileSelected += (path) =>
  60. {
  61. onClose(path);
  62. fileDialog.QueueFree();
  63. };
  64. fileDialog.Canceled += () =>
  65. {
  66. onClose(null);
  67. fileDialog.QueueFree();
  68. };
  69. fileDialog.Confirmed += () =>
  70. {
  71. onClose(null);
  72. fileDialog.QueueFree();
  73. };
  74. UiManager.GetUiLayer(UiLayer.Pop).AddChild(fileDialog);
  75. fileDialog.Popup();
  76. }
  77. /// <summary>
  78. /// 弹出通用提示面板
  79. /// </summary>
  80. /// <param name="title">标题</param>
  81. /// <param name="message">显示内容</param>
  82. /// <param name="onClose">关闭时的回调</param>
  83. /// <param name="parentUi">所属父级Ui</param>
  84. public static void ShowTips(string title, string message, Action onClose = null, UiBase parentUi = null)
  85. {
  86. var window = CreateWindowInstance(parentUi);
  87. window.SetWindowTitle(title);
  88. if (onClose != null)
  89. {
  90. window.CloseEvent += onClose;
  91. }
  92. window.SetButtonList(
  93. new EditorWindowPanel.ButtonData("确定", () =>
  94. {
  95. window.CloseWindow();
  96. })
  97. );
  98. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiNames.EditorTips);
  99. body.SetMessage(message);
  100. }
  101.  
  102. /// <summary>
  103. /// 弹出询问窗口
  104. /// </summary>
  105. /// <param name="title">标题</param>
  106. /// <param name="message">显示内容</param>
  107. /// <param name="onClose">关闭时的回调, 参数如果为 true 表示点击了确定</param>
  108. /// <param name="parentUi">所属父级Ui</param>
  109. public static void ShowConfirm(string title, string message, Action<bool> onClose, UiBase parentUi = null)
  110. {
  111. var window = CreateWindowInstance(parentUi);
  112. window.SetWindowTitle(title);
  113. window.CloseEvent += () =>
  114. {
  115. onClose(false);
  116. };
  117. window.SetButtonList(
  118. new EditorWindowPanel.ButtonData("确定", () =>
  119. {
  120. window.CloseWindow(false);
  121. onClose(true);
  122. }),
  123. new EditorWindowPanel.ButtonData("取消", () =>
  124. {
  125. window.CloseWindow();
  126. })
  127. );
  128. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiNames.EditorTips);
  129. body.SetMessage(message);
  130. }
  131.  
  132. /// <summary>
  133. /// 弹出通用输入框
  134. /// </summary>
  135. /// <param name="title">标题</param>
  136. /// <param name="message">显示内容</param>
  137. /// <param name="value">输入框默认值</param>
  138. /// <param name="onClose">关闭时回调,参数1为输入框内容,参数2为 true 表示点击了确定,如果点击了确定但是回调函数返回 false 则不会关闭窗口</param>
  139. /// <param name="parentUi">所属父级Ui</param>
  140. public static void ShowInput(string title, string message, string value, Func<string, bool, bool> onClose, UiBase parentUi = null)
  141. {
  142. var window = CreateWindowInstance(parentUi);
  143. window.SetWindowTitle(title);
  144. window.SetWindowSize(new Vector2I(450, 230));
  145. var body = window.OpenBody<EditorInputPanel>(UiManager.UiNames.EditorInput);
  146. window.CloseEvent += () =>
  147. {
  148. onClose(body.GetValue(), false);
  149. };
  150. window.SetButtonList(
  151. new EditorWindowPanel.ButtonData("确定", () =>
  152. {
  153. if (onClose(body.GetValue(), true))
  154. {
  155. window.CloseWindow(false);
  156. }
  157. }),
  158. new EditorWindowPanel.ButtonData("取消", () =>
  159. {
  160. window.CloseWindow();
  161. })
  162. );
  163. body.Init(message, value);
  164. }
  165. /// <summary>
  166. /// 弹出询问窗口, 包含3个按钮
  167. /// </summary>
  168. /// <param name="title">标题</param>
  169. /// <param name="message">显示内容</param>
  170. /// <param name="btn1">按钮1文本</param>
  171. /// <param name="btn2">按钮2文本</param>
  172. /// <param name="btn3">按钮3文本</param>
  173. /// <param name="onClose">关闭时的回调, 参数如果为点击按钮的索引表示点击了确定, -1表示点击了x</param>
  174. /// <param name="parentUi">所属父级Ui</param>
  175. public static void ShowConfirm(string title, string message, string btn1, string btn2, string btn3, Action<int> onClose, UiBase parentUi = null)
  176. {
  177. var window = CreateWindowInstance(parentUi);
  178. window.SetWindowTitle(title);
  179. window.SetWindowSize(new Vector2I(550, 350));
  180. window.CloseEvent += () =>
  181. {
  182. onClose(-1);
  183. };
  184. window.SetButtonList(
  185. new EditorWindowPanel.ButtonData(btn1, () =>
  186. {
  187. window.CloseWindow(false);
  188. onClose(0);
  189. }),
  190. new EditorWindowPanel.ButtonData(btn2, () =>
  191. {
  192. window.CloseWindow(false);
  193. onClose(1);
  194. }),
  195. new EditorWindowPanel.ButtonData(btn3, () =>
  196. {
  197. window.CloseWindow(false);
  198. onClose(2);
  199. })
  200. );
  201. var body = window.OpenBody<EditorTipsPanel>(UiManager.UiNames.EditorTips);
  202. body.SetMessage(message);
  203. }
  204.  
  205. /// <summary>
  206. /// 打开创建地牢组弹窗
  207. /// </summary>
  208. /// <param name="onCreateGroup">创建成功时回调</param>
  209. /// <param name="parentUi">所属父级Ui</param>
  210. public static void ShowCreateGroup(Action<DungeonRoomGroup> onCreateGroup, UiBase parentUi = null)
  211. {
  212. var window = CreateWindowInstance(parentUi);
  213. window.SetWindowTitle("创建地牢组");
  214. window.SetWindowSize(new Vector2I(700, 500));
  215. var body = window.OpenBody<EditorInfoPanel>(UiManager.UiNames.EditorInfo);
  216. window.SetButtonList(
  217. new EditorWindowPanel.ButtonData("确定", () =>
  218. {
  219. //获取填写的数据, 并创建ui
  220. var infoData = body.GetInfoData();
  221. //组名
  222. var groupName = infoData.Name;
  223. //检查名称是否合规
  224. if (string.IsNullOrEmpty(groupName))
  225. {
  226. ShowTips("错误", "组名称不能为空!");
  227. return;
  228. }
  229. //验证是否有同名组
  230. var path = MapProjectManager.CustomMapPath + groupName;
  231. var dir = new DirectoryInfo(path);
  232. if (dir.Exists && dir.GetDirectories().Length > 0)
  233. {
  234. ShowTips("错误", $"已经有相同路径的房间了!");
  235. return;
  236. }
  237.  
  238. var group = new DungeonRoomGroup();
  239. group.GroupName = groupName;
  240. group.Remark = infoData.Remark;
  241. window.CloseWindow();
  242. onCreateGroup(group);
  243. }),
  244. new EditorWindowPanel.ButtonData("取消", () =>
  245. {
  246. window.CloseWindow();
  247. })
  248. );
  249. }
  250. /// <summary>
  251. /// 打开创建地牢房间弹窗
  252. /// </summary>
  253. /// <param name="groupName">选择的组名称, 如果不需要有选择的项, 则传 null</param>
  254. /// <param name="roomType">选择的房间类型</param>
  255. /// <param name="onCreateRoom">创建成功时回调</param>
  256. public static void ShowCreateRoom(string groupName, int roomType, Action<DungeonRoomSplit> onCreateRoom)
  257. {
  258. var window = UiManager.Open_EditorWindow();
  259. window.SetWindowTitle("创建地牢房间");
  260. window.SetWindowSize(new Vector2I(700, 600));
  261. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiNames.MapEditorCreateRoom);
  262. if (groupName != null)
  263. {
  264. body.SetSelectGroup(groupName);
  265. }
  266. body.SetSelectType(roomType);
  267. window.SetButtonList(
  268. new EditorWindowPanel.ButtonData("确定", () =>
  269. {
  270. //获取填写的数据, 并创建ui
  271. var roomSplit = body.GetRoomInfo();
  272. if (roomSplit != null)
  273. {
  274. window.CloseWindow();
  275. onCreateRoom(roomSplit);
  276. }
  277. }),
  278. new EditorWindowPanel.ButtonData("取消", () =>
  279. {
  280. window.CloseWindow();
  281. })
  282. );
  283. }
  284.  
  285. /// <summary>
  286. /// 编辑地牢房间
  287. /// </summary>
  288. /// <param name="roomSplit">原数据</param>
  289. /// <param name="onSave">保存时回调</param>
  290. public static void ShowEditRoom(DungeonRoomSplit roomSplit, Action<DungeonRoomSplit> onSave)
  291. {
  292. var window = UiManager.Open_EditorWindow();
  293. window.SetWindowTitle("编辑地牢房间");
  294. window.SetWindowSize(new Vector2I(700, 600));
  295. var body = window.OpenBody<MapEditorCreateRoomPanel>(UiManager.UiNames.MapEditorCreateRoom);
  296. body.InitEditData(roomSplit);
  297. window.SetButtonList(
  298. new EditorWindowPanel.ButtonData("确定", () =>
  299. {
  300. //获取填写的数据, 并创建ui
  301. var saveData = body.GetRoomInfo();
  302. if (saveData != null)
  303. {
  304. window.CloseWindow();
  305. onSave(saveData);
  306. }
  307. }),
  308. new EditorWindowPanel.ButtonData("取消", () =>
  309. {
  310. window.CloseWindow();
  311. })
  312. );
  313. }
  314.  
  315. /// <summary>
  316. /// 打开创建房间预设弹窗
  317. /// </summary>
  318. /// <param name="roomType">当前房间的类型</param>
  319. /// <param name="list">当前房间已经包含的所有预设列表</param>
  320. /// <param name="onCreatePreinstall">创建成功时的回调</param>
  321. public static void ShowCreatePreinstall(DungeonRoomType roomType, List<RoomPreinstallInfo> list, Action<RoomPreinstallInfo> onCreatePreinstall)
  322. {
  323. var window = UiManager.Open_EditorWindow();
  324. window.SetWindowTitle("创建房间预设");
  325. window.SetWindowSize(new Vector2I(700, 600));
  326. var body = window.OpenBody<MapEditorCreatePreinstallPanel>(UiManager.UiNames.MapEditorCreatePreinstall);
  327. body.InitData(roomType);
  328. window.SetButtonList(
  329. new EditorWindowPanel.ButtonData("确定", () =>
  330. {
  331. var roomPreinstall = body.GetRoomPreinstall(list);
  332. if (roomPreinstall != null)
  333. {
  334. window.CloseWindow();
  335. onCreatePreinstall(roomPreinstall);
  336. }
  337. }),
  338. new EditorWindowPanel.ButtonData("取消", () =>
  339. {
  340. window.CloseWindow();
  341. })
  342. );
  343. }
  344.  
  345. /// <summary>
  346. /// 打开编辑房间预设弹窗
  347. /// </summary>
  348. /// <param name="roomType">当前房间的类型</param>
  349. /// <param name="list">当前房间已经包含的所有预设列表</param>
  350. /// <param name="preinstallInfo">需要编辑的预设数据</param>
  351. /// <param name="onSavePreinstall">保存时的回调</param>
  352. public static void ShowEditPreinstall(DungeonRoomType roomType, List<RoomPreinstallInfo> list, RoomPreinstallInfo preinstallInfo, Action<RoomPreinstallInfo> onSavePreinstall)
  353. {
  354. var window = UiManager.Open_EditorWindow();
  355. window.SetWindowTitle("创建房间预设");
  356. window.SetWindowSize(new Vector2I(700, 600));
  357. var body = window.OpenBody<MapEditorCreatePreinstallPanel>(UiManager.UiNames.MapEditorCreatePreinstall);
  358. body.InitData(roomType, preinstallInfo);
  359. window.SetButtonList(
  360. new EditorWindowPanel.ButtonData("确定", () =>
  361. {
  362. var roomPreinstall = body.GetRoomPreinstall(list);
  363. if (roomPreinstall != null)
  364. {
  365. window.CloseWindow();
  366. onSavePreinstall(roomPreinstall);
  367. }
  368. }),
  369. new EditorWindowPanel.ButtonData("取消", () =>
  370. {
  371. window.CloseWindow();
  372. })
  373. );
  374. }
  375.  
  376. /// <summary>
  377. /// 打开创建标记页面
  378. /// </summary>
  379. /// <param name="position">初始坐标</param>
  380. /// <param name="preloading">是否提前加载</param>
  381. /// <param name="onCreateMarkInfo">创建标记回调</param>
  382. /// <param name="parentUi">所属父级Ui</param>
  383. public static void ShowCreateMark(Vector2I position, bool preloading, Action<MarkInfo> onCreateMarkInfo , UiBase parentUi = null)
  384. {
  385. var window = CreateWindowInstance(parentUi);
  386. window.SetWindowTitle("创建标记");
  387. window.SetWindowSize(new Vector2I(1400, 900));
  388. var body = window.OpenBody<MapEditorCreateMarkPanel>(UiManager.UiNames.MapEditorCreateMark);
  389. body.InitData(position, preloading);
  390. window.SetButtonList(
  391. new EditorWindowPanel.ButtonData("确定", () =>
  392. {
  393. var markInfo = body.GetMarkInfo();
  394. if (markInfo != null)
  395. {
  396. window.CloseWindow();
  397. onCreateMarkInfo(markInfo);
  398. }
  399. }),
  400. new EditorWindowPanel.ButtonData("取消", () =>
  401. {
  402. window.CloseWindow();
  403. })
  404. );
  405. }
  406.  
  407. /// <summary>
  408. /// 打开编辑标记页面
  409. /// </summary>
  410. /// <param name="data">标记数据对象</param>
  411. /// <param name="preloading">是否提前加载</param>
  412. /// <param name="onSaveMarkInfo">保存时回调</param>
  413. /// <param name="parentUi">所属父级Ui</param>
  414. public static void ShowEditMark(MarkInfo data, bool preloading, Action<MarkInfo> onSaveMarkInfo, UiBase parentUi = null)
  415. {
  416. var window = CreateWindowInstance(parentUi);
  417. window.SetWindowTitle("编辑标记");
  418. window.SetWindowSize(new Vector2I(1400, 900));
  419. var body = window.OpenBody<MapEditorCreateMarkPanel>(UiManager.UiNames.MapEditorCreateMark);
  420. body.InitData(data, preloading);
  421. window.SetButtonList(
  422. new EditorWindowPanel.ButtonData("确定", () =>
  423. {
  424. var markInfo = body.GetMarkInfo();
  425. if (markInfo != null)
  426. {
  427. window.CloseWindow();
  428. onSaveMarkInfo(markInfo);
  429. }
  430. }),
  431. new EditorWindowPanel.ButtonData("取消", () =>
  432. {
  433. window.CloseWindow();
  434. })
  435. );
  436. }
  437.  
  438. /// <summary>
  439. /// 打开选中的物体
  440. /// </summary>
  441. /// <param name="findType">查找的类型, 如果为 none, 则查找所有类型数据</param>
  442. /// <param name="onSelectObject">选中物体时回调</param>
  443. /// <param name="parentUi">所属父级Ui</param>
  444. public static void ShowSelectObject(ActivityType findType, Action<ExcelConfig.ActivityBase> onSelectObject, UiBase parentUi = null)
  445. {
  446. var window = CreateWindowInstance(parentUi);
  447. window.S_Window.Instance.Size = new Vector2I(1000, 700);
  448. window.SetWindowTitle("选择物体");
  449. var body = window.OpenBody<MapEditorSelectObjectPanel>(UiManager.UiNames.MapEditorSelectObject);
  450. //设置显示的物体类型
  451. body.SetShowType(findType);
  452. window.SetButtonList(
  453. new EditorWindowPanel.ButtonData("确定", () =>
  454. {
  455. var selectObject = body.GetSelectData();
  456. if (selectObject == null)
  457. {
  458. ShowTips("提示", "您未选择任何物体");
  459. }
  460. else
  461. {
  462. window.CloseWindow();
  463. onSelectObject(selectObject);
  464. }
  465. }),
  466. new EditorWindowPanel.ButtonData("取消", () =>
  467. {
  468. window.CloseWindow();
  469. })
  470. );
  471. //绑定双击选中物体事件
  472. body.SelectObjectEvent += selectObject =>
  473. {
  474. window.CloseWindow();
  475. onSelectObject(selectObject);
  476. };
  477. }
  478.  
  479. /// <summary>
  480. /// 显示导入组合确认弹窗
  481. /// </summary>
  482. /// <param name="showName">组合名称</param>
  483. /// <param name="color">预览纹理背景颜色</param>
  484. /// <param name="texture">显示纹理</param>
  485. /// <param name="onAccept">确定时回调</param>
  486. /// <param name="onCancel">取消时回调</param>
  487. /// <param name="parentUi">所属父级Ui</param>
  488. public static void ShowImportCombination(string showName, Color color, Texture2D texture, Action<string> onAccept, Action onCancel, UiBase parentUi = null)
  489. {
  490. var window = CreateWindowInstance(parentUi);
  491. window.S_Window.Instance.Size = new Vector2I(750, 650);
  492. window.SetWindowTitle("导入组合");
  493. var body = window.OpenBody<EditorImportCombinationPanel>(UiManager.UiNames.EditorImportCombination);
  494. body.InitData(showName, color, texture);
  495. var accept = false;
  496. if (onCancel != null)
  497. {
  498. window.CloseEvent += () =>
  499. {
  500. if (!accept) onCancel();
  501. };
  502. }
  503.  
  504. window.SetButtonList(
  505. new EditorWindowPanel.ButtonData("确定", () =>
  506. {
  507. accept = true;
  508. var selectObject = body.GetName();
  509. window.CloseWindow();
  510. onAccept(selectObject);
  511. }),
  512. new EditorWindowPanel.ButtonData("取消", () =>
  513. {
  514. window.CloseWindow();
  515. })
  516. );
  517. }
  518. /// <summary>
  519. /// 显示编辑组合弹窗
  520. /// </summary>
  521. /// <param name="showName">组合名称</param>
  522. /// <param name="color">预览纹理背景颜色</param>
  523. /// <param name="texture">显示纹理</param>
  524. /// <param name="onAccept">确定时回调</param>
  525. /// <param name="onDelete">删除时回调</param>
  526. /// <param name="parentUi">所属父级Ui</param>
  527. public static void ShowEditCombination(string showName, Color color, Texture2D texture, Action<string> onAccept, Action onDelete, UiBase parentUi = null)
  528. {
  529. var window = CreateWindowInstance(parentUi);
  530. window.S_Window.Instance.Size = new Vector2I(750, 650);
  531. window.SetWindowTitle("编辑组合");
  532. var body = window.OpenBody<EditorImportCombinationPanel>(UiManager.UiNames.EditorImportCombination);
  533. body.InitData(showName, color, texture);
  534. window.SetButtonList(
  535. new EditorWindowPanel.ButtonData("删除", () =>
  536. {
  537. ShowConfirm("提示", "您确定要删除该组合吗,该操作不能取消!", (flag) =>
  538. {
  539. if (flag)
  540. {
  541. window.CloseWindow();
  542. onDelete();
  543. }
  544. }, window);
  545. }),
  546. new EditorWindowPanel.ButtonData("保存", () =>
  547. {
  548. var selectObject = body.GetName();
  549. window.CloseWindow();
  550. onAccept(selectObject);
  551. }),
  552. new EditorWindowPanel.ButtonData("取消", () =>
  553. {
  554. window.CloseWindow();
  555. })
  556. );
  557. }
  558.  
  559. /// <summary>
  560. /// 显示创建TileSet的面板
  561. /// </summary>
  562. /// <param name="onCreateTileSet">创建完成回调, 第一个参数为TileSet名称, 第二个参数数据数据</param>
  563. /// <param name="parentUi">所属父级Ui</param>
  564. public static void ShowCreateTileSet(Action<string, TileSetSplit> onCreateTileSet, UiBase parentUi = null)
  565. {
  566. var window = CreateWindowInstance(parentUi);
  567. window.SetWindowTitle("创建TileSet");
  568. window.SetWindowSize(new Vector2I(700, 500));
  569. var body = window.OpenBody<EditorInfoPanel>(UiManager.UiNames.EditorInfo);
  570. window.SetButtonList(
  571. new EditorWindowPanel.ButtonData("确定", () =>
  572. {
  573. //获取填写的数据, 并创建ui
  574. var infoData = body.GetInfoData();
  575. //名称
  576. var name = infoData.Name;
  577. //检查名称是否合规
  578. if (string.IsNullOrEmpty(name))
  579. {
  580. ShowTips("错误", "名称不能为空!");
  581. return;
  582. }
  583.  
  584. //验证是否有同名组
  585. var path = EditorTileSetManager.CustomTileSetPath + name;
  586. var dir = new DirectoryInfo(path);
  587. if (dir.Exists && dir.GetFiles().Length > 0)
  588. {
  589. ShowTips("错误", $"已经有相同名称的TileSet了!");
  590. return;
  591. }
  592.  
  593. var tileSetSplit = new TileSetSplit();
  594. tileSetSplit.Remark = infoData.Remark;
  595. tileSetSplit.Path = EditorTileSetManager.CustomTileSetPath + name;
  596. window.CloseWindow();
  597. onCreateTileSet(infoData.Name, tileSetSplit);
  598. }),
  599. new EditorWindowPanel.ButtonData("取消", () =>
  600. {
  601. window.CloseWindow();
  602. })
  603. );
  604. }
  605.  
  606. /// <summary>
  607. /// 显示编辑TileSet的面板
  608. /// </summary>
  609. /// <param name="tileSetSplit">原数据</param>
  610. /// <param name="onCreateTileSet">创建完成回调, 第一个参数为TileSet名称, 第二个参数数据数据</param>
  611. /// <param name="parentUi">所属父级Ui</param>
  612. public static void ShowEditTileSet(TileSetSplit tileSetSplit, Action<TileSetSplit> onCreateTileSet, UiBase parentUi = null)
  613. {
  614. var window = CreateWindowInstance(parentUi);
  615. window.SetWindowTitle("编辑TileSet");
  616. window.SetWindowSize(new Vector2I(700, 500));
  617. var body = window.OpenBody<EditorInfoPanel>(UiManager.UiNames.EditorInfo);
  618. body.InitData(new EditorInfoData(tileSetSplit.TileSetInfo.Name, tileSetSplit.Remark));
  619. body.SetNameInputEnable(false);
  620. window.SetButtonList(
  621. new EditorWindowPanel.ButtonData("确定", () =>
  622. {
  623. //获取填写的数据, 并创建ui
  624. var infoData = body.GetInfoData();
  625. tileSetSplit.Remark = infoData.Remark;
  626. window.CloseWindow();
  627. onCreateTileSet(tileSetSplit);
  628. }),
  629. new EditorWindowPanel.ButtonData("取消", () =>
  630. {
  631. window.CloseWindow();
  632. })
  633. );
  634. }
  635. private static EditorWindowPanel CreateWindowInstance(UiBase parentUi = null)
  636. {
  637. if (parentUi != null)
  638. {
  639. return parentUi.OpenNestedUi<EditorWindowPanel>(UiManager.UiNames.EditorWindow);
  640. }
  641.  
  642. return UiManager.Open_EditorWindow();
  643. }
  644. }