diff --git a/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json b/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json index 1fc1e12..dbc96e8 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/GroupConfig.json @@ -6,25 +6,29 @@ "ErrorType": 0, "RoomPath": "resource/map/tileMaps/TestGroup1/battle/Room1/Room1_roomInfo.json", "TilePath": "resource/map/tileMaps/TestGroup1/battle/Room1/Room1_tileInfo.json", - "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room1/Room1_preinstall.json" + "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room1/Room1_preinstall.json", + "PreviewPath": null }, { "ErrorType": 0, "RoomPath": "resource/map/tileMaps/TestGroup1/battle/Room2/Room2_roomInfo.json", "TilePath": "resource/map/tileMaps/TestGroup1/battle/Room2/Room2_tileInfo.json", - "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room2/Room2_preinstall.json" + "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room2/Room2_preinstall.json", + "PreviewPath": null }, { "ErrorType": 0, "RoomPath": "resource/map/tileMaps/TestGroup1/battle/Room3/Room3_roomInfo.json", "TilePath": "resource/map/tileMaps/TestGroup1/battle/Room3/Room3_tileInfo.json", - "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room3/Room3_preinstall.json" + "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room3/Room3_preinstall.json", + "PreviewPath": null }, { "ErrorType": 0, "RoomPath": "resource/map/tileMaps/TestGroup1/battle/Room4/Room4_roomInfo.json", "TilePath": "resource/map/tileMaps/TestGroup1/battle/Room4/Room4_tileInfo.json", - "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room4/Room4_preinstall.json" + "PreinstallPath": "resource/map/tileMaps/TestGroup1/battle/Room4/Room4_preinstall.json", + "PreviewPath": null } ], "InletList": [ @@ -32,7 +36,8 @@ "ErrorType": 0, "RoomPath": "resource/map/tileMaps/TestGroup1/inlet/Start1/Start1_roomInfo.json", "TilePath": "resource/map/tileMaps/TestGroup1/inlet/Start1/Start1_tileInfo.json", - "PreinstallPath": "resource/map/tileMaps/TestGroup1/inlet/Start1/Start1_preinstall.json" + "PreinstallPath": "resource/map/tileMaps/TestGroup1/inlet/Start1/Start1_preinstall.json", + "PreviewPath": null } ], "OutletList": [ @@ -40,7 +45,8 @@ "ErrorType": 0, "RoomPath": "resource/map/tileMaps/TestGroup1/outlet/End1/End1_roomInfo.json", "TilePath": "resource/map/tileMaps/TestGroup1/outlet/End1/End1_tileInfo.json", - "PreinstallPath": "resource/map/tileMaps/TestGroup1/outlet/End1/End1_preinstall.json" + "PreinstallPath": "resource/map/tileMaps/TestGroup1/outlet/End1/End1_preinstall.json", + "PreviewPath": null } ], "BossList": [], diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import index 5dc61b5..7e5d2de 100644 --- a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import +++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://ddhkhfaos2w1g" -path="res://.godot/imported/enemy0001.png-1247a3ddf8a1a163d812cad12c4340fd.ctex" +path="res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resource/sprite/role/enemy0001/enemy0001.png" -dest_files=["res://.godot/imported/enemy0001.png-1247a3ddf8a1a163d812cad12c4340fd.ctex"] +source_file="res://resource/sprite/role/enemy0001/Enemy0001.png" +dest_files=["res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"] [params] diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import index 2f4c450..aa89659 100644 --- a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import +++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cn64eauvwx1uj" -path="res://.godot/imported/enemy0001_Debris.png-297a2fb6680cb862a9a085cf58f8268c.ctex" +path="res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resource/sprite/role/enemy0001/enemy0001_Debris.png" -dest_files=["res://.godot/imported/enemy0001_Debris.png-297a2fb6680cb862a9a085cf58f8268c.ctex"] +source_file="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png" +dest_files=["res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"] [params] diff --git a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs b/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs index 8605573..e7154a5 100644 --- a/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs +++ b/DungeonShooting_Godot/src/framework/map/serialize/DungeonRoomSplit.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; +using Godot; /// /// 房间配置文件相关信息, 将会在 RoomConfig.json 中汇总 @@ -33,6 +34,12 @@ public string PreinstallPath; /// + /// 预览图路径 + /// + [JsonInclude] + public string PreviewPath; + + /// /// 房间配置数据, 第一次获取会在资源中加载数据 /// [JsonIgnore] @@ -91,8 +98,7 @@ } private List _preinstall; - - + /// /// 重新加载房间数据 /// diff --git a/DungeonShooting_Godot/src/game/manager/MapProjectManager.cs b/DungeonShooting_Godot/src/game/manager/MapProjectManager.cs index 4aa6e63..6e06a55 100644 --- a/DungeonShooting_Godot/src/game/manager/MapProjectManager.cs +++ b/DungeonShooting_Godot/src/game/manager/MapProjectManager.cs @@ -254,6 +254,21 @@ } /// + /// 保存预览图 + /// + public static void SaveRoomPreviewImage(DungeonRoomSplit roomSplit, Image image) + { + var roomInfo = roomSplit.RoomInfo; + var path = GetConfigPath(roomInfo.GroupName,roomInfo.RoomType, roomInfo.RoomName); + if (!Directory.Exists(path)) + { + Directory.CreateDirectory(path); + } + + image.SaveJpg(roomSplit.PreviewPath); + } + + /// /// 从指定组中删除房间, 返回是否删除成功 /// public static bool DeleteRoom(DungeonRoomGroup group, DungeonRoomSplit roomSplit) diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs index 6934073..880f509 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs @@ -263,6 +263,10 @@ /// public void DrawGuides() { + if (_hasPreviewImage) + { + return; + } CanvasItem canvasItem = _editorTileMap.L_Brush.Instance; //轴线 canvasItem.DrawLine(new Vector2(0, 2000), new Vector2(0, -2000), Colors.Green); @@ -1016,8 +1020,26 @@ } } + private bool _hasPreviewImage = false; + private Action _previewFinish; + private int _previewIndex = 0; + private bool _tempAutoFloorLayer; + private bool _tempCustomFloorLayer; + private bool _tempAutoMiddleLayer; + private bool _tempCustomMiddleLayer; + private bool _tempAutoTopLayer; + private bool _tempCustomTopLayer; + private void RunSavePreviewImage(Action action) { + if (_hasPreviewImage) + { + return; + } + + _previewIndex = 0; + _previewFinish = action; + _hasPreviewImage = true; //先截图, 将图像数据放置到 S_MapView2 节点上 var subViewport = MapEditorPanel.S_SubViewport.Instance; var viewportTexture = subViewport.GetTexture(); @@ -1027,18 +1049,57 @@ textureRect.Visible = true; //隐藏工具栏 - //MapEditorToolsPanel. - - // using (var image = viewportTexture.GetImage()) - // { - // GD.Print("test1:" + image.IsCompressed()); - // image.Resize(196, 196, Image.Interpolation.Lanczos); - // image.SavePng("D:\\test.png"); - // } + MapEditorToolsPanel.Visible = false; + //显示所有层级 + _tempAutoFloorLayer = IsLayerEnabled(AutoFloorLayer); + _tempCustomFloorLayer = IsLayerEnabled(CustomFloorLayer); + _tempAutoMiddleLayer = IsLayerEnabled(AutoMiddleLayer); + _tempCustomMiddleLayer = IsLayerEnabled(CustomMiddleLayer); + _tempAutoTopLayer = IsLayerEnabled(AutoTopLayer); + _tempCustomTopLayer = IsLayerEnabled(CustomTopLayer); + + SetLayerEnabled(AutoFloorLayer, true); + SetLayerEnabled(CustomFloorLayer, true); + SetLayerEnabled(AutoMiddleLayer, true); + SetLayerEnabled(CustomMiddleLayer, true); + SetLayerEnabled(AutoTopLayer, true); + SetLayerEnabled(CustomTopLayer, true); } private void OnFramePostDraw() { - + if (_hasPreviewImage) + { + _previewIndex++; + if (_previewIndex == 2) + { + var textureRect = MapEditorPanel.S_MapView2.Instance; + var texture = textureRect.Texture; + textureRect.Texture = null; + texture.Dispose(); + textureRect.Visible = false; + //还原工具栏 + MapEditorToolsPanel.Visible = true; + //还原层级显示 + SetLayerEnabled(AutoFloorLayer, _tempAutoFloorLayer); + SetLayerEnabled(CustomFloorLayer, _tempCustomFloorLayer); + SetLayerEnabled(AutoMiddleLayer, _tempAutoMiddleLayer); + SetLayerEnabled(CustomMiddleLayer, _tempCustomMiddleLayer); + SetLayerEnabled(AutoTopLayer, _tempAutoTopLayer); + SetLayerEnabled(CustomTopLayer, _tempCustomTopLayer); + + //保存截图 + var subViewport = MapEditorPanel.S_SubViewport.Instance; + var viewportTexture = subViewport.GetTexture(); + using (var image = viewportTexture.GetImage()) + { + image.Resize(196, 196, Image.Interpolation.Lanczos); + image.SavePng("D:\\test.png"); + } + + _previewFinish(); + _hasPreviewImage = false; + } + } } } \ No newline at end of file