2022-12-20 23:25:34 +01:00
|
|
|
using Robust.Shared.Serialization;
|
2021-12-03 15:35:57 +01:00
|
|
|
using Robust.Shared.Serialization.Manager;
|
|
|
|
|
using Robust.Shared.Serialization.Markdown;
|
|
|
|
|
using Robust.Shared.Serialization.Markdown.Mapping;
|
|
|
|
|
using Robust.Shared.Serialization.Markdown.Validation;
|
|
|
|
|
using Robust.Shared.Serialization.TypeSerializers.Interfaces;
|
2022-12-19 08:28:46 +13:00
|
|
|
using static Content.Shared.Decals.DecalGridComponent;
|
2021-12-03 15:35:57 +01:00
|
|
|
|
|
|
|
|
namespace Content.Shared.Decals
|
|
|
|
|
{
|
|
|
|
|
[TypeSerializer]
|
2022-02-16 00:23:23 -07:00
|
|
|
public sealed class DecalGridChunkCollectionTypeSerializer : ITypeSerializer<DecalGridComponent.DecalGridChunkCollection, MappingDataNode>
|
2021-12-03 15:35:57 +01:00
|
|
|
{
|
|
|
|
|
public ValidationNode Validate(ISerializationManager serializationManager, MappingDataNode node,
|
|
|
|
|
IDependencyCollection dependencies, ISerializationContext? context = null)
|
|
|
|
|
{
|
|
|
|
|
return serializationManager.ValidateNode<Dictionary<Vector2i, Dictionary<uint, Decal>>>(node, context);
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-27 19:25:55 +01:00
|
|
|
public DecalGridComponent.DecalGridChunkCollection Read(ISerializationManager serializationManager,
|
|
|
|
|
MappingDataNode node,
|
2022-12-20 23:25:34 +01:00
|
|
|
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null,
|
2022-11-27 19:25:55 +01:00
|
|
|
ISerializationManager.InstantiationDelegate<DecalGridComponent.DecalGridChunkCollection>? _ = default)
|
2021-12-03 15:35:57 +01:00
|
|
|
{
|
2022-12-20 23:25:34 +01:00
|
|
|
var dictionary = serializationManager.Read<Dictionary<Vector2i, DecalChunk>>(node, hookCtx, context, notNullableOverride: true);
|
2021-12-03 15:35:57 +01:00
|
|
|
|
|
|
|
|
var uids = new SortedSet<uint>();
|
|
|
|
|
var uidChunkMap = new Dictionary<uint, Vector2i>();
|
|
|
|
|
foreach (var (indices, decals) in dictionary)
|
|
|
|
|
{
|
2022-12-19 08:28:46 +13:00
|
|
|
foreach (var uid in decals.Decals.Keys)
|
2021-12-03 15:35:57 +01:00
|
|
|
{
|
|
|
|
|
uids.Add(uid);
|
|
|
|
|
uidChunkMap[uid] = indices;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var uidMap = new Dictionary<uint, uint>();
|
|
|
|
|
uint nextIndex = 0;
|
|
|
|
|
foreach (var uid in uids)
|
|
|
|
|
{
|
|
|
|
|
uidMap[uid] = nextIndex++;
|
|
|
|
|
}
|
|
|
|
|
|
2022-12-19 08:28:46 +13:00
|
|
|
var newDict = new Dictionary<Vector2i, DecalChunk>();
|
2021-12-03 15:35:57 +01:00
|
|
|
foreach (var (oldUid, newUid) in uidMap)
|
|
|
|
|
{
|
|
|
|
|
var indices = uidChunkMap[oldUid];
|
|
|
|
|
if(!newDict.ContainsKey(indices))
|
|
|
|
|
newDict[indices] = new();
|
2022-12-19 08:28:46 +13:00
|
|
|
newDict[indices].Decals[newUid] = dictionary[indices].Decals[oldUid];
|
2021-12-03 15:35:57 +01:00
|
|
|
}
|
|
|
|
|
|
2022-04-03 02:01:22 +02:00
|
|
|
return new DecalGridComponent.DecalGridChunkCollection(newDict){NextUid = nextIndex};
|
2021-12-03 15:35:57 +01:00
|
|
|
}
|
|
|
|
|
|
2022-10-03 20:29:14 +11:00
|
|
|
public DataNode Write(ISerializationManager serializationManager,
|
|
|
|
|
DecalGridComponent.DecalGridChunkCollection value, IDependencyCollection dependencies,
|
|
|
|
|
bool alwaysWrite = false,
|
2021-12-03 15:35:57 +01:00
|
|
|
ISerializationContext? context = null)
|
|
|
|
|
{
|
2022-12-11 00:25:04 +01:00
|
|
|
return serializationManager.WriteValue(value.ChunkCollection, alwaysWrite, context, notNullableOverride: true);
|
2021-12-03 15:35:57 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|