using System.Globalization;
+using System.Linq;
using Robust.Shared.Map;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager;
var uids = new SortedSet<uint>();
var uidChunkMap = new Dictionary<uint, Vector2i>();
- foreach (var (indices, decals) in dictionary)
+ var allIndices = dictionary.Keys.ToList();
+ allIndices.Sort((x, y) => x.X == y.X ? x.Y.CompareTo(y.Y) : x.X.CompareTo(y.X));
+
+ foreach (var indices in allIndices)
{
- foreach (var uid in decals.Decals.Keys)
+ var decals = dictionary[indices];
+ var decalUids = decals.Decals.Keys.ToList();
+ decalUids.Sort();
+
+ foreach (var uid in decalUids)
{
uids.Add(uid);
uidChunkMap[uid] = indices;
}
var lookupIndex = 0;
+ var lookupNodes = lookup.Keys.ToList();
+ lookupNodes.Sort();
- foreach (var (data, uids) in lookup)
+ foreach (var data in lookupNodes)
{
+ var uids = lookup[data];
var lookupNode = new MappingDataNode { { "node", serializationManager.WriteValue(data, alwaysWrite, context) } };
var decks = new MappingDataNode();
}
[DataDefinition]
- private readonly struct DecalData : IEquatable<DecalData>
+ private readonly struct DecalData : IEquatable<DecalData>, IComparable<DecalData>
{
[DataField("id")]
public readonly string Id = string.Empty;
{
return HashCode.Combine(Id, Color, Angle, ZIndex, Cleanable);
}
+
+ public int CompareTo(DecalData other)
+ {
+ var idComparison = string.Compare(Id, other.Id, StringComparison.Ordinal);
+ if (idComparison != 0)
+ return idComparison;
+
+ var zIndexComparison = ZIndex.CompareTo(other.ZIndex);
+ if (zIndexComparison != 0)
+ return zIndexComparison;
+
+ return Cleanable.CompareTo(other.Cleanable);
+ }
}
}
}