From df075eed8d3b9a56054040d5650d93e5bb9c3452 Mon Sep 17 00:00:00 2001 From: Daniel Cronqvist Date: Sun, 1 Sep 2024 22:09:03 +0200 Subject: [PATCH] Use proper list assertion and add optional to some Data properties --- src/DotTiled.Tests/Assert/AssertData.cs | 8 +------- src/DotTiled/Layers/Data.cs | 4 ++-- .../Serialization/Tmj/TmjReaderBase.Data.cs | 14 ++++++-------- .../Serialization/Tmx/TmxReaderBase.Data.cs | 6 +++--- 4 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/DotTiled.Tests/Assert/AssertData.cs b/src/DotTiled.Tests/Assert/AssertData.cs index d840ae0..6e8aaa2 100644 --- a/src/DotTiled.Tests/Assert/AssertData.cs +++ b/src/DotTiled.Tests/Assert/AssertData.cs @@ -18,13 +18,7 @@ public static partial class DotTiledAssert // Data AssertEqual(expected.GlobalTileIDs, actual.GlobalTileIDs, nameof(Data.GlobalTileIDs)); AssertEqual(expected.FlippingFlags, actual.FlippingFlags, nameof(Data.FlippingFlags)); - - if (expected.Chunks.HasValue) - { - AssertEqual(expected.Chunks.Value.Length, actual.Chunks.Value.Length, "Chunks.Length"); - for (var i = 0; i < expected.Chunks.Value.Length; i++) - AssertChunk(expected.Chunks.Value[i], actual.Chunks.Value[i]); - } + AssertOptionalsEqual(expected.Chunks, actual.Chunks, nameof(Data.Chunks), (a, b) => AssertListOrdered(a, b, nameof(Chunk), AssertChunk)); } private static void AssertChunk(Chunk expected, Chunk actual) diff --git a/src/DotTiled/Layers/Data.cs b/src/DotTiled/Layers/Data.cs index d5dea5b..16bf34e 100644 --- a/src/DotTiled/Layers/Data.cs +++ b/src/DotTiled/Layers/Data.cs @@ -130,12 +130,12 @@ public class Data /// To get an actual tile ID, you map it to a local tile ID using the correct tileset. Please refer to /// the documentation on how to do this. /// - public uint[] GlobalTileIDs { get; set; } + public Optional GlobalTileIDs { get; set; } = Optional.Empty; /// /// The parsed flipping flags for each tile in the layer. Appear in the same order as the tiles in the layer in . /// - public FlippingFlags[] FlippingFlags { get; set; } + public Optional FlippingFlags { get; set; } = Optional.Empty; /// /// If the map is infinite, it will instead contain a list of chunks. diff --git a/src/DotTiled/Serialization/Tmj/TmjReaderBase.Data.cs b/src/DotTiled/Serialization/Tmj/TmjReaderBase.Data.cs index f42ddd5..47b9b75 100644 --- a/src/DotTiled/Serialization/Tmj/TmjReaderBase.Data.cs +++ b/src/DotTiled/Serialization/Tmj/TmjReaderBase.Data.cs @@ -13,9 +13,7 @@ public abstract partial class TmjReaderBase { Chunks = chunks, Compression = compression, - Encoding = encoding, - FlippingFlags = null, - GlobalTileIDs = null + Encoding = encoding }; } @@ -34,8 +32,8 @@ public abstract partial class TmjReaderBase Y = y, Width = width, Height = height, - GlobalTileIDs = data.GlobalTileIDs!, - FlippingFlags = data.FlippingFlags! + GlobalTileIDs = data.GlobalTileIDs, + FlippingFlags = data.FlippingFlags }; } @@ -46,7 +44,7 @@ public abstract partial class TmjReaderBase // Array of uint var data = element.GetValueAsList(e => e.GetValueAs()).ToArray(); var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(data); - return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags, Chunks = null }; + return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags }; } else if (encoding == DataEncoding.Base64) { @@ -56,7 +54,7 @@ public abstract partial class TmjReaderBase { var data = Helpers.ReadBytesAsInt32Array(base64Data); var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(data); - return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags, Chunks = null }; + return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags }; } using var stream = new MemoryStream(base64Data); @@ -70,7 +68,7 @@ public abstract partial class TmjReaderBase { var (globalTileIDs, flippingFlags) = Helpers.ReadAndClearFlippingFlagsFromGIDs(decompressed); - return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags, Chunks = null }; + return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = globalTileIDs, FlippingFlags = flippingFlags }; } } diff --git a/src/DotTiled/Serialization/Tmx/TmxReaderBase.Data.cs b/src/DotTiled/Serialization/Tmx/TmxReaderBase.Data.cs index 4c196fa..a05bbd0 100644 --- a/src/DotTiled/Serialization/Tmx/TmxReaderBase.Data.cs +++ b/src/DotTiled/Serialization/Tmx/TmxReaderBase.Data.cs @@ -30,7 +30,7 @@ public abstract partial class TmxReaderBase var chunks = _reader .ReadList("data", "chunk", (r) => ReadChunk(encoding, compression)) .ToArray(); - return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = null, Chunks = chunks }; + return new Data { Encoding = encoding, Compression = compression, Chunks = chunks }; } var usesTileChildrenInsteadOfRawData = !encoding.HasValue && !compression.HasValue; @@ -38,12 +38,12 @@ public abstract partial class TmxReaderBase { var tileChildrenGlobalTileIDsWithFlippingFlags = ReadTileChildrenInWrapper("data", _reader); var (tileChildrenGlobalTileIDs, tileChildrenFlippingFlags) = ReadAndClearFlippingFlagsFromGIDs(tileChildrenGlobalTileIDsWithFlippingFlags); - return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = tileChildrenGlobalTileIDs, FlippingFlags = tileChildrenFlippingFlags, Chunks = null }; + return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = tileChildrenGlobalTileIDs, FlippingFlags = tileChildrenFlippingFlags }; } var rawDataGlobalTileIDsWithFlippingFlags = ReadRawData(_reader, encoding, compression); var (rawDataGlobalTileIDs, rawDataFlippingFlags) = ReadAndClearFlippingFlagsFromGIDs(rawDataGlobalTileIDsWithFlippingFlags); - return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = rawDataGlobalTileIDs, FlippingFlags = rawDataFlippingFlags, Chunks = null }; + return new Data { Encoding = encoding, Compression = compression, GlobalTileIDs = rawDataGlobalTileIDs, FlippingFlags = rawDataFlippingFlags }; } internal static (uint[] GlobalTileIDs, FlippingFlags[] FlippingFlags) ReadAndClearFlippingFlagsFromGIDs(uint[] globalTileIDs)