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)