public SampleSet Load(string filename) { var srcFilename = filename; // Hack for tsx files. Should handle this more properly in future var tileset = TiledUtil.LoadTileset(filename); tileset.FirstGid = 1; var map = new Map { CellWidth = tileset.TileWidth, CellHeight = tileset.TileHeight, Tilesets = new[] { tileset }, TiledVersion = "1.1.6", RenderOrder = RenderOrder.rightdown, }; var tilesByName = new Dictionary <string, Tile>(); TiledMapImporter.AddTileset(tilesByName, tileset); // TODO: Other directions var directions = DirectionSet.Cartesian2d; map.Orientation = Orientation.orthogonal; var samples = new ITopoArray <Tile> [0]; return(new SampleSet { Directions = directions, Samples = samples, TilesByName = tilesByName, ExportOptions = new TiledExportOptions { Template = map, SrcFileName = srcFilename, }, }); }
public void TestHexagonalRoundTrip(int rotateCw, bool reflectX) { var tile = new Tile(123); var gid = TiledUtil.TileToGid(new Tile(new RotatedTile { RotateCw = rotateCw, ReflectX = reflectX, Tile = tile }), TiledLib.Orientation.hexagonal); var tile2 = (RotatedTile)TiledUtil.GidToTile(gid, TiledLib.Orientation.hexagonal).Value; Assert.AreEqual(tile, tile2.Tile); Assert.AreEqual(rotateCw, tile2.RotateCw); Assert.AreEqual(reflectX, tile2.ReflectX); }
public void Export(TileModel model, TilePropagator tilePropagator, string filename, DeBroglieConfig config, ExportOptions exportOptions) { var tiledExportOptions = exportOptions as TiledExportOptions; if (tiledExportOptions == null) { throw new System.Exception($"Cannot export from {exportOptions.TypeDescription} to .tmx"); } var map = tiledExportOptions.Template; var srcFilename = tiledExportOptions.SrcFileName; var layerArray = tilePropagator.ToArray(); map.Layers = new BaseLayer[layerArray.Topology.Depth]; for (var z = 0; z < layerArray.Topology.Depth; z++) { map.Layers[z] = TiledUtil.MakeTileLayer(map, layerArray, z); } map.Width = map.Layers[0].Width; map.Height = map.Layers[0].Height; TiledUtil.Save(filename, map); // Check for any external files that may also need copying foreach (var tileset in map.Tilesets) { if (tileset is ExternalTileset e) { var srcPath = Path.Combine(Path.GetDirectoryName(srcFilename), e.source); var destPath = Path.Combine(Path.GetDirectoryName(filename), e.source); if (File.Exists(srcPath) && !File.Exists(destPath)) { File.Copy(srcPath, destPath); } } if (tileset.ImagePath != null) { var srcImagePath = Path.Combine(Path.GetDirectoryName(srcFilename), tileset.ImagePath); var destImagePath = Path.Combine(Path.GetDirectoryName(filename), tileset.ImagePath); if (File.Exists(srcImagePath) && !File.Exists(destImagePath)) { File.Copy(srcImagePath, destImagePath); } } } }
public SampleSet Load(string filename) { var srcFilename = filename; var map = TiledUtil.Load(filename); // Scan tilesets for tiles with a custom property "name" var tilesByName = new Dictionary <string, Tile>(); foreach (var tileset in map.Tilesets) { AddTileset(tilesByName, tileset); } ITopoArray <Tile> sample; if (map.Orientation == Orientation.hexagonal) { // Read a single layer var layer = (TileLayer)map.Layers[0]; sample = TiledUtil.ReadLayer(map, layer); } else { // Read all the layers into a 3d array. var tileLayers = map.Layers .Where(x => x is TileLayer) .Cast <TileLayer>() .ToList(); Tile[,,] results = null; GridTopology topology = null; for (var z = 0; z < tileLayers.Count; z++) { var layer = tileLayers[z]; var layerArray = TiledUtil.ReadLayer(map, layer); if (z == 0) { topology = layerArray.Topology.AsGridTopology(); results = new Tile[topology.Width, topology.Height, tileLayers.Count]; } for (var y = 0; y < topology.Height; y++) { for (var x = 0; x < topology.Width; x++) { results[x, y, z] = layerArray.Get(x, y); } } } if (tileLayers.Count > 1 && topology.Directions.Type == DirectionSetType.Cartesian2d) { topology = new GridTopology(DirectionSet.Cartesian3d, map.Width, map.Height, tileLayers.Count, false, false, false); } else { topology = new GridTopology(topology.Directions, topology.Width, topology.Height, tileLayers.Count, false, false, false); } sample = TopoArray.Create(results, topology); } return(new SampleSet { Directions = sample.Topology.AsGridTopology().Directions, Samples = new[] { sample }, TilesByName = tilesByName, ExportOptions = new TiledExportOptions { Template = map, SrcFileName = srcFilename, }, }); }