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()