diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png new file mode 100644 index 0000000..cb64efb --- /dev/null +++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png Binary files differ diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png.import new file mode 100644 index 0000000..f1a115c --- /dev/null +++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Main.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://betgai078na4v" +path="res://.godot/imported/Main.png-23d95873487ad9e6bd6e2fd01911f2e2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://resource/map/tileSet/TileSet1/Main.png" +dest_files=["res://.godot/imported/Main.png-23d95873487ad9e6bd6e2fd01911f2e2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png deleted file mode 100644 index cb64efb..0000000 --- a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png +++ /dev/null Binary files differ diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png.import b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png.import deleted file mode 100644 index efd960c..0000000 --- a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/Test1.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bdbqiceo0p121" -path="res://.godot/imported/Test1.png-116dc7985045e1cdc2a9599a74b4b18e.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://resource/map/tileSet/TileSet1/Test1.png" -dest_files=["res://.godot/imported/Test1.png-116dc7985045e1cdc2a9599a74b4b18e.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json index d71c243..5bb1ccf 100644 --- a/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json +++ b/DungeonShooting_Godot/resource/map/tileSet/TileSet1/TileSet.json @@ -2,300 +2,225 @@ "Name": "TileSet1", "Sources": [ { - "Name": "Test1", - "SourcePath": "resource/map/tileSet/TileSet1/Test1.png", + "Name": "Main", + "SourcePath": "resource/map/tileSet/TileSet1/Main.png", "Terrain": { - "_f": [ - 0, - 64 - ], - "_vl": [ - 16, - 64 - ], - "_vc": [ - 32, - 64 - ], - "_vr": [ - 48, - 64 - ], - "_vs": [ - 64, - 64 - ], - "_000_010_010": [ - 0, - 0 - ], - "_010_010_010": [ - 0, - 16 - ], - "_010_010_000": [ - 0, - 32 - ], - "_000_010_000": [ - 0, - 48 - ], - "_000_011_010": [ - 16, - 0 - ], - "_010_011_010": [ - 16, - 16 - ], - "_010_011_000": [ - 16, - 32 - ], - "_000_011_000": [ - 16, - 48 - ], - "_000_111_010": [ - 32, - 0 - ], - "_010_111_010": [ - 32, - 16 - ], - "_010_111_000": [ - 32, - 32 - ], - "_000_111_000": [ - 32, - 48 - ], - "_000_110_010": [ - 48, - 0 - ], - "_010_110_010": [ - 48, - 16 - ], - "_010_110_000": [ - 48, - 32 - ], - "_000_110_000": [ - 48, - 48 - ], - "_110_111_010": [ - 64, - 0 - ], - "_010_011_011": [ - 64, - 16 - ], - "_011_011_010": [ - 64, - 32 - ], - "_010_111_110": [ - 64, - 48 - ], - "_000_111_011": [ - 80, - 0 - ], - "_011_111_111": [ - 80, - 16 - ], - "_111_111_011": [ - 80, - 32 - ], - "_011_111_000": [ - 80, - 48 - ], - "_000_111_110": [ - 96, - 0 - ], - "_110_111_111": [ - 96, - 16 - ], - "_111_111_110": [ - 96, - 32 - ], - "_110_111_000": [ - 96, - 48 - ], - "_011_111_010": [ - 112, - 0 - ], - "_010_110_110": [ - 112, - 16 - ], - "_110_110_010": [ - 112, - 32 - ], - "_010_111_011": [ - 112, - 48 - ], - "_000_011_011": [ - 128, - 0 - ], - "_011_011_011": [ - 128, - 16 - ], - "_011_111_011": [ - 128, - 32 - ], - "_011_011_000": [ - 128, - 48 - ], - "_010_111_111": [ - 144, - 0 - ], - "_110_111_011": [ - 160, - 32 - ], - "_111_111_111": [ - 144, - 32 - ], - "_111_111_000": [ - 144, - 48 - ], - "_000_111_111": [ - 160, - 0 - ], - "_011_111_110": [ - 144, - 16 - ], - "_111_111_010": [ - 160, - 48 - ], - "_000_110_110": [ - 176, - 0 - ], - "_110_111_110": [ - 176, - 16 - ], - "_110_110_110": [ - 176, - 32 - ], - "_110_110_000": [ - 176, - 48 - ] - }, - "Combination": [ - { - "Id": "638402348017543119", - "Name": "\u5899\u58C1", - "Cells": [ - { - "X": 16, - "Y": 64 - }, - { - "X": 32, - "Y": 64 - }, - { - "X": 48, - "Y": 64 - }, - { - "X": 48, - "Y": 48 - }, - { - "X": 32, - "Y": 48 - }, - { - "X": 16, - "Y": 48 - } - ], - "Positions": [ - { - "X": 0, - "Y": 16 - }, - { - "X": 16, - "Y": 16 - }, - { - "X": 32, - "Y": 16 - }, - { - "X": 32, - "Y": 0 - }, - { - "X": 16, - "Y": 0 - }, - { - "X": 0, - "Y": 0 - } + "F": { + "0": [ + 0, + 64 ] }, - { - "Id": "638402348110507844", - "Name": "\u5899\u58C12", - "Cells": [ - { - "X": 0, - "Y": 48 - }, - { - "X": 64, - "Y": 64 - } + "M": { + "1": [ + 16, + 64 ], - "Positions": [ - { - "X": 0, - "Y": 0 - }, - { - "X": 0, - "Y": 16 - } + "2": [ + 32, + 64 + ], + "3": [ + 48, + 64 + ], + "0": [ + 64, + 64 + ] + }, + "T": { + "144": [ + 0, + 0 + ], + "216": [ + 176, + 0 + ], + "27": [ + 176, + 48 + ], + "146": [ + 0, + 16 + ], + "18": [ + 0, + 32 + ], + "16": [ + 0, + 48 + ], + "48": [ + 16, + 48 + ], + "56": [ + 32, + 48 + ], + "24": [ + 48, + 48 + ], + "250": [ + 64, + 48 + ], + "62": [ + 80, + 48 + ], + "59": [ + 96, + 48 + ], + "442": [ + 112, + 48 + ], + "54": [ + 128, + 48 + ], + "63": [ + 144, + 48 + ], + "191": [ + 160, + 48 + ], + "219": [ + 176, + 32 + ], + "251": [ + 176, + 16 + ], + "504": [ + 160, + 0 + ], + "506": [ + 144, + 0 + ], + "432": [ + 128, + 0 + ], + "438": [ + 128, + 16 + ], + "446": [ + 128, + 32 + ], + "443": [ + 144, + 16 + ], + "511": [ + 144, + 32 + ], + "254": [ + 160, + 32 + ], + "190": [ + 112, + 0 + ], + "218": [ + 112, + 16 + ], + "155": [ + 112, + 32 + ], + "255": [ + 96, + 32 + ], + "447": [ + 80, + 32 + ], + "510": [ + 80, + 16 + ], + "507": [ + 96, + 16 + ], + "248": [ + 96, + 0 + ], + "440": [ + 80, + 0 + ], + "187": [ + 64, + 0 + ], + "434": [ + 64, + 16 + ], + "182": [ + 64, + 32 + ], + "176": [ + 16, + 0 + ], + "178": [ + 16, + 16 + ], + "50": [ + 16, + 32 + ], + "58": [ + 32, + 32 + ], + "26": [ + 48, + 32 + ], + "184": [ + 32, + 0 + ], + "152": [ + 48, + 0 + ], + "154": [ + 48, + 16 + ], + "186": [ + 32, + 16 ] } - ] + }, + "Combination": [] } ] } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs index a6f9f88..76f3917 100644 --- a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSourceInfo.cs @@ -44,6 +44,7 @@ public void InitData() { Terrain = new TileSetTerrainInfo(); + Terrain.InitData(); Combination = new List<TileCombinationInfo>(); } diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs index 753ec10..d0ee602 100644 --- a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs +++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetSplit.cs @@ -125,8 +125,19 @@ } } + var terrainInfo = tileSetSourceInfo.Terrain; //初始化地形 - tileSetAtlasSource.InitTerrain(tileSetSourceInfo.Terrain); + tileSetAtlasSource.InitTerrain(terrainInfo, 0, 0); + //ySort + var index = terrainInfo.TerrainCoordsToIndex(new Vector2I(0, 2)); + if (terrainInfo.T.TryGetValue(index, out var value)) + { + var pos = terrainInfo.GetPosition(value); + var tileData = tileSetAtlasSource.GetTileData(pos, 0); + tileData.YSortOrigin = 23; + } + + //碰撞器 _tileSet.AddSource(tileSetAtlasSource); } diff --git a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs index 53a6cb6..63a1bfa 100644 --- a/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/serialize/tileSet/TileSetTerrainInfo.cs @@ -1,4 +1,5 @@ +using System.Collections.Generic; using System.Text.Json.Serialization; using Godot; @@ -8,191 +9,548 @@ public class TileSetTerrainInfo : IClone<TileSetTerrainInfo> { //---------------------- 地板 ---------------------- - - [JsonInclude] public int[] _f; + + [JsonInclude] public Dictionary<uint, int[]> F; //---------------------- 侧方墙壁 -------------------------- - [JsonInclude] public int[] _vl; - [JsonInclude] public int[] _vc; - [JsonInclude] public int[] _vr; - [JsonInclude] public int[] _vs; + [JsonInclude] public Dictionary<uint, int[]> M; //---------------------- 顶部墙壁47格 ---------------------- - //第一列 - [JsonInclude] public int[] _000_010_010; - [JsonInclude] public int[] _010_010_010; - [JsonInclude] public int[] _010_010_000; + [JsonInclude] public Dictionary<uint, int[]> T; - [JsonInclude] public int[] _000_010_000; + public void InitData() + { + T = new Dictionary<uint, int[]>(); + M = new Dictionary<uint, int[]>(); + F = new Dictionary<uint, int[]>(); + } - //第二列 - [JsonInclude] public int[] _000_011_010; - [JsonInclude] public int[] _010_011_010; - [JsonInclude] public int[] _010_011_000; - - [JsonInclude] public int[] _000_011_000; - - //第三列 - [JsonInclude] public int[] _000_111_010; - [JsonInclude] public int[] _010_111_010; - [JsonInclude] public int[] _010_111_000; - - [JsonInclude] public int[] _000_111_000; - - //第四列 - [JsonInclude] public int[] _000_110_010; - [JsonInclude] public int[] _010_110_010; - [JsonInclude] public int[] _010_110_000; - - [JsonInclude] public int[] _000_110_000; - - //第五列 - [JsonInclude] public int[] _110_111_010; - [JsonInclude] public int[] _010_011_011; - [JsonInclude] public int[] _011_011_010; - - [JsonInclude] public int[] _010_111_110; - - //第六列 - [JsonInclude] public int[] _000_111_011; - [JsonInclude] public int[] _011_111_111; - [JsonInclude] public int[] _111_111_011; - - [JsonInclude] public int[] _011_111_000; - - //第七列 - [JsonInclude] public int[] _000_111_110; - [JsonInclude] public int[] _110_111_111; - [JsonInclude] public int[] _111_111_110; - - [JsonInclude] public int[] _110_111_000; - - //第八列 - [JsonInclude] public int[] _011_111_010; - [JsonInclude] public int[] _010_110_110; - [JsonInclude] public int[] _110_110_010; - - [JsonInclude] public int[] _010_111_011; - - //第九列 - [JsonInclude] public int[] _000_011_011; - [JsonInclude] public int[] _011_011_011; - [JsonInclude] public int[] _011_111_011; - - [JsonInclude] public int[] _011_011_000; - - //第十列 - [JsonInclude] public int[] _010_111_111; - [JsonInclude] public int[] _110_111_011; - [JsonInclude] public int[] _111_111_111; - - [JsonInclude] public int[] _111_111_000; - - //第十一列 - [JsonInclude] public int[] _000_111_111; - [JsonInclude] public int[] _011_111_110; - - [JsonInclude] public int[] _111_111_010; - - //第十二列 - [JsonInclude] public int[] _000_110_110; - [JsonInclude] public int[] _110_111_110; - [JsonInclude] public int[] _110_110_110; - [JsonInclude] public int[] _110_110_000; - + /// <summary> + /// 将存储的坐标数据转换成 Vector2I 对象, 返回的 Vector2I 单位: 格 + /// </summary> public Vector2I GetPosition(int[] ints) { - return new Vector2I(ints[0], ints[1]); + return new Vector2I(ints[0] / GameConfig.TileCellSize, ints[1] / GameConfig.TileCellSize); + } + + public uint TerrainCoordsToIndex(Vector2I coords) + { + return (uint)(coords.Y * GameConfig.TerrainBitSize1.X + coords.X); } public TileSetTerrainInfo Clone() { var terrainInfo = new TileSetTerrainInfo(); - if (_f != null) terrainInfo._f = new[] { _f[0], _f[1] }; - - // 地板 - terrainInfo._f = (_f != null) ? new[] { _f[0], _f[1] } : null; - - // 侧方墙壁 - terrainInfo._vl = (_vl != null) ? new[] { _vl[0], _vl[1] } : null; - terrainInfo._vc = (_vc != null) ? new[] { _vc[0], _vc[1] } : null; - terrainInfo._vr = (_vr != null) ? new[] { _vr[0], _vr[1] } : null; - terrainInfo._vs = (_vs != null) ? new[] { _vs[0], _vs[1] } : null; - - // 顶部墙壁47格 - // 第一列 - terrainInfo._000_010_010 = (_000_010_010 != null) ? new[] { _000_010_010[0], _000_010_010[1] } : null; - terrainInfo._010_010_010 = (_010_010_010 != null) ? new[] { _010_010_010[0], _010_010_010[1] } : null; - terrainInfo._010_010_000 = (_010_010_000 != null) ? new[] { _010_010_000[0], _010_010_000[1] } : null; - terrainInfo._000_010_000 = (_000_010_000 != null) ? new[] { _000_010_000[0], _000_010_000[1] } : null; - - // 第二列 - terrainInfo._000_011_010 = (_000_011_010 != null) ? new[] { _000_011_010[0], _000_011_010[1] } : null; - terrainInfo._010_011_010 = (_010_011_010 != null) ? new[] { _010_011_010[0], _010_011_010[1] } : null; - terrainInfo._010_011_000 = (_010_011_000 != null) ? new[] { _010_011_000[0], _010_011_000[1] } : null; - terrainInfo._000_011_000 = (_000_011_000 != null) ? new[] { _000_011_000[0], _000_011_000[1] } : null; - - // 第三列 - terrainInfo._000_111_010 = (_000_111_010 != null) ? new[] { _000_111_010[0], _000_111_010[1] } : null; - terrainInfo._010_111_010 = (_010_111_010 != null) ? new[] { _010_111_010[0], _010_111_010[1] } : null; - terrainInfo._010_111_000 = (_010_111_000 != null) ? new[] { _010_111_000[0], _010_111_000[1] } : null; - terrainInfo._000_111_000 = (_000_111_000 != null) ? new[] { _000_111_000[0], _000_111_000[1] } : null; - - // 第四列 - terrainInfo._000_110_010 = (_000_110_010 != null) ? new[] { _000_110_010[0], _000_110_010[1] } : null; - terrainInfo._010_110_010 = (_010_110_010 != null) ? new[] { _010_110_010[0], _010_110_010[1] } : null; - terrainInfo._010_110_000 = (_010_110_000 != null) ? new[] { _010_110_000[0], _010_110_000[1] } : null; - terrainInfo._000_110_000 = (_000_110_000 != null) ? new[] { _000_110_000[0], _000_110_000[1] } : null; - - // 第五列 - terrainInfo._110_111_010 = (_110_111_010 != null) ? new[] { _110_111_010[0], _110_111_010[1] } : null; - terrainInfo._010_011_011 = (_010_011_011 != null) ? new[] { _010_011_011[0], _010_011_011[1] } : null; - terrainInfo._011_011_010 = (_011_011_010 != null) ? new[] { _011_011_010[0], _011_011_010[1] } : null; - terrainInfo._010_111_110 = (_010_111_110 != null) ? new[] { _010_111_110[0], _010_111_110[1] } : null; - - // 第六列 - terrainInfo._000_111_011 = (_000_111_011 != null) ? new[] { _000_111_011[0], _000_111_011[1] } : null; - terrainInfo._011_111_111 = (_011_111_111 != null) ? new[] { _011_111_111[0], _011_111_111[1] } : null; - terrainInfo._111_111_011 = (_111_111_011 != null) ? new[] { _111_111_011[0], _111_111_011[1] } : null; - terrainInfo._011_111_000 = (_011_111_000 != null) ? new[] { _011_111_000[0], _011_111_000[1] } : null; - - // 第七列 - terrainInfo._000_111_110 = (_000_111_110 != null) ? new[] { _000_111_110[0], _000_111_110[1] } : null; - terrainInfo._110_111_111 = (_110_111_111 != null) ? new[] { _110_111_111[0], _110_111_111[1] } : null; - terrainInfo._111_111_110 = (_111_111_110 != null) ? new[] { _111_111_110[0], _111_111_110[1] } : null; - terrainInfo._110_111_000 = (_110_111_000 != null) ? new[] { _110_111_000[0], _110_111_000[1] } : null; - - // 第八列 - terrainInfo._011_111_010 = (_011_111_010 != null) ? new[] { _011_111_010[0], _011_111_010[1] } : null; - terrainInfo._010_110_110 = (_010_110_110 != null) ? new[] { _010_110_110[0], _010_110_110[1] } : null; - terrainInfo._110_110_010 = (_110_110_010 != null) ? new[] { _110_110_010[0], _110_110_010[1] } : null; - terrainInfo._010_111_011 = (_010_111_011 != null) ? new[] { _010_111_011[0], _010_111_011[1] } : null; - - // 第九列 - terrainInfo._000_011_011 = (_000_011_011 != null) ? new[] { _000_011_011[0], _000_011_011[1] } : null; - terrainInfo._011_011_011 = (_011_011_011 != null) ? new[] { _011_011_011[0], _011_011_011[1] } : null; - terrainInfo._011_111_011 = (_011_111_011 != null) ? new[] { _011_111_011[0], _011_111_011[1] } : null; - terrainInfo._011_011_000 = (_011_011_000 != null) ? new[] { _011_011_000[0], _011_011_000[1] } : null; - - // 第十列 - terrainInfo._010_111_111 = (_010_111_111 != null) ? new[] { _010_111_111[0], _010_111_111[1] } : null; - terrainInfo._110_111_011 = (_110_111_011 != null) ? new[] { _110_111_011[0], _110_111_011[1] } : null; - terrainInfo._111_111_111 = (_111_111_111 != null) ? new[] { _111_111_111[0], _111_111_111[1] } : null; - terrainInfo._111_111_000 = (_111_111_000 != null) ? new[] { _111_111_000[0], _111_111_000[1] } : null; - - // 第十一列 - terrainInfo._000_111_111 = (_000_111_111 != null) ? new[] { _000_111_111[0], _000_111_111[1] } : null; - terrainInfo._011_111_110 = (_011_111_110 != null) ? new[] { _011_111_110[0], _011_111_110[1] } : null; - terrainInfo._111_111_010 = (_111_111_010 != null) ? new[] { _111_111_010[0], _111_111_010[1] } : null; - - // 第十二列 - terrainInfo._000_110_110 = (_000_110_110 != null) ? new[] { _000_110_110[0], _000_110_110[1] } : null; - terrainInfo._110_111_110 = (_110_111_110 != null) ? new[] { _110_111_110[0], _110_111_110[1] } : null; - terrainInfo._110_110_110 = (_110_110_110 != null) ? new[] { _110_110_110[0], _110_110_110[1] } : null; - terrainInfo._110_110_000 = (_110_110_000 != null) ? new[] { _110_110_000[0], _110_110_000[1] } : null; - + terrainInfo.InitData(); + foreach (var pair in T) + { + terrainInfo.T.Add(pair.Key, new []{ pair.Value[0], pair.Value[1] }); + } + foreach (var pair in M) + { + terrainInfo.M.Add(pair.Key, new []{ pair.Value[0], pair.Value[1] }); + } + foreach (var pair in F) + { + terrainInfo.F.Add(pair.Key, new []{ pair.Value[0], pair.Value[1] }); + } return terrainInfo; } + + /// <summary> + /// 将地形掩码存入 TileSetTerrainInfo 中 + /// </summary> + public void SetTerrainBit(int index, byte type, int[] cellData) + { + if (type == 1) //顶部墙壁 + { + switch (index) + { + case 0: T[TerrainPeering.Center| TerrainPeering.Bottom] = cellData; break; + case 1: T[TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 2: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 3: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Bottom] = cellData; break; + case 4: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 5: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 6: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 7: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 8: T[TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 9: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 10: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 11: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 12: T[TerrainPeering.Top| TerrainPeering.Center| TerrainPeering.Bottom] = cellData; break; + case 13: T[TerrainPeering.Top| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 14: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 15: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Bottom] = cellData; break; + case 16: T[TerrainPeering.Top| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 17: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 18: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 19: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 20: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 21: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 22: break; + case 23: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 24: T[TerrainPeering.Top| TerrainPeering.Center] = cellData; break; + case 25: T[TerrainPeering.Top| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 26: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 27: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center] = cellData; break; + case 28: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 29: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 30: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 31: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Bottom] = cellData; break; + case 32: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 33: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 34: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 35: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 36: T[TerrainPeering.Center] = cellData; break; + case 37: T[TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 38: T[TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 39: T[TerrainPeering.Left| TerrainPeering.Center] = cellData; break; + case 40: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.LeftBottom| TerrainPeering.Bottom] = cellData; break; + case 41: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 42: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 43: T[TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom| TerrainPeering.RightBottom] = cellData; break; + case 44: T[TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 45: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right] = cellData; break; + case 46: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.RightTop| TerrainPeering.Left| TerrainPeering.Center| TerrainPeering.Right| TerrainPeering.Bottom] = cellData; break; + case 47: T[TerrainPeering.LeftTop| TerrainPeering.Top| TerrainPeering.Left| TerrainPeering.Center] = cellData; break; + } + } + else if (type == 2) //侧方墙壁 + { + switch (index) + { + case 0: M[0] = cellData; break; + case 1: M[1] = cellData; break; + case 2: M[2] = cellData; break; + case 3: M[3] = cellData; break; + } + } + else if (type == 3) //地板 + { + F[0] = cellData; + } + } + + /// <summary> + /// 获取指定索引的地形掩码存储的数据 + /// </summary> + public int[] GetTerrainBit(int index, byte type) + { + if (type == 1) //顶部墙壁 + { + switch (index) + { + case 0: + { + if (T.TryGetValue(TerrainPeering.Center | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 1: + { + if (T.TryGetValue(TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 2: + { + if (T.TryGetValue( + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 3: + { + if (T.TryGetValue(TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 4: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 5: + { + if (T.TryGetValue( + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom | + TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 6: + { + if (T.TryGetValue( + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 7: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 8: + { + if (T.TryGetValue( + TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom | + TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 9: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.LeftBottom | TerrainPeering.Bottom | TerrainPeering.RightBottom, + out var cellData)) + return cellData; + } + break; + case 10: + { + if (T.TryGetValue( + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.LeftBottom | TerrainPeering.Bottom | TerrainPeering.RightBottom, + out var cellData)) + return cellData; + } + break; + case 11: + { + if (T.TryGetValue( + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.LeftBottom | + TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 12: + { + if (T.TryGetValue(TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 13: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 14: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 15: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 16: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom | + TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 17: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.LeftBottom | TerrainPeering.Bottom | + TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 18: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.LeftBottom | TerrainPeering.Bottom | + TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 19: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var + cellData)) + return cellData; + } + break; + case 20: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.Bottom | TerrainPeering.RightBottom, + out var cellData)) + return cellData; + } + break; + case 21: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 22: + break; + case 23: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 24: + { + if (T.TryGetValue(TerrainPeering.Top | TerrainPeering.Center, out var cellData)) + return cellData; + } + break; + case 25: + { + if (T.TryGetValue(TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Right, + out var cellData)) + return cellData; + } + break; + case 26: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right, + out var cellData)) + return cellData; + } + break; + case 27: + { + if (T.TryGetValue(TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center, + out var cellData)) + return cellData; + } + break; + case 28: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 29: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.RightTop | + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom | + TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 30: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.RightTop | + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 31: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 32: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.Bottom | TerrainPeering.RightBottom, + out var cellData)) + return cellData; + } + break; + case 33: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.RightTop | + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.LeftBottom | TerrainPeering.Bottom | TerrainPeering.RightBottom, + out var cellData)) + return cellData; + } + break; + case 34: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right | TerrainPeering.Bottom | TerrainPeering.RightBottom, + out var cellData)) + return cellData; + } + break; + case 35: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 36: + { + if (T.TryGetValue(TerrainPeering.Center, out var cellData)) + return cellData; + } + break; + case 37: + { + if (T.TryGetValue(TerrainPeering.Center | TerrainPeering.Right, out var cellData)) + return cellData; + } + break; + case 38: + { + if (T.TryGetValue(TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right, + out var cellData)) + return cellData; + } + break; + case 39: + { + if (T.TryGetValue(TerrainPeering.Left | TerrainPeering.Center, out var cellData)) + return cellData; + } + break; + case 40: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.LeftBottom | TerrainPeering.Bottom, out var cellData)) + return cellData; + } + break; + case 41: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right, out var cellData)) + return cellData; + } + break; + case 42: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | + TerrainPeering.Right, out var cellData)) + return cellData; + } + break; + case 43: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | + TerrainPeering.Bottom | TerrainPeering.RightBottom, out var cellData)) + return cellData; + } + break; + case 44: + { + if (T.TryGetValue( + TerrainPeering.Top | TerrainPeering.RightTop | TerrainPeering.Center | TerrainPeering.Right, + out var cellData)) + return cellData; + } + break; + case 45: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.RightTop | + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right, out var cellData)) + return cellData; + } + break; + case 46: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.RightTop | + TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom, + out var cellData)) + return cellData; + } + break; + case 47: + { + if (T.TryGetValue( + TerrainPeering.LeftTop | TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center, + out var cellData)) + return cellData; + } + break; + } + } + else if (type == 2) //侧方墙壁 + { + switch (index) + { + case 0: + { + if (M.TryGetValue(0, out var cellData)) return cellData; + } + break; + case 1: + { + if (M.TryGetValue(1, out var cellData)) return cellData; + } + break; + case 2: + { + if (M.TryGetValue(2, out var cellData)) return cellData; + } + break; + case 3: + { + if (M.TryGetValue(3, out var cellData)) return cellData; + } + break; + } + } + else if (type == 3) //地板 + { + if (F.TryGetValue(0, out var cellData)) return cellData; + } + + return null; + } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs b/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs index e6f73fe..073464a 100644 --- a/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs +++ b/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs @@ -77,8 +77,51 @@ return None; } - public static void InitTerrain(this TileSetAtlasSource atlasSource, TileSetTerrainInfo terrainInfo) + /// <summary> + /// 将地形掩码数据设置到 TileSetAtlasSource 中 + /// </summary> + public static void InitTerrain(this TileSetAtlasSource atlasSource, TileSetTerrainInfo terrainInfo, int terrainSet, int terrain) { - //terrainInfo._000_110_010 + foreach (var keyValuePair in terrainInfo.T) + { + var pos = terrainInfo.GetPosition(keyValuePair.Value); + var tileData = atlasSource.GetTileData(pos, 0); + tileData.TerrainSet = terrainSet; + tileData.Terrain = terrain; + + var bit = keyValuePair.Key; + if ((bit & LeftTop) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopLeftCorner, 0); + } + if ((bit & Top) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopSide, 0); + } + if ((bit & RightTop) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.TopRightCorner, 0); + } + if ((bit & Left) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.LeftSide, 0); + } + if ((bit & Right) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.RightSide, 0); + } + if ((bit & LeftBottom) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomLeftCorner, 0); + } + if ((bit & Bottom) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomSide, 0); + } + if ((bit & RightBottom) != 0) + { + tileData.SetTerrainPeeringBit(TileSet.CellNeighbor.BottomRightCorner, 0); + } + } } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/manager/EditorTileSetManager.cs b/DungeonShooting_Godot/src/game/manager/EditorTileSetManager.cs index f59fae2..430ec3b 100644 --- a/DungeonShooting_Godot/src/game/manager/EditorTileSetManager.cs +++ b/DungeonShooting_Godot/src/game/manager/EditorTileSetManager.cs @@ -24,194 +24,12 @@ #if TOOLS CustomTileSetPath = GameConfig.RoomTileSetDir; #else - CustomMapPath = GameConfig.RoomTileSetDir; + CustomTileSetPath = GameConfig.RoomTileSetDir; #endif EventManager.AddEventListener(EventEnum.OnTileSetSave, OnTileSetSave); } /// <summary> - /// 将地形掩码存入 TileSetTerrainInfo 中 - /// </summary> - public static void SetTileSetTerrainBit(TileSetTerrainInfo terrain, int index, byte type, int[] cellData) - { - if (type == 1) //顶部墙壁 - { - switch (index) - { - //第一排 - case 0: terrain._000_010_010 = cellData; break; - case 1: terrain._000_011_010 = cellData; break; - case 2: terrain._000_111_010 = cellData; break; - case 3: terrain._000_110_010 = cellData; break; - - case 4: terrain._110_111_010 = cellData; break; - case 5: terrain._000_111_011 = cellData; break; - case 6: terrain._000_111_110 = cellData; break; - case 7: terrain._011_111_010 = cellData; break; - - case 8: terrain._000_011_011 = cellData; break; - case 9: terrain._010_111_111 = cellData; break; - case 10: terrain._000_111_111 = cellData; break; - case 11: terrain._000_110_110 = cellData; break; - - //第二排 - case 12: terrain._010_010_010 = cellData; break; - case 13: terrain._010_011_010 = cellData; break; - case 14: terrain._010_111_010 = cellData; break; - case 15: terrain._010_110_010 = cellData; break; - - case 16: terrain._010_011_011 = cellData; break; - case 17: terrain._011_111_111 = cellData; break; - case 18: terrain._110_111_111 = cellData; break; - case 19: terrain._010_110_110 = cellData; break; - - case 20: terrain._011_011_011 = cellData; break; - case 21: terrain._011_111_110 = cellData; break; - case 22: break; - case 23: terrain._110_111_110 = cellData; break; - - //第三排 - case 24: terrain._010_010_000 = cellData; break; - case 25: terrain._010_011_000 = cellData; break; - case 26: terrain._010_111_000 = cellData; break; - case 27: terrain._010_110_000 = cellData; break; - - case 28: terrain._011_011_010 = cellData; break; - case 29: terrain._111_111_011 = cellData; break; - case 30: terrain._111_111_110 = cellData; break; - case 31: terrain._110_110_010 = cellData; break; - - case 32: terrain._011_111_011 = cellData; break; - case 33: terrain._111_111_111 = cellData; break; - case 34: terrain._110_111_011 = cellData; break; - case 35: terrain._110_110_110 = cellData; break; - - //第四排 - case 36: terrain._000_010_000 = cellData; break; - case 37: terrain._000_011_000 = cellData; break; - case 38: terrain._000_111_000 = cellData; break; - case 39: terrain._000_110_000 = cellData; break; - - case 40: terrain._010_111_110 = cellData; break; - case 41: terrain._011_111_000 = cellData; break; - case 42: terrain._110_111_000 = cellData; break; - case 43: terrain._010_111_011 = cellData; break; - - case 44: terrain._011_011_000 = cellData; break; - case 45: terrain._111_111_000 = cellData; break; - case 46: terrain._111_111_010 = cellData; break; - case 47: terrain._110_110_000 = cellData; break; - } - } - else if (type == 2) //侧方墙壁 - { - switch (index) - { - case 0: terrain._vs = cellData; break; - case 1: terrain._vl = cellData; break; - case 2: terrain._vc = cellData; break; - case 3: terrain._vr = cellData; break; - } - } - else if (type == 3) //地板 - { - terrain._f = cellData; - } - } - - /// <summary> - /// 获取指定索引的地形掩码存储的数据 - /// </summary> - public static int[] GetTileSetTerrainBit(TileSetTerrainInfo terrain, int index, byte type) - { - if (type == 1) //顶部墙壁 - { - switch (index) - { - //第一排 - case 0: return terrain._000_010_010; - case 1: return terrain._000_011_010; - case 2: return terrain._000_111_010; - case 3: return terrain._000_110_010; - - case 4: return terrain._110_111_010; - case 5: return terrain._000_111_011; - case 6: return terrain._000_111_110; - case 7: return terrain._011_111_010; - - case 8: return terrain._000_011_011; - case 9: return terrain._010_111_111; - case 10: return terrain._000_111_111; - case 11: return terrain._000_110_110; - - //第二排 - case 12: return terrain._010_010_010; - case 13: return terrain._010_011_010; - case 14: return terrain._010_111_010; - case 15: return terrain._010_110_010; - - case 16: return terrain._010_011_011; - case 17: return terrain._011_111_111; - case 18: return terrain._110_111_111; - case 19: return terrain._010_110_110; - - case 20: return terrain._011_011_011; - case 21: return terrain._011_111_110; - case 22: break; - case 23: return terrain._110_111_110; - - //第三排 - case 24: return terrain._010_010_000; - case 25: return terrain._010_011_000; - case 26: return terrain._010_111_000; - case 27: return terrain._010_110_000; - - case 28: return terrain._011_011_010; - case 29: return terrain._111_111_011; - case 30: return terrain._111_111_110; - case 31: return terrain._110_110_010; - - case 32: return terrain._011_111_011; - case 33: return terrain._111_111_111; - case 34: return terrain._110_111_011; - case 35: return terrain._110_110_110; - - //第四排 - case 36: return terrain._000_010_000; - case 37: return terrain._000_011_000; - case 38: return terrain._000_111_000; - case 39: return terrain._000_110_000; - - case 40: return terrain._010_111_110; - case 41: return terrain._011_111_000; - case 42: return terrain._110_111_000; - case 43: return terrain._010_111_011; - - case 44: return terrain._011_011_000; - case 45: return terrain._111_111_000; - case 46: return terrain._111_111_010; - case 47: return terrain._110_110_000; - } - } - else if (type == 2) //侧方墙壁 - { - switch (index) - { - case 0: return terrain._vs; - case 1: return terrain._vl; - case 2: return terrain._vc; - case 3: return terrain._vr; - } - } - else if (type == 3) //地板 - { - return terrain._f; - } - - return null; - } - - /// <summary> /// 保存TileSetConfig数据 /// </summary> public static void SaveTileSetConfig() diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs index 1b87644..3e92f1b 100644 --- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/TileSetEditorTerrainPanel.cs @@ -85,7 +85,7 @@ var terrain = ((TileSetSourceInfo)obj).Terrain; _topGrid1.ForEach(cell => { - var ints = EditorTileSetManager.GetTileSetTerrainBit(terrain, cell.Index, cell.Data); + var ints = terrain.GetTerrainBit( cell.Index, cell.Data); if (ints != null) { cell.CellNode.Instance.SetCell(new Rect2I(ints[0], ints[1], GameConfig.TileCellSize, GameConfig.TileCellSize)); @@ -93,7 +93,7 @@ }); _topGrid2.ForEach(cell => { - var ints = EditorTileSetManager.GetTileSetTerrainBit(terrain, cell.Index, cell.Data); + var ints = terrain.GetTerrainBit(cell.Index, cell.Data); if (ints != null) { cell.CellNode.Instance.SetCell(new Rect2I(ints[0], ints[1], GameConfig.TileCellSize, GameConfig.TileCellSize)); @@ -101,7 +101,7 @@ }); _topGrid3.ForEach(cell => { - var ints = EditorTileSetManager.GetTileSetTerrainBit(terrain, cell.Index, cell.Data); + var ints = terrain.GetTerrainBit( cell.Index, cell.Data); if (ints != null) { cell.CellNode.Instance.SetCell(new Rect2I(ints[0], ints[1], GameConfig.TileCellSize, GameConfig.TileCellSize)); diff --git a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainCellDropHandler.cs b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainCellDropHandler.cs index 68bfe41..7427078 100644 --- a/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainCellDropHandler.cs +++ b/DungeonShooting_Godot/src/game/ui/tileSetEditorTerrain/up/TerrainCellDropHandler.cs @@ -74,7 +74,7 @@ private void SetTerrainBitData(int[] cellData) { - EditorTileSetManager.SetTileSetTerrainBit(_panel.EditorPanel.TileSetSourceInfo.Terrain, _cell.Index, _cell.Data, cellData); + _panel.EditorPanel.TileSetSourceInfo.Terrain.SetTerrainBit(_cell.Index, _cell.Data, cellData); EventManager.EmitEvent(EventEnum.OnTileSetDirty); } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/test/TestLoadTileSetConfig.cs b/DungeonShooting_Godot/src/test/TestLoadTileSetConfig.cs index a375355..2f87a29 100644 --- a/DungeonShooting_Godot/src/test/TestLoadTileSetConfig.cs +++ b/DungeonShooting_Godot/src/test/TestLoadTileSetConfig.cs @@ -1,12 +1,12 @@ using Godot; using System; -using System.Collections.Generic; using System.Linq; using System.Text.Json; +using Godot.Collections; public partial class TestLoadTileSetConfig : Node2D { - private Dictionary<string, TileSetSplit> _tileSetConfig; + private System.Collections.Generic.Dictionary<string, TileSetSplit> _tileSetConfig; private TileMap _tileMap; public override void _Ready() @@ -19,6 +19,13 @@ _tileMap.TileSet = tileSet; _tileMap.SetCell(0, new Vector2I(5, 5), 0, new Vector2I(0, 0)); + _tileMap.SetCellsTerrainConnect(0, new Array<Vector2I>() + { + new Vector2I(10, 10), + new Vector2I(10, 11), + new Vector2I(10, 12), + new Vector2I(11, 12), + }, 0, 0, false); } //初始化TileSet配置 @@ -26,7 +33,7 @@ { //加载房间配置信息 var asText = ResourceManager.LoadText("res://" + GameConfig.RoomTileSetDir + GameConfig.TileSetConfigFile); - _tileSetConfig = JsonSerializer.Deserialize<Dictionary<string, TileSetSplit>>(asText); + _tileSetConfig = JsonSerializer.Deserialize<System.Collections.Generic.Dictionary<string, TileSetSplit>>(asText); //加载所有数据 foreach (var tileSetSplit in _tileSetConfig)