diff --git a/DotTiled.Tests/Serialization/TestData.cs b/DotTiled.Tests/Serialization/TestData.cs index 98a59be..005bc82 100644 --- a/DotTiled.Tests/Serialization/TestData.cs +++ b/DotTiled.Tests/Serialization/TestData.cs @@ -37,6 +37,7 @@ public static partial class TestData ["Serialization/TestData/Map/map_with_embedded_tileset/map-with-embedded-tileset", (string f) => TestData.MapWithEmbeddedTileset(), Array.Empty()], ["Serialization/TestData/Map/map_with_external_tileset/map-with-external-tileset", (string f) => TestData.MapWithExternalTileset(f), Array.Empty()], ["Serialization/TestData/Map/map_with_flippingflags/map-with-flippingflags", (string f) => TestData.MapWithFlippingFlags(f), Array.Empty()], + ["Serialization/TestData/Map/map_external_tileset_multi/map-external-tileset-multi", (string f) => TestData.MapExternalTilesetMulti(f), Array.Empty()], ]; private static CustomTypeDefinition[] typedefs = [ diff --git a/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.cs b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.cs new file mode 100644 index 0000000..24651b6 --- /dev/null +++ b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.cs @@ -0,0 +1,121 @@ +using System.Globalization; + +namespace DotTiled.Tests; + +public partial class TestData +{ + public static Map MapExternalTilesetMulti(string fileExt) => new Map + { + Class = "", + Orientation = MapOrientation.Orthogonal, + Width = 5, + Height = 5, + TileWidth = 32, + TileHeight = 32, + Infinite = false, + HexSideLength = null, + StaggerAxis = null, + StaggerIndex = null, + ParallaxOriginX = 0, + ParallaxOriginY = 0, + RenderOrder = RenderOrder.RightDown, + CompressionLevel = -1, + BackgroundColor = Color.Parse("#00000000", CultureInfo.InvariantCulture), + Version = "1.10", + TiledVersion = "1.11.0", + NextLayerID = 2, + NextObjectID = 1, + Tilesets = [ + new Tileset + { + TileOffset = new TileOffset + { + X = 1, + Y = 5 + }, + Version = "1.10", + TiledVersion = "1.11.0", + FirstGID = 1, + Name = "multi-tileset", + TileWidth = 256, + TileHeight = 96, + TileCount = 2, + Columns = 0, + Source = $"multi-tileset.{(fileExt == "tmx" ? "tsx" : "tsj")}", + Grid = new Grid + { + Orientation = GridOrientation.Orthogonal, + Width = 1, + Height = 1 + }, + Properties = new Dictionary + { + ["tilesetbool"] = new BoolProperty { Name = "tilesetbool", Value = true }, + ["tilesetcolor"] = new ColorProperty { Name = "tilesetcolor", Value = Color.Parse("#ffff0000", CultureInfo.InvariantCulture) }, + ["tilesetfile"] = new FileProperty { Name = "tilesetfile", Value = "" }, + ["tilesetfloat"] = new FloatProperty { Name = "tilesetfloat", Value = 5.2f }, + ["tilesetint"] = new IntProperty { Name = "tilesetint", Value = 9 }, + ["tilesetobject"] = new ObjectProperty { Name = "tilesetobject", Value = 0 }, + ["tilesetstring"] = new StringProperty { Name = "tilesetstring", Value = "hello world!" } + }, + Tiles = [ + new Tile + { + ID = 0, + Width = 256, + Height = 96, + Image = new Image + { + Format = ImageFormat.Png, + Source = "tileset.png", + Width = 256, + Height = 96 + } + }, + new Tile + { + ID = 1, + Width = 256, + Height = 96, + Image = new Image + { + Format = ImageFormat.Png, + Source = "tileset.png", + Width = 256, + Height = 96 + } + } + ] + } + ], + Layers = [ + new TileLayer + { + ID = 1, + Name = "Tile Layer 1", + Width = 5, + Height = 5, + Data = new Data + { + Encoding = DataEncoding.Csv, + Chunks = null, + Compression = null, + GlobalTileIDs = [ + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0 + ], + FlippingFlags = [ + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, + FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None, FlippingFlags.None + ] + } + } + ] + }; +} diff --git a/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.tmj b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.tmj new file mode 100644 index 0000000..da37182 --- /dev/null +++ b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.tmj @@ -0,0 +1,36 @@ +{ "compressionlevel":-1, + "height":5, + "infinite":false, + "layers":[ + { + "data":[0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0], + "height":5, + "id":1, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":5, + "x":0, + "y":0 + }], + "nextlayerid":2, + "nextobjectid":1, + "orientation":"orthogonal", + "renderorder":"right-down", + "tiledversion":"1.11.0", + "tileheight":32, + "tilesets":[ + { + "firstgid":1, + "source":"multi-tileset.tsj" + }], + "tilewidth":32, + "type":"map", + "version":"1.10", + "width":5 +} \ No newline at end of file diff --git a/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.tmx b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.tmx new file mode 100644 index 0000000..477c112 --- /dev/null +++ b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/map-external-tileset-multi.tmx @@ -0,0 +1,13 @@ + + + + + +0,0,0,0,0, +0,0,0,0,0, +1,0,0,0,0, +0,0,0,0,0, +0,2,0,0,0 + + + diff --git a/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/multi-tileset.tsj b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/multi-tileset.tsj new file mode 100644 index 0000000..d190934 --- /dev/null +++ b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/multi-tileset.tsj @@ -0,0 +1,71 @@ +{ "columns":0, + "grid": + { + "height":1, + "orientation":"orthogonal", + "width":1 + }, + "margin":0, + "name":"multi-tileset", + "properties":[ + { + "name":"tilesetbool", + "type":"bool", + "value":true + }, + { + "name":"tilesetcolor", + "type":"color", + "value":"#ffff0000" + }, + { + "name":"tilesetfile", + "type":"file", + "value":"" + }, + { + "name":"tilesetfloat", + "type":"float", + "value":5.2 + }, + { + "name":"tilesetint", + "type":"int", + "value":9 + }, + { + "name":"tilesetobject", + "type":"object", + "value":0 + }, + { + "name":"tilesetstring", + "type":"string", + "value":"hello world!" + }], + "spacing":0, + "tilecount":2, + "tiledversion":"1.11.0", + "tileheight":96, + "tileoffset": + { + "x":1, + "y":5 + }, + "tiles":[ + { + "id":0, + "image":"tileset.png", + "imageheight":96, + "imagewidth":256 + }, + { + "id":1, + "image":"tileset.png", + "imageheight":96, + "imagewidth":256 + }], + "tilewidth":256, + "type":"tileset", + "version":"1.10" +} \ No newline at end of file diff --git a/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/multi-tileset.tsx b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/multi-tileset.tsx new file mode 100644 index 0000000..a28bfac --- /dev/null +++ b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/multi-tileset.tsx @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/tileset.png b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/tileset.png new file mode 100644 index 0000000..97c1fb3 Binary files /dev/null and b/DotTiled.Tests/Serialization/TestData/Map/map-external-tileset-multi/tileset.png differ diff --git a/DotTiled/Serialization/Tmj/Tmj.Tileset.cs b/DotTiled/Serialization/Tmj/Tmj.Tileset.cs index fd5088b..6eefdb7 100644 --- a/DotTiled/Serialization/Tmj/Tmj.Tileset.cs +++ b/DotTiled/Serialization/Tmj/Tmj.Tileset.cs @@ -77,14 +77,14 @@ internal partial class Tmj return resolvedTileset; } - var imageModel = new Image + var imageModel = image is not null ? new Image { - Format = Helpers.ParseImageFormatFromSource(image!), + Format = Helpers.ParseImageFormatFromSource(image), Source = image, Height = imageHeight, Width = imageWidth, TransparentColor = transparentColor - }; + } : null; return new Tileset { @@ -159,7 +159,7 @@ internal partial class Tmj var width = e.GetOptionalProperty("width", imageWidth ?? 0); var height = e.GetOptionalProperty("height", imageHeight ?? 0); var objectGroup = e.GetOptionalPropertyCustom("objectgroup", e => ReadObjectLayer(e, externalTemplateResolver, customTypeDefinitions), null); - var probability = e.GetOptionalProperty("probability", 1.0f); + var probability = e.GetOptionalProperty("probability", 0.0f); var properties = e.GetOptionalPropertyCustom?>("properties", el => ReadProperties(el, customTypeDefinitions), null); // var terrain, replaced by wangsets var type = e.GetOptionalProperty("type", "");