using System.IO; using Godot; namespace UI.TileSetEditorProject; public partial class TileSetEditorProjectPanel : TileSetEditorProject { /// <summary> /// TileSet列表 /// </summary> public UiGrid<TileButton, TileSetSplit> Grid { get; private set; } /// <summary> /// TileSet Source 预览列表 /// </summary> public UiGrid<Preview, TileSetSourceInfo> PreviewGrid { get; private set; } public override void OnCreateUi() { //搜索按钮 S_TileSearchButton.Instance.Pressed += OnSearchClick; //创建按钮 S_TileAddButton.Instance.Pressed += OnAddClick; //删除按钮 S_TileDeleteButton.Instance.Pressed += OnDeleteClick; //编辑按钮 S_TileEditButton.Instance.Pressed += OnEditClick; Grid = CreateUiGrid<TileButton, TileSetSplit, TileButtonCell>(S_TileButton); Grid.SetColumns(1); Grid.SetCellOffset(new Vector2I(0, 5)); Grid.SetHorizontalExpand(true); PreviewGrid = CreateUiGrid<Preview, TileSetSourceInfo, PreviewCell>(S_Preview); PreviewGrid.SetColumns(1); PreviewGrid.SetCellOffset(new Vector2I(0, 15)); PreviewGrid.SetHorizontalExpand(true); //初始化数据 OnSearchClick(); } public override void OnShowUi() { OnSearchClick(); } /// <summary> /// 刷新数据 /// </summary> public void SearchData(string text) { Grid.RemoveAll(); PreviewGrid.RemoveAll(); text = text.ToLower(); foreach (var tileSetSplit in GameApplication.Instance.TileSetConfig) { if (text.Length == 0 || tileSetSplit.Value.TileSetInfo.Name.ToLower().Contains(text)) { Grid.Add(tileSetSplit.Value); } } } //搜索 private void OnSearchClick() { SearchData(S_TileSearchInput.Instance.Text); } //创建 private void OnAddClick() { EditorWindowManager.ShowCreateTileSet((name, split) => { //创建TileSetInfo var tileSetInfo = new TileSetInfo(); tileSetInfo.InitData(); tileSetInfo.Name = name; //默认创建一个Main Source, 该Source不可删除 var tileSetSourceInfo = new TileSetSourceInfo(); tileSetSourceInfo.InitData(); tileSetSourceInfo.Name = "Main"; tileSetInfo.Sources.Add(tileSetSourceInfo); //默认创建一个Main Terrain, 该Terrain不可删除 var tileSetTerrainInfo = new TileSetTerrainInfo(); tileSetTerrainInfo.InitData(); tileSetTerrainInfo.Name = "Main"; tileSetSourceInfo.Terrain.Add(tileSetTerrainInfo); split.SetTileSetInfo(tileSetInfo); GameApplication.Instance.TileSetConfig.Add(name, split); //保存TileSetInfo EditorTileSetManager.SaveTileSetInfo(tileSetInfo); //保存TileSetSplit数据 EditorTileSetManager.SaveTileSetConfig(); //刷新 OnSearchClick(); }); } //删除 private void OnDeleteClick() { if (Grid.SelectIndex < 0) { EditorWindowManager.ShowTips("提示", "请选择要删除的TileSet!"); return; } var tileSetSplit = Grid.SelectData; //这里要判断是否引用 foreach (var dungeonRoomGroup in GameApplication.Instance.RoomConfig) { if (dungeonRoomGroup.Value.TileSet == tileSetSplit.TileSetInfo.Name) { EditorWindowManager.ShowTips("提示", $"该TileSet被'{dungeonRoomGroup.Key}'地牢组使用,不能删除!"); return; } } //删除数据 EditorWindowManager.ShowDelayConfirm("提示", "确认删除该TileSet吗,删除后无法恢复!", 5, (v) => { if (v) { Directory.Delete(EditorTileSetManager.CustomTileSetPath + tileSetSplit.TileSetInfo.Name, true); GameApplication.Instance.TileSetConfig.Remove(tileSetSplit.TileSetInfo.Name); EditorTileSetManager.SaveTileSetConfig(); tileSetSplit.Destroy(); //刷新 OnSearchClick(); } }); } //编辑按钮 private void OnEditClick() { if (Grid.SelectIndex < 0) { EditorWindowManager.ShowTips("提示", "请选择要删除的TileSet!"); return; } var tileSetSplit = Grid.SelectData; EditorWindowManager.ShowEditTileSet(tileSetSplit, (v) => { EditorTileSetManager.SaveTileSetConfig(); //刷新 OnSearchClick(); }); } }