diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preinstall.json index c68df53..6833311 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preinstall.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preinstall.json @@ -1 +1 @@ -[{"Name":"Preinstall1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":29,"Y":13},"Size":{"X":21,"Y":14},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":33,"Y":33},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":58,"Y":29},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":28,"Y":56},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0007","Weight":100,"Attr":{"CurrAmmon":"60","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":53,"Y":57},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0008","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":79,"Y":46},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":74,"Y":27},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0010","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":62,"Y":7},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0011","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}] \ No newline at end of file +[{"Name":"Preinstall1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":29,"Y":13},"Size":{"X":21,"Y":14},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":33,"Y":33},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0002","Weight":100,"Attr":{"CurrAmmon":"7","ResidueAmmo":"70"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":58,"Y":29},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":28,"Y":56},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0007","Weight":100,"Attr":{"CurrAmmon":"60","ResidueAmmo":"300"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":53,"Y":57},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0008","Weight":100,"Attr":{"CurrAmmon":"10","ResidueAmmo":"120"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":79,"Y":46},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0009","Weight":100,"Attr":{"CurrAmmon":"1","ResidueAmmo":"25"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":74,"Y":27},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0010","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":62,"Y":7},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0011","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":90,"Y":7},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0011","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}] \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preview.png b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preview.png index c42d159..ba46568 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preview.png +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/Preview.png Binary files differ diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/RoomInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/RoomInfo.json index 4ca8060..d6c7944 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/RoomInfo.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/RoomInfo.json @@ -1 +1 @@ -{"Position":{"X":-2,"Y":-4},"Size":{"X":10,"Y":11},"DoorAreaInfos":[],"GroupName":"TestGroup2","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""} \ No newline at end of file +{"Position":{"X":-2,"Y":-4},"Size":{"X":14,"Y":11},"DoorAreaInfos":[],"GroupName":"TestGroup2","RoomType":1,"RoomName":"Start1","Weight":100,"Remark":""} \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/TileInfo.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/TileInfo.json index 5e6e779..c5f9272 100644 --- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/TileInfo.json +++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup2/inlet/Start1/TileInfo.json @@ -1 +1 @@ -{"NavigationVertices":[{"X":90,"Y":82},{"X":6,"Y":82},{"X":6,"Y":-10},{"X":90,"Y":-10}],"NavigationPolygon":[[0,1,2,3]],"Floor":[0,0,0,0,4,1,0,0,0,4,2,0,0,0,4,2,1,0,0,4,1,1,0,0,4,0,1,0,0,4,0,2,0,0,4,1,2,0,0,4,2,2,0,0,4,0,-1,0,0,4,1,-1,0,0,4,2,-1,0,0,4,3,-1,0,0,4,3,0,0,0,4,3,1,0,0,4,3,2,0,0,4,4,-1,0,0,4,5,-1,0,0,4,4,0,0,0,4,4,1,0,0,4,5,0,0,0,4,5,1,0,0,4,5,2,0,0,4,5,3,0,0,4,4,2,0,0,4,4,3,0,0,4,3,3,0,0,4,2,3,0,0,4,1,3,0,0,4,0,3,0,0,4,0,4,0,0,4,1,4,0,0,4,2,4,0,0,4,3,4,0,0,4,4,4,0,0,4,5,4,0,0,4],"Middle":[0,-3,0,9,3,0,-2,0,2,4,1,-3,0,9,3,1,-2,0,2,4,2,-3,0,9,3,2,-2,0,2,4,3,-3,0,9,3,3,-2,0,2,4,4,-3,0,9,3,4,-2,0,2,4,5,-3,0,9,3,5,-2,0,2,4],"Top":[-2,-4,0,9,2,-2,-3,0,9,2,-2,-2,0,9,2,-2,-1,0,9,2,-2,0,0,9,2,-2,1,0,9,2,-2,2,0,9,2,-2,3,0,9,2,-2,4,0,9,2,-2,5,0,9,2,-2,6,0,9,2,-1,-4,0,9,2,-1,-3,0,6,2,-1,-2,0,11,2,-1,-1,0,11,2,-1,0,0,11,2,-1,1,0,11,2,-1,2,0,11,2,-1,3,0,11,2,-1,4,0,11,2,-1,5,0,6,1,-1,6,0,9,2,0,-4,0,9,2,0,5,0,10,0,0,6,0,9,2,1,-4,0,9,2,1,5,0,10,0,1,6,0,9,2,2,-4,0,9,2,2,5,0,10,0,2,6,0,9,2,3,-4,0,9,2,3,5,0,10,0,3,6,0,9,2,4,-4,0,9,2,4,5,0,10,0,4,6,0,9,2,5,-4,0,9,2,5,5,0,10,0,5,6,0,9,2,6,-4,0,9,2,6,-3,0,5,2,6,-2,0,8,1,6,-1,0,8,1,6,0,0,8,1,6,1,0,8,1,6,2,0,8,1,6,3,0,8,1,6,4,0,8,1,6,5,0,5,1,6,6,0,9,2,7,-4,0,9,2,7,-3,0,9,2,7,-2,0,9,2,7,-1,0,9,2,7,0,0,9,2,7,1,0,9,2,7,2,0,9,2,7,3,0,9,2,7,4,0,9,2,7,5,0,9,2,7,6,0,9,2]} \ No newline at end of file +{"NavigationVertices":[{"X":154,"Y":-10},{"X":154,"Y":82},{"X":134,"Y":54},{"X":134,"Y":18},{"X":6,"Y":82},{"X":106,"Y":54},{"X":6,"Y":-10},{"X":106,"Y":18}],"NavigationPolygon":[[0,1,2,3],[2,1,4,5],[6,0,3,7],[5,4,6,7]],"Floor":[0,0,0,0,4,1,0,0,0,4,2,0,0,0,4,2,1,0,0,4,1,1,0,0,4,0,1,0,0,4,0,2,0,0,4,1,2,0,0,4,2,2,0,0,4,3,0,0,0,4,3,1,0,0,4,3,2,0,0,4,4,0,0,0,4,4,1,0,0,4,5,0,0,0,4,5,1,0,0,4,5,2,0,0,4,5,3,0,0,4,4,2,0,0,4,4,3,0,0,4,3,3,0,0,4,2,3,0,0,4,1,3,0,0,4,0,3,0,0,4,0,4,0,0,4,1,4,0,0,4,2,4,0,0,4,3,4,0,0,4,4,4,0,0,4,5,4,0,0,4,7,0,0,0,4,6,0,0,0,4,6,1,0,0,4,6,2,0,0,4,7,3,0,0,4,6,3,0,0,4,6,4,0,0,4,7,4,0,0,4,0,-1,0,0,4,1,-1,0,0,4,2,-1,0,0,4,3,-1,0,0,4,4,-1,0,0,4,5,-1,0,0,4,6,-1,0,0,4,7,-1,0,0,4,8,-1,0,0,4,9,-1,0,0,4,9,0,0,0,4,9,1,0,0,4,9,2,0,0,4,9,3,0,0,4,9,4,0,0,4,8,4,0,0,4,8,3,0,0,4,8,2,0,0,4,8,1,0,0,4,8,0,0,0,4],"Middle":[0,-3,0,9,3,0,-2,0,2,4,1,-3,0,9,3,1,-2,0,2,4,2,-3,0,9,3,2,-2,0,2,4,3,-3,0,9,3,3,-2,0,2,4,4,-3,0,9,3,4,-2,0,2,4,5,-3,0,9,3,5,-2,0,2,4,6,-3,0,9,3,6,-2,0,2,4,7,-3,0,9,3,7,-2,0,2,4,7,1,0,0,3,7,2,0,4,4,8,-3,0,9,3,8,-2,0,2,4,9,-3,0,9,3,9,-2,0,2,4],"Top":[-2,-4,0,9,2,-2,-3,0,9,2,-2,-2,0,9,2,-2,-1,0,9,2,-2,0,0,9,2,-2,1,0,9,2,-2,2,0,9,2,-2,3,0,9,2,-2,4,0,9,2,-2,5,0,9,2,-2,6,0,9,2,-1,-4,0,9,2,-1,-3,0,6,2,-1,-2,0,11,2,-1,-1,0,11,2,-1,0,0,11,2,-1,1,0,11,2,-1,2,0,11,2,-1,3,0,11,2,-1,4,0,11,2,-1,5,0,6,1,-1,6,0,9,2,0,-4,0,9,2,0,5,0,10,0,0,6,0,9,2,1,-4,0,9,2,1,5,0,10,0,1,6,0,9,2,2,-4,0,9,2,2,5,0,10,0,2,6,0,9,2,3,-4,0,9,2,3,5,0,10,0,3,6,0,9,2,4,-4,0,9,2,4,5,0,10,0,4,6,0,9,2,5,-4,0,9,2,5,5,0,10,0,5,6,0,9,2,6,-4,0,9,2,6,5,0,10,0,6,6,0,9,2,7,-4,0,9,2,7,5,0,10,0,7,6,0,9,2,8,-4,0,9,2,8,5,0,10,0,8,6,0,9,2,9,-4,0,9,2,9,5,0,10,0,9,6,0,9,2,10,-4,0,9,2,10,-3,0,5,2,10,-2,0,8,1,10,-1,0,8,1,10,0,0,8,1,10,1,0,8,1,10,2,0,8,1,10,3,0,8,1,10,4,0,8,1,10,5,0,5,1,10,6,0,9,2,11,-4,0,9,2,11,-3,0,9,2,11,-2,0,9,2,11,-1,0,9,2,11,0,0,9,2,11,1,0,9,2,11,2,0,9,2,11,3,0,9,2,11,4,0,9,2,11,5,0,9,2,11,6,0,9,2]} \ No newline at end of file diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json index b1c5bb6..5bb1ccf 100644 --- a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json +++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json @@ -7,7 +7,7 @@ "Terrain": { "F": { "0": [ - 80, + 0, 64 ] }, diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs index 53043ad..4134669 100644 --- a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs @@ -8,19 +8,20 @@ /// public class TileSetTerrainInfo : IClone { - //---------------------- 地板 ---------------------- - //type = 3 + /// + /// 地板 (1块) type = 3 + /// [JsonInclude] public Dictionary F; - - //---------------------- 侧方墙壁 -------------------------- - - //type = 2 + + /// + /// 侧方墙壁 (4块) type = 2 + /// [JsonInclude] public Dictionary M; - //---------------------- 顶部墙壁47格 ---------------------- - - //type = 1 + /// + /// 顶部墙壁47格 (47块) type = 1 + /// [JsonInclude] public Dictionary T; public void InitData() @@ -31,6 +32,15 @@ } /// + /// 返回这个TileSet地形是否可以正常使用了 + /// + /// + public bool CanUse() + { + return T != null && T.Count == 47 && M != null && M.Count == 4 && F != null && F.Count == 1; + } + + /// /// 将存储的坐标数据转换成 Vector2I 对象, 返回的 Vector2I 单位: 格 /// public Vector2I GetPosition(int[] ints) diff --git a/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs b/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs index 1b0de91..7384ee3 100644 --- a/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs +++ b/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; +using System.Linq; using Godot; /// @@ -91,21 +92,50 @@ //------------------------------------------------------------------------- - private Dictionary _mapping = new Dictionary(); + public TileSetTerrainInfo TerrainInfo { get; private set; } - public AutoTileConfig(int sourceId, TileSetAtlasSource atlasSource) + private Dictionary _mapping = new Dictionary(); + + public AutoTileConfig(int sourceId, TileSetTerrainInfo terrainInfo) { - var tilesCount = atlasSource.GetTilesCount(); - for (var i = 0; i < tilesCount; i++) + TerrainInfo = terrainInfo; + if (terrainInfo.T != null) { - var pos = atlasSource.GetTileId(i); - var tileData = atlasSource.GetTileData(pos, 0); - if (tileData != null && tileData.Terrain != -1 && tileData.TerrainSet != -1) //判断是否使用掩码 + foreach (var keyValuePair in terrainInfo.T) { - HandlerTileData(tileData.GetTerrainPeeringValue(), sourceId, pos); + HandlerTileData(keyValuePair.Key, sourceId, terrainInfo.GetPosition(keyValuePair.Value)); } } + if (terrainInfo.M != null) + { + int[] data; + if (terrainInfo.M.TryGetValue(0, out data)) + { + Wall_Vertical_Single = new TileCellData(sourceId, terrainInfo.GetPosition(data), TerrainPeering.None, GameConfig.MiddleMapLayer); + } + if (terrainInfo.M.TryGetValue(1, out data)) + { + Wall_Vertical_Left= new TileCellData(sourceId, terrainInfo.GetPosition(data), TerrainPeering.None, GameConfig.MiddleMapLayer); + } + if (terrainInfo.M.TryGetValue(2, out data)) + { + Wall_Vertical_Center= new TileCellData(sourceId, terrainInfo.GetPosition(data), TerrainPeering.None, GameConfig.MiddleMapLayer); + } + if (terrainInfo.M.TryGetValue(3, out data)) + { + Wall_Vertical_Right= new TileCellData(sourceId, terrainInfo.GetPosition(data), TerrainPeering.None, GameConfig.MiddleMapLayer); + } + } + + if (terrainInfo.F != null) + { + if (terrainInfo.F.TryGetValue(0, out var data)) + { + Floor = new TileCellData(sourceId, terrainInfo.GetPosition(data), TerrainPeering.None, GameConfig.FloorMapLayer); + } + } + TopMask = Auto_111_111_111; Wall_Bottom = Auto_000_111_111; Wall_Left = Auto_110_110_110; diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs index 5ba2fde..3e50204 100644 --- a/DungeonShooting_Godot/src/game/room/DungeonManager.cs +++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs @@ -227,7 +227,8 @@ yield return 0; //填充地牢 - AutoTileConfig = new AutoTileConfig(0, World.TileRoot.TileSet.GetSource(0) as TileSetAtlasSource); + var tileSetSplit = GameApplication.Instance.TileSetConfig.First().Value; + AutoTileConfig = new AutoTileConfig(0, tileSetSplit.TileSetInfo.Sources[0].Terrain); _dungeonTileMap = new DungeonTileMap(World.TileRoot); yield return _dungeonTileMap.AutoFillRoomTile(AutoTileConfig, _dungeonGenerator.StartRoomInfo, random); //yield return _dungeonTileMap.AddOutlineTile(AutoTileConfig.WALL_BLOCK); diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs index ef726dc..ecc78a1 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs @@ -29,8 +29,7 @@ { //临时处理, 加载TileSet var tileSetSplit = GameApplication.Instance.TileSetConfig.First().Value; - var tileSet = tileSetSplit.GetTileSet(); - S_TileMap.Instance.InitTileSet(tileSet); + S_TileMap.Instance.InitTileSet(tileSetSplit); S_TabContainer.Instance.SetTabTitle(0, "对象"); S_TabContainer.Instance.SetTabTitle(1, "图层"); diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs index 9d92dae..3e868bc 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs @@ -155,14 +155,14 @@ /// /// 初始化图块集。 /// - /// 要初始化的图块集 - public void InitTileSet(TileSet tileSet) + /// 要初始化的图块集 + public void InitTileSet(TileSetSplit tileSetSplit) { - TileSet = tileSet; + TileSet = tileSetSplit.GetTileSet(); // 创建AutoTileConfig对象 // 使用第一个图块集源作为参数 - _autoTileConfig = new AutoTileConfig(0, tileSet.GetSource(0) as TileSetAtlasSource); + _autoTileConfig = new AutoTileConfig(0, tileSetSplit.TileSetInfo.Sources[0].Terrain); } public void SetUiNode(IUiNode uiNode)