diff --git a/Tiled/TMXGlueLib/DataTypes/ReducedTileMapInfo.TiledMapSave.cs b/Tiled/TMXGlueLib/DataTypes/ReducedTileMapInfo.TiledMapSave.cs index 505110890..c5bfd4bff 100644 --- a/Tiled/TMXGlueLib/DataTypes/ReducedTileMapInfo.TiledMapSave.cs +++ b/Tiled/TMXGlueLib/DataTypes/ReducedTileMapInfo.TiledMapSave.cs @@ -150,12 +150,6 @@ private static void CreateFromTiledMapSave(TiledMapSave tiledMapSave, string tmx firstGid = firstObjectWithTexture?.gid; } - else - { - //Image layers and any other future layer types in Tiled are not supported at - //this time. Just move onto the next layer and ignore this one. - continue; - } if (firstGid > 0) { @@ -186,6 +180,14 @@ private static void CreateFromTiledMapSave(TiledMapSave tiledMapSave, string tmx } } } + else if (tiledLayer is MapImageLayer mapImageLayer) + { + if (!string.IsNullOrEmpty(mapImageLayer.ImageObject?.Source)) + { + directory = tmxDirectory; + texture = FlatRedBall.IO.FileManager.RemoveDotDotSlash(directory + mapImageLayer.ImageObject.Source); + } + } int tileWidth = tiledMapSave.tilewidth; int tileHeight = tiledMapSave.tileheight; @@ -217,6 +219,11 @@ private static void CreateFromTiledMapSave(TiledMapSave tiledMapSave, string tmx { AddObjectLayerTiles(reducedLayerInfo, tiledLayer, tileSet, tileWidth, tileHeight); } + + else if (tiledLayer is MapImageLayer mapImageLayer) + { + AddImageLayerTiles(reducedLayerInfo, mapImageLayer, tileWidth, tileHeight); + } } } @@ -347,6 +354,42 @@ private static void AddObjectLayerTiles(ReducedLayerInfo reducedLayerInfo, Abstr } } + private static void AddImageLayerTiles(ReducedLayerInfo reducedLayerInfo, MapImageLayer mapImageLayer, int tileWidth, int tileHeight) + { + ///////////////////////Early Out///////////////////////// + if (mapImageLayer.ImageObject == null) + { + return; + } + ///////////////////////End Early Out///////////////////////// + + ReducedQuadInfo quad = new DataTypes.ReducedQuadInfo(); + + quad.LeftQuadCoordinate = 0; + quad.BottomQuadCoordinate = (float)-mapImageLayer.ImageObject.Height; + + quad.OverridingWidth = mapImageLayer.ImageObject.Width; + quad.OverridingHeight = mapImageLayer.ImageObject.Height; + + quad.RotationDegrees = (float)0; + + // todo... + quad.FlipFlags = 0; + + int leftPixelCoord = 0; + int topPixelCoord = 0; + int rightPixelCoord = (int)mapImageLayer.ImageObject.Width; + int bottomPixelCoord = (int)mapImageLayer.ImageObject.Height; + + quad.LeftTexturePixel = (ushort)Math.Min(leftPixelCoord, rightPixelCoord); + quad.TopTexturePixel = (ushort)Math.Min(topPixelCoord, bottomPixelCoord); + + quad.Name = mapImageLayer.Name; + + reducedLayerInfo?.Quads.Add(quad); + + } + private static void CreateFromSpriteEditorScene(TiledMapSave tiledMapSave, float scale, float zOffset, FileReferenceType referenceType, ReducedTileMapInfo toReturn) { var ses = tiledMapSave.ToSceneSave(scale, referenceType);