Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / ui / tileSetEditorProject / TileSetEditorProjectPanel.cs
  1. using System.IO;
  2. using Godot;
  3.  
  4. namespace UI.TileSetEditorProject;
  5.  
  6. public partial class TileSetEditorProjectPanel : TileSetEditorProject
  7. {
  8. /// <summary>
  9. /// TileSet列表
  10. /// </summary>
  11. public UiGrid<TileButton, TileSetSplit> Grid { get; private set; }
  12. /// <summary>
  13. /// TileSet Source 预览列表
  14. /// </summary>
  15. public UiGrid<Preview, TileSetSourceInfo> PreviewGrid { get; private set; }
  16. public override void OnCreateUi()
  17. {
  18. //搜索按钮
  19. S_TileSearchButton.Instance.Pressed += OnSearchClick;
  20. //创建按钮
  21. S_TileAddButton.Instance.Pressed += OnAddClick;
  22. //删除按钮
  23. S_TileDeleteButton.Instance.Pressed += OnDeleteClick;
  24. //编辑按钮
  25. S_TileEditButton.Instance.Pressed += OnEditClick;
  26. Grid = CreateUiGrid<TileButton, TileSetSplit, TileButtonCell>(S_TileButton);
  27. Grid.SetColumns(1);
  28. Grid.SetCellOffset(new Vector2I(0, 5));
  29. Grid.SetHorizontalExpand(true);
  30.  
  31. PreviewGrid = CreateUiGrid<Preview, TileSetSourceInfo, PreviewCell>(S_Preview);
  32. PreviewGrid.SetColumns(1);
  33. PreviewGrid.SetCellOffset(new Vector2I(0, 15));
  34. PreviewGrid.SetHorizontalExpand(true);
  35. //初始化数据
  36. OnSearchClick();
  37. }
  38.  
  39. public override void OnShowUi()
  40. {
  41. OnSearchClick();
  42. }
  43.  
  44. /// <summary>
  45. /// 刷新数据
  46. /// </summary>
  47. public void SearchData(string text)
  48. {
  49. Grid.RemoveAll();
  50. PreviewGrid.RemoveAll();
  51. text = text.ToLower();
  52. foreach (var tileSetSplit in GameApplication.Instance.TileSetConfig)
  53. {
  54. if (text.Length == 0 || tileSetSplit.Value.TileSetInfo.Name.ToLower().Contains(text))
  55. {
  56. Grid.Add(tileSetSplit.Value);
  57. }
  58. }
  59. }
  60. //搜索
  61. private void OnSearchClick()
  62. {
  63. SearchData(S_TileSearchInput.Instance.Text);
  64. }
  65. //创建
  66. private void OnAddClick()
  67. {
  68. EditorWindowManager.ShowCreateTileSet((name, split) =>
  69. {
  70. //创建TileSetInfo
  71. var tileSetInfo = new TileSetInfo();
  72. tileSetInfo.InitData();
  73. tileSetInfo.Name = name;
  74. //默认创建一个Main Source, 该Source不可删除
  75. var tileSetSourceInfo = new TileSetSourceInfo();
  76. tileSetSourceInfo.InitData();
  77. tileSetSourceInfo.Name = "Main";
  78. tileSetInfo.Sources.Add(tileSetSourceInfo);
  79. //默认创建一个Main Terrain, 该Terrain不可删除
  80. var tileSetTerrainInfo = new TileSetTerrainInfo();
  81. tileSetTerrainInfo.InitData();
  82. tileSetTerrainInfo.Name = "Main";
  83. tileSetSourceInfo.Terrain.Add(tileSetTerrainInfo);
  84.  
  85. split.SetTileSetInfo(tileSetInfo);
  86. GameApplication.Instance.TileSetConfig.Add(name, split);
  87. //保存TileSetInfo
  88. EditorTileSetManager.SaveTileSetInfo(tileSetInfo);
  89. //保存TileSetSplit数据
  90. EditorTileSetManager.SaveTileSetConfig();
  91. //刷新
  92. OnSearchClick();
  93. });
  94. }
  95. //删除
  96. private void OnDeleteClick()
  97. {
  98. if (Grid.SelectIndex < 0)
  99. {
  100. EditorWindowManager.ShowTips("提示", "请选择要删除的TileSet!");
  101. return;
  102. }
  103.  
  104. var tileSetSplit = Grid.SelectData;
  105. //这里要判断是否引用
  106. foreach (var dungeonRoomGroup in GameApplication.Instance.RoomConfig)
  107. {
  108. if (dungeonRoomGroup.Value.TileSet == tileSetSplit.TileSetInfo.Name)
  109. {
  110. EditorWindowManager.ShowTips("提示", $"该TileSet被'{dungeonRoomGroup.Key}'地牢组使用,不能删除!");
  111. return;
  112. }
  113. }
  114. //删除数据
  115. EditorWindowManager.ShowDelayConfirm("提示", "确认删除该TileSet吗,删除后无法恢复!", 5, (v) =>
  116. {
  117. if (v)
  118. {
  119. Directory.Delete(EditorTileSetManager.CustomTileSetPath + tileSetSplit.TileSetInfo.Name, true);
  120. GameApplication.Instance.TileSetConfig.Remove(tileSetSplit.TileSetInfo.Name);
  121. EditorTileSetManager.SaveTileSetConfig();
  122. tileSetSplit.Destroy();
  123. //刷新
  124. OnSearchClick();
  125. }
  126. });
  127. }
  128. //编辑按钮
  129. private void OnEditClick()
  130. {
  131. if (Grid.SelectIndex < 0)
  132. {
  133. EditorWindowManager.ShowTips("提示", "请选择要删除的TileSet!");
  134. return;
  135. }
  136.  
  137. var tileSetSplit = Grid.SelectData;
  138. EditorWindowManager.ShowEditTileSet(tileSetSplit, (v) =>
  139. {
  140. EditorTileSetManager.SaveTileSetConfig();
  141. //刷新
  142. OnSearchClick();
  143. });
  144. }
  145. }