diff --git a/DungeonShooting_Godot/resource/tileSet/map2/TileSet2.tres b/DungeonShooting_Godot/resource/tileSet/map2/TileSet2.tres index 76ef1e9..fc1996b 100644 --- a/DungeonShooting_Godot/resource/tileSet/map2/TileSet2.tres +++ b/DungeonShooting_Godot/resource/tileSet/map2/TileSet2.tres @@ -475,9 +475,11 @@ 11:3/0/terrains_peering_bit/top_left_corner = 0 11:3/0/terrains_peering_bit/top_side = 0 0:4/0 = 0 +0:4/0/terrain_set = 0 0:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) 0:4/0/physics_layer_0/angular_velocity = 0.0 1:4/0 = 0 +1:4/0/terrain_set = 0 1:4/0/physics_layer_0/linear_velocity = Vector2(0, 0) 1:4/0/physics_layer_0/angular_velocity = 0.0 1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) diff --git a/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs b/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs index c3979fd..43e8f10 100644 --- a/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs +++ b/DungeonShooting_Godot/src/framework/map/DungeonTileMap.cs @@ -54,7 +54,7 @@ //铺房间 if (roomInfo.RoomSplit == null) //自动填充的矩形房间, 现已经弃用 { - FillRect(GameConfig.FloorMapLayer, config.Floor2, roomInfo.Position + Vector2.One, + FillRect(GameConfig.FloorMapLayer, config.Floor, roomInfo.Position + Vector2.One, roomInfo.Size - new Vector2(2, 2)); FillRect(GameConfig.TopMapLayer, config.IN_LT, roomInfo.Position, Vector2.One); @@ -262,7 +262,7 @@ } //填充交叉点 - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, aisleRect.Cross.Position, aisleRect.Cross.Size); + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, aisleRect.Cross.Position, aisleRect.Cross.Size); //墙壁, 0横向, 1纵向 if (dir1 == 0) @@ -529,7 +529,7 @@ //横向过道 private void FullHorizontalAisle(AutoTileConfig config, Rect2 rect) { - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, rect.Position + new Vector2(0, 1), rect.Size - new Vector2(0, 2)); + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(0, 1), rect.Size - new Vector2(0, 2)); FillRect(GameConfig.MiddleMapLayer, config.T, rect.Position, new Vector2(rect.Size.X, 1)); FillRect(GameConfig.TopMapLayer, config.B, rect.Position + new Vector2(0, rect.Size.Y - 1), new Vector2(rect.Size.X, 1)); } @@ -537,7 +537,7 @@ //纵向过道 private void FullVerticalAisle(AutoTileConfig config, Rect2 rect) { - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, rect.Position + new Vector2(1, 0), rect.Size - new Vector2(2, 0)); + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, 0), rect.Size - new Vector2(2, 0)); FillRect(GameConfig.TopMapLayer, config.L, rect.Position, new Vector2(1, rect.Size.Y)); FillRect(GameConfig.TopMapLayer, config.R, rect.Position + new Vector2(rect.Size.X - 1, 0), new Vector2(1, rect.Size.Y)); } @@ -549,7 +549,7 @@ ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); if (doorInfo == null) { - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, rect.Position + new Vector2(-1, 1), + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); } else @@ -558,7 +558,7 @@ FillRect(GameConfig.MiddleMapLayer, config.OUT_LB, rect.Position + new Vector2(-1, 0), Vector2.One); FillRect(GameConfig.TopMapLayer, config.OUT_LT, rect.Position + new Vector2(-1, 3), Vector2.One); - FillRect(GameConfig.FloorMapLayer, config.Floor2, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); + FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(-1, 1), new Vector2(1, rect.Size.Y - 2)); //生成门的导航区域 var x = rect.Position.X * GameConfig.TileCellSize; var y = rect.Position.Y * GameConfig.TileCellSize; @@ -584,7 +584,7 @@ ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); if (doorInfo == null) { - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); } else { @@ -592,7 +592,7 @@ FillRect(GameConfig.MiddleMapLayer, config.OUT_RB, rect.Position + new Vector2(rect.Size.X, 0), Vector2.One); FillRect(GameConfig.TopMapLayer, config.OUT_RT, rect.Position + new Vector2(rect.Size.X, 3), Vector2.One); - FillRect(GameConfig.FloorMapLayer, config.Floor2, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); + FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(rect.Size.X, 1), new Vector2(1, rect.Size.Y - 2)); //生成门的导航区域 var x = rect.Position.X * GameConfig.TileCellSize; var y = rect.Position.Y * GameConfig.TileCellSize; @@ -618,7 +618,7 @@ ClearRect(GameConfig.TopMapLayer, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); if (doorInfo == null) { - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, rect.Position + new Vector2(1, -1), + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); } else @@ -626,7 +626,7 @@ FillRect(GameConfig.TopMapLayer, config.OUT_RT, rect.Position + new Vector2(0, -1), Vector2.One); FillRect(GameConfig.TopMapLayer, config.OUT_LT, rect.Position + new Vector2(3, -1), Vector2.One); - FillRect(GameConfig.FloorMapLayer, config.Floor2, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); + FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(1, -1), new Vector2(rect.Size.X - 2, 1)); //生成门的导航区域 var x = rect.Position.X * GameConfig.TileCellSize; var y = rect.Position.Y * GameConfig.TileCellSize; @@ -652,14 +652,14 @@ ClearRect(GameConfig.MiddleMapLayer, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); if (doorInfo == null) { - FillRect(GameConfig.AisleFloorMapLayer, config.Floor2, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); + FillRect(GameConfig.AisleFloorMapLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); } else { FillRect(GameConfig.MiddleMapLayer, config.OUT_RB, rect.Position + new Vector2(0, rect.Size.Y), Vector2.One); FillRect(GameConfig.MiddleMapLayer, config.OUT_LB, rect.Position + new Vector2(3, rect.Size.Y), Vector2.One); - FillRect(GameConfig.FloorMapLayer, config.Floor2, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); + FillRect(GameConfig.FloorMapLayer, config.Floor, rect.Position + new Vector2(1, rect.Size.Y), new Vector2(rect.Size.X - 2, 1)); //生成门的导航区域 var x = rect.Position.X * GameConfig.TileCellSize; var y = rect.Position.Y * GameConfig.TileCellSize; diff --git a/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs b/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs new file mode 100644 index 0000000..c256e59 --- /dev/null +++ b/DungeonShooting_Godot/src/framework/map/tileSet/TerrainPeering.cs @@ -0,0 +1,76 @@ + +using Godot; + +/// +/// 地形掩码 +/// +public static class TerrainPeering +{ + /// + /// 无 + /// + public const uint None = 0; + /// + /// 左上 + /// + public const uint LeftTop = 0b1; + /// + /// 上 + /// + public const uint Top = 0b10; + /// + /// 右上 + /// + public const uint RightTop = 0b100; + /// + /// 左 + /// + public const uint Left = 0b1000; + /// + /// 中心 + /// + public const uint Center = 0b10000; + /// + /// 右 + /// + public const uint Right = 0b100000; + /// + /// 左下 + /// + public const uint LeftBottom = 0b1000000; + /// + /// 下 + /// + public const uint Bottom = 0b10000000; + /// + /// 右下 + /// + public const uint RightBottom = 0b100000000; + + public static uint GetTerrainPeeringValue(this TileData tileData) + { + if (tileData.Terrain != -1 && tileData.TerrainSet != -1) + { + var value = Center; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopLeftCorner) >= 0) + value |= LeftTop; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopSide) >= 0) + value |= Top; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopRightCorner) >= 0) + value |= RightTop; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.LeftSide) >= 0) + value |= Left; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.RightSide) >= 0) + value |= Right; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomLeftCorner) >= 0) + value |= LeftBottom; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomSide) >= 0) + value |= Bottom; + if (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomRightCorner) >= 0) + value |= RightBottom; + return value; + } + + return None; + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs b/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs index d294245..686d9b5 100644 --- a/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs +++ b/DungeonShooting_Godot/src/game/room/AutoTileConfig.cs @@ -15,7 +15,6 @@ public TileCellData L = new TileCellData(0, new Vector2I(3, 3)); public TileCellData T = new TileCellData(0, new Vector2I(2, 7)); public TileCellData B = new TileCellData(0, new Vector2I(2, 2)); - public TileCellData Floor = new TileCellData(0, new Vector2I(0, 8)); public TileCellData OUT_LT = new TileCellData(0, new Vector2I(1, 2)); public TileCellData OUT_LB = new TileCellData(0, new Vector2I(1, 7)); @@ -64,15 +63,136 @@ //----------------------------------------------------------- - public TileCellData Floor2 = new TileCellData(0, new Vector2I(0, 4)); + public TileCellData Floor = new TileCellData(0, new Vector2I(0, 4)); public TileCellData TopMask = new TileCellData(0, new Vector2I(9, 2)); public TileCellData WallLeft = new TileCellData(0, new Vector2I(1, 4)); public TileCellData WallCenter = new TileCellData(0, new Vector2I(2, 4)); public TileCellData WallRight = new TileCellData(0, new Vector2I(3, 4)); public TileCellData WallSingle = new TileCellData(0, new Vector2I(4, 4)); + + //----------------------------- 所有自动图块数据 ----------------------------- + //----------------------------- 命名规则: Auto_ + LT + T + RT + _ + L + C + R + _ + LB + B + RB + //第一列 + public TileCellData Auto_000_010_010; + public TileCellData Auto_010_010_010; + public TileCellData Auto_010_010_000; + public TileCellData Auto_000_010_000; + //第二列 + public TileCellData Auto_000_011_010; + public TileCellData Auto_010_011_010; + public TileCellData Auto_010_011_000; + public TileCellData Auto_000_011_000; + //第三列 + public TileCellData Auto_000_111_010; + public TileCellData Auto_010_111_010; + public TileCellData Auto_010_111_000; + public TileCellData Auto_000_111_000; + //第四列 + public TileCellData Auto_000_110_010; + public TileCellData Auto_010_110_010; + public TileCellData Auto_010_110_000; + public TileCellData Auto_000_110_000; + //第五列 + public TileCellData Auto_110_111_010; + public TileCellData Auto_010_011_011; + public TileCellData Auto_011_011_010; + public TileCellData Auto_010_111_110; + //第六列 + public TileCellData Auto_000_111_011; + public TileCellData Auto_011_111_111; + public TileCellData Auto_111_111_011; + public TileCellData Auto_011_111_000; + //第七列 + public TileCellData Auto_000_111_110; + public TileCellData Auto_110_111_111; + public TileCellData Auto_111_111_110; + public TileCellData Auto_110_111_000; + //第八列 + public TileCellData Auto_011_111_010; + public TileCellData Auto_010_110_110; + public TileCellData Auto_110_110_010; + public TileCellData Auto_010_111_011; + //------------------------------------------------------------------------- + public AutoTileConfig(int sourceId, TileSetAtlasSource atlasSource) + { + var tilesCount = atlasSource.GetTilesCount(); + for (var i = 0; i < tilesCount; i++) + { + var pos = atlasSource.GetTileId(i); + var tileData = atlasSource.GetTileData(pos, 0); + if (tileData.Terrain != -1 && tileData.TerrainSet != -1) //判断是否使用掩码 + { + HandlerTileData(tileData.GetTerrainPeeringValue(), sourceId, pos); + } + } + } + public int GetLayer2(Vector2I atlasCoords) { - return atlasCoords == Floor2.AutoTileCoords ? GameConfig.FloorMapLayer : GameConfig.TopMapLayer; + return atlasCoords == Floor.AutoTileCoords ? GameConfig.FloorMapLayer : GameConfig.TopMapLayer; + } + + private void HandlerTileData(uint peeringValue, int sourceId, Vector2I pos) + { + var temp = new TileCellData(sourceId, pos); + switch (peeringValue) + { + case TerrainPeering.Center | TerrainPeering.Bottom: + Auto_000_010_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Bottom: + Auto_010_010_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Center: + Auto_010_010_000 = temp; + break; + case TerrainPeering.Center: + Auto_000_010_000 = temp; + break; + + case TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom: + Auto_000_011_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom: + Auto_010_011_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Center | TerrainPeering.Right: + Auto_010_011_000 = temp; + break; + case TerrainPeering.Center | TerrainPeering.Right: + Auto_000_011_000 = temp; + break; + + case TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom: + Auto_000_111_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right | TerrainPeering.Bottom: + Auto_010_111_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right: + Auto_010_111_000 = temp; + break; + case TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Right: + Auto_000_111_000 = temp; + break; + + case TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Bottom: + Auto_000_110_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center | TerrainPeering.Bottom: + Auto_010_110_010 = temp; + break; + case TerrainPeering.Top | TerrainPeering.Left | TerrainPeering.Center: + Auto_010_110_000 = temp; + break; + case TerrainPeering.Left | TerrainPeering.Center: + Auto_000_110_000 = temp; + break; + + default: + Debug.LogError("未知PeeringValue: " + peeringValue); + break; + } } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs index b04ede1..b9be331 100644 --- a/DungeonShooting_Godot/src/game/room/DungeonManager.cs +++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs @@ -205,7 +205,7 @@ yield return 0; //填充地牢 - AutoTileConfig = new AutoTileConfig(); + AutoTileConfig = new AutoTileConfig(0, World.TileRoot.TileSet.GetSource(0) as TileSetAtlasSource); _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 28cd8c7..bde0a5d 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/MapEditorPanel.cs @@ -31,8 +31,8 @@ //var tileSet = ResourceManager.Load(ResourcePath.resource_tileSet_map1_TileSet1_tres); //var tileSetAtlasSource = (TileSetAtlasSource)tileSet.GetSource(0); //tileSetAtlasSource.Texture = ImageTexture.CreateFromImage(Image.LoadFromFile("resource/tileSprite/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png")); - S_TileMap.Instance.TileSet = tileSet; - + S_TileMap.Instance.InitTileSet(tileSet); + S_TabContainer.Instance.SetTabTitle(0, "对象"); S_TabContainer.Instance.SetTabTitle(1, "图层"); //S_MapLayer.Instance.Init(S_MapLayer); diff --git a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs index d7383f9..bf91b08 100644 --- a/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs +++ b/DungeonShooting_Godot/src/game/ui/mapEditor/tileView/EditorTileMap.cs @@ -117,7 +117,7 @@ private int _sourceId = 0; private int _terrainSet = 0; private int _terrain = 0; - private AutoTileConfig _autoTileConfig = new AutoTileConfig(); + private AutoTileConfig _autoTileConfig; /// /// 正在编辑的房间数据 @@ -151,7 +151,20 @@ //------------------------------- private MapEditor.TileMap _editorTileMap; private EventFactory _eventFactory; + + /// + /// 初始化图块集。 + /// + /// 要初始化的图块集 + public void InitTileSet(TileSet tileSet) + { + TileSet = tileSet; + // 创建AutoTileConfig对象 + // 使用第一个图块集源作为参数 + _autoTileConfig = new AutoTileConfig(0, tileSet.GetSource(0) as TileSetAtlasSource); + } + public void SetUiNode(IUiNode uiNode) { _editorTileMap = (MapEditor.TileMap)uiNode; @@ -586,7 +599,7 @@ //绘制单个自动贴图 private void SetSingleAutoCell(Vector2I position) { - var tileCellData = _autoTileConfig.Floor2; + var tileCellData = _autoTileConfig.Floor; SetCell(GetFloorLayer(), position, tileCellData.SourceId, tileCellData.AutoTileCoords); //SetCell(GetFloorLayer(), position, _sourceId, _autoTileConfig.Floor.AutoTileCoords); if (!_autoCellLayerGrid.Contains(position.X, position.Y)) @@ -620,7 +633,7 @@ { for (var j = 0; j < height; j++) { - var tileCellData = _autoTileConfig.Floor2; + var tileCellData = _autoTileConfig.Floor; SetCell(GetFloorLayer(), new Vector2I(start.X + i, start.Y + j), tileCellData.SourceId, tileCellData.AutoTileCoords); } } diff --git a/DungeonShooting_Godot/src/test/TestNewTerrain.cs b/DungeonShooting_Godot/src/test/TestNewTerrain.cs index 27d3958..fc7cb8d 100644 --- a/DungeonShooting_Godot/src/test/TestNewTerrain.cs +++ b/DungeonShooting_Godot/src/test/TestNewTerrain.cs @@ -6,17 +6,65 @@ /// public partial class TestNewTerrain : Node2D { - private TileMap _tileMap; private Vector2[][] _polygonData; private NavigationRegion2D _navigationRegion; public override void _Ready() { + Visible = false; _tileMap = GetNode("TileMap2"); _navigationRegion = GetNode("TileMap2/NavigationRegion2D"); _navigationRegion.BakeFinished += BakeFinished; RunTest(); + + + var tileSet = _tileMap.TileSet; + + var terrainSetsCount = tileSet.GetTerrainSetsCount(); + Debug.Log($"terrainSetsCount: {terrainSetsCount}"); + for (var i = 0; i < terrainSetsCount; i++) + { + Debug.Log("----------------------------------------------------"); + var count = tileSet.GetTerrainsCount(i); + Debug.Log($"terrainSet: {i} - {count} - {tileSet.GetTerrainSetMode(i)}"); + for (int j = 0; j < count; j++) + { + var terrainName = tileSet.GetTerrainName(i, j); + Debug.Log($"terrainName: {terrainName}"); + } + } + + var tileSetSource = tileSet.GetSource(0); + if (tileSetSource is TileSetAtlasSource atlasSource) + { + var tilesCount = tileSetSource.GetTilesCount(); + for (int i = 0; i < tilesCount; i++) + { + var pos = tileSetSource.GetTileId(i); + var tileData = atlasSource.GetTileData(pos, 0); + Debug.Log($"pos: {pos}, terrain: {tileData.Terrain}, terrainSet: {tileData.TerrainSet}, peering: {tileData.GetTerrainPeeringValue() & TerrainPeering.Top}"); + if (tileData.Terrain != -1 && tileData.TerrainSet != -1) + { + var str = ""; + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopLeftCorner) + 1).ToString(); + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopSide) + 1).ToString(); + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.TopRightCorner) + 1).ToString() + "\n"; + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.LeftSide) + 1).ToString(); + str += "1"; + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.RightSide) + 1).ToString() + "\n"; + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomLeftCorner) + 1).ToString(); + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomSide) + 1).ToString(); + str += (tileData.GetTerrainPeeringBit(TileSet.CellNeighbor.BottomRightCorner) + 1).ToString(); + GD.Print(str); + } + else + { + GD.Print("000\n000\n000"); + } + } + } + } private void BakeFinished()