using Godot; using System; using System.Collections.Generic; using System.Linq; public partial class TileMapping : Node { /// /// From tile coordinates to pixel coordinates. If null, use the offset instead. /// private Dictionary pixelMap; /// /// If pixelMap is null, use this offset to convert tile coordinates to pixel coordinates. /// private Vector2I pixelOffset; private Rect2I tileRect; public TileMapping(Dictionary map) { pixelMap = map; pixelOffset = new Vector2I(-int.MaxValue, -int.MaxValue); } public TileMapping(Vector2I offset, Rect2I rect) { pixelMap = null; pixelOffset = offset; tileRect = rect; } public void Apply(TileMapLayer layer) { // if pixelMap is not null, use all the pairs in pixelMap to set the tiles. if (pixelMap != null) { var sourceId = layer.GetCellSourceId(pixelMap.Keys.First()); foreach (var pair in pixelMap) { layer.SetCell(pair.Key, sourceId, pair.Value); } } else { var sourceId = layer.GetCellSourceId(tileRect.Position); GD.Print(tileRect); for (int x = tileRect.Position.X; x < tileRect.End.X; x++) { for (int y = tileRect.Position.Y; y < tileRect.End.Y; y++) { var pos = new Vector2I(x, y); GD.Print($"{pos} -> {pos + pixelOffset}"); layer.SetCell(pos, sourceId, pos + pixelOffset); } } } } }