Exemple #1
0
        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,
                },
            });
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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,
                },
            });
        }