TimeOffsetSerializer fixes (#3985)

This commit is contained in:
metalgearsloth
2023-05-01 14:47:16 +10:00
committed by GitHub
parent b5ebc11d26
commit 45734a2bdd
35 changed files with 181 additions and 132 deletions

View File

@@ -33,8 +33,8 @@ namespace Robust.Benchmarks.Serialization
return new ValueDataNode(value.ToString(CultureInfo.InvariantCulture));
}
public int CreateCopy(ISerializationManager serializationManager, int source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public int CreateCopy(ISerializationManager serializationManager, int source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return source;
}

View File

@@ -397,7 +397,7 @@ public sealed class MapLoaderSystem : EntitySystem
_stopwatch.Restart();
var mapUid = _mapManager.GetMapEntityId(data.TargetMap);
var pauseTime = mapUid.IsValid() ? _meta.GetPauseTime(mapUid) : TimeSpan.Zero;
_context.Set(data.UidEntityMap, new Dictionary<EntityUid, int>(), pauseTime, null);
_context.Set(data.UidEntityMap, new Dictionary<EntityUid, int>(), data.MapIsPostInit, pauseTime, null);
HashSet<EntityUid> deletedPrototypeUids = new();
if (data.Version >= 4)
@@ -906,10 +906,12 @@ public sealed class MapLoaderSystem : EntitySystem
WriteTileMapSection(data, entities);
_logLoader.Debug($"Populated entity list in {_stopwatch.Elapsed}");
var pauseTime = _meta.GetPauseTime(uid);
var metadata = Comp<MetaDataComponent>(uid);
var pauseTime = _meta.GetPauseTime(uid, metadata);
var postInit = metadata.EntityLifeStage >= EntityLifeStage.MapInitialized;
var rootXform = _serverEntityManager.GetComponent<TransformComponent>(uid);
_context.Set(uidEntityMap, entityUidMap, pauseTime, rootXform.ParentUid);
_context.Set(uidEntityMap, entityUidMap, postInit, pauseTime, rootXform.ParentUid);
_stopwatch.Restart();
WriteEntitySection(data, uidEntityMap, entityUidMap);
@@ -1105,6 +1107,7 @@ public sealed class MapLoaderSystem : EntitySystem
if (!prototypeCompCache.TryGetValue(prototype.ID, out cache))
{
prototypeCompCache[prototype.ID] = cache = new Dictionary<string, MappingDataNode>(prototype.Components.Count);
_context.WritingReadingPrototypes = true;
foreach (var (compType, comp) in prototype.Components)
{
@@ -1113,6 +1116,7 @@ public sealed class MapLoaderSystem : EntitySystem
}
_context.CurrentComponent = null;
_context.WritingReadingPrototypes = false;
cache.TryAdd(metaName, emptyMetaNode);
cache.TryAdd(xformName, emptyXformNode);
}

View File

@@ -129,10 +129,10 @@ internal sealed class MapChunkSerializer : ITypeSerializer<MapChunk, MappingData
return Convert.ToBase64String(barr);
}
public MapChunk CreateCopy(ISerializationManager serializationManager, MapChunk source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public MapChunk CreateCopy(ISerializationManager serializationManager, MapChunk source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
var mapManager = ((SerializationManager)serializationManager).DependencyCollection.Resolve<IMapManager>();
var mapManager = dependencies.Resolve<IMapManager>();
mapManager.SuppressOnTileChanged = true;
var chunk = new MapChunk(source.X, source.Y, source.ChunkSize)
{

View File

@@ -30,6 +30,16 @@ internal sealed class MapSerializationContext : ISerializationContext, IEntityLo
private Dictionary<int, EntityUid> _uidEntityMap = new();
private Dictionary<EntityUid, int> _entityUidMap = new();
/// <summary>
/// Are we currently iterating prototypes or entities for writing.
/// </summary>
public bool WritingReadingPrototypes { get; set; }
/// <summary>
/// Whether the map has been MapInitialized or not.
/// </summary>
public bool MapInitialized;
/// <summary>
/// How long the target map has been paused. Used for time offsets.
/// </summary>
@@ -45,11 +55,16 @@ internal sealed class MapSerializationContext : ISerializationContext, IEntityLo
SerializerProvider.RegisterSerializer(this);
}
public void Set(Dictionary<int, EntityUid> uidEntityMap, Dictionary<EntityUid, int> entityUidMap,
TimeSpan pauseTime, EntityUid? parentUid)
public void Set(
Dictionary<int, EntityUid> uidEntityMap,
Dictionary<EntityUid, int> entityUidMap,
bool mapPreInit,
TimeSpan pauseTime,
EntityUid? parentUid)
{
_uidEntityMap = uidEntityMap;
_entityUidMap = entityUidMap;
MapInitialized = mapPreInit;
PauseTime = pauseTime;
if (parentUid != null && parentUid.Value.IsValid())
_parentUid = parentUid;

View File

@@ -1,8 +1,13 @@
namespace Robust.Shared.Serialization.Manager
namespace Robust.Shared.Serialization.Manager;
// TODO Serialization: make this actually not kanser to use holy moly (& allow generics)
public interface ISerializationContext
{
// TODO Serialization: make this actually not kanser to use holy moly (& allow generics)
public interface ISerializationContext
{
SerializationManager.SerializerProvider SerializerProvider { get; }
}
SerializationManager.SerializerProvider SerializerProvider { get; }
// This is just here for content tests that may want their own test diffs.
/// <summary>
/// Are we currently iterating prototypes or entities for writing.
/// </summary>
bool WritingReadingPrototypes { get; }
}

View File

@@ -1,5 +1,6 @@
using System;
using JetBrains.Annotations;
using Robust.Shared.IoC;
using Robust.Shared.Reflection;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Validation;

View File

@@ -266,7 +266,7 @@ public sealed partial class SerializationManager
context.SerializerProvider.TryGetTypeSerializer<ITypeCopier<TCommon>, TCommon>(out var copier))
{
var commonTarget = target;
copier.CopyTo(this, source, ref commonTarget, hookCtx, context);
copier.CopyTo(this, source, ref commonTarget, DependencyCollection, hookCtx, context);
}
if (ShouldReturnSource(typeof(TCommon))) //todo paul can be precomputed
@@ -448,7 +448,7 @@ public sealed partial class SerializationManager
target ??= GetOrCreateInstantiator<T>(false)();
copier.CopyTo(this, source, ref target, hookCtx, context);
copier.CopyTo(this, source, ref target, DependencyCollection, hookCtx, context);
RunAfterHook(target, hookCtx);
}
@@ -542,7 +542,7 @@ public sealed partial class SerializationManager
return default!;
}
var res = copyCreator.CreateCopy(this, source, hookCtx, context);
var res = copyCreator.CreateCopy(this, source, DependencyCollection, hookCtx, context);
RunAfterHook(res, hookCtx);
return res;

View File

@@ -49,8 +49,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public Angle CreateCopy(ISerializationManager serializationManager, Angle source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source);
}

View File

@@ -78,8 +78,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public Box2 CreateCopy(ISerializationManager serializationManager, Box2 source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new Box2(source.Left, source.Bottom, source.Right, source.Top);
}
@@ -138,8 +137,8 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
: new ErrorNode(node, "Failed parsing values of Box2i.");
}
public Box2i CreateCopy(ISerializationManager serializationManager, Box2i source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public Box2i CreateCopy(ISerializationManager serializationManager, Box2i source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new Box2i(source.Left, source.Bottom, source.Right, source.Top);
}

View File

@@ -44,8 +44,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public Color CreateCopy(ISerializationManager serializationManager, Color source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.R, source.G, source.B, source.A);
}

View File

@@ -171,7 +171,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
}
public void CopyTo(ISerializationManager serializationManager, ComponentRegistry source, ref ComponentRegistry target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target.Clear();
target.EnsureCapacity(source.Count);

View File

@@ -91,8 +91,8 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Custom
return flags;
}
public int CreateCopy(ISerializationManager serializationManager, int source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public int CreateCopy(ISerializationManager serializationManager, int source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return source;
}

View File

@@ -85,12 +85,14 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Pro
}
public PrototypeFlags<T> CreateCopy(ISerializationManager serializationManager, PrototypeFlags<T> source,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new PrototypeFlags<T>(source);
}
public void CopyTo(ISerializationManager serializationManager, PrototypeFlags<T> source, ref PrototypeFlags<T> target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, PrototypeFlags<T> source, ref PrototypeFlags<T> target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target.Clear();

View File

@@ -1,10 +1,10 @@
using System;
using System.Globalization;
using JetBrains.Annotations;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Map;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.Serialization.Markdown;
using Robust.Shared.Serialization.Markdown.Validation;
using Robust.Shared.Serialization.Markdown.Value;
@@ -16,7 +16,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
/// <summary>
/// Offsets the timespan by the CurTime.
/// </summary>
public sealed class TimeOffsetSerializer : ITypeSerializer<TimeSpan, ValueDataNode>
public sealed class TimeOffsetSerializer : ITypeSerializer<TimeSpan, ValueDataNode>, ITypeCopier<TimeSpan>
{
public TimeSpan Read(ISerializationManager serializationManager, ValueDataNode node,
IDependencyCollection dependencies,
@@ -25,9 +25,7 @@ public sealed class TimeOffsetSerializer : ITypeSerializer<TimeSpan, ValueDataNo
ISerializationManager.InstantiationDelegate<TimeSpan>? instanceProvider = null)
{
var seconds = double.Parse(node.Value, CultureInfo.InvariantCulture);
var curTime = dependencies.Resolve<IGameTiming>().CurTime;
return curTime + TimeSpan.FromSeconds(seconds);
return TimeSpan.FromSeconds(seconds);
}
public ValidationNode Validate(ISerializationManager serializationManager, ValueDataNode node,
@@ -42,13 +40,28 @@ public sealed class TimeOffsetSerializer : ITypeSerializer<TimeSpan, ValueDataNo
public DataNode Write(ISerializationManager serializationManager, TimeSpan value, IDependencyCollection dependencies, bool alwaysWrite = false,
ISerializationContext? context = null)
{
// If we're reading from the prototype (e.g. for diffs) then ignore.
if (context == null || context.WritingReadingPrototypes)
{
return new ValueDataNode(value.TotalSeconds.ToString(CultureInfo.InvariantCulture));
}
var curTime = dependencies.Resolve<IGameTiming>().CurTime;
if (context is MapSerializationContext mapContext)
// We want to get the offset relative to the current time
// Because paused entities never update their timeoffsets we'll subtract how long it's been paused.
if (context is MapSerializationContext map)
{
curTime -= mapContext.PauseTime;
curTime -= map.PauseTime;
}
return new ValueDataNode((value - curTime).TotalSeconds.ToString(CultureInfo.InvariantCulture));
}
public void CopyTo(ISerializationManager serializationManager, TimeSpan source, ref TimeSpan target,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target = source + dependencies.Resolve<IGameTiming>().CurTime;
}
}

View File

@@ -40,7 +40,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public FormattedMessage CreateCopy(ISerializationManager serializationManager, FormattedMessage source,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source);
}

View File

@@ -152,7 +152,9 @@ public sealed class DictionarySerializer<TKey, TValue> :
return dict;
}
public void CopyTo(ISerializationManager serializationManager, Dictionary<TKey, TValue> source, ref Dictionary<TKey, TValue> target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, Dictionary<TKey, TValue> source, ref Dictionary<TKey, TValue> target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target.Clear();
@@ -166,7 +168,7 @@ public sealed class DictionarySerializer<TKey, TValue> :
}
public void CopyTo(ISerializationManager serializationManager, SortedDictionary<TKey, TValue> source, ref SortedDictionary<TKey, TValue> target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target.Clear();
foreach (var value in source)
@@ -177,8 +179,8 @@ public sealed class DictionarySerializer<TKey, TValue> :
}
}
public IReadOnlyDictionary<TKey, TValue> CreateCopy(ISerializationManager serializationManager, IReadOnlyDictionary<TKey, TValue> source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public IReadOnlyDictionary<TKey, TValue> CreateCopy(ISerializationManager serializationManager, IReadOnlyDictionary<TKey, TValue> source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
var target = new Dictionary<TKey, TValue>();
target.EnsureCapacity(source.Count);

View File

@@ -104,8 +104,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
}
public void CopyTo(ISerializationManager serializationManager, HashSet<T> source, ref HashSet<T> target,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target.Clear();
target.EnsureCapacity(source.Count);
@@ -117,8 +116,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
}
public ImmutableHashSet<T> CreateCopy(ISerializationManager serializationManager, ImmutableHashSet<T> source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
var target = new HashSet<T>();
target.EnsureCapacity(source.Count);

View File

@@ -178,7 +178,9 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
return list.ToImmutable();
}
public void CopyTo(ISerializationManager serializationManager, List<T> source, ref List<T> target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, List<T> source, ref List<T> target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target.Clear();
@@ -193,8 +195,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
}
public IReadOnlyList<T> CreateCopy(ISerializationManager serializationManager, IReadOnlyList<T> source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
var target = new List<T>(source.Count);
@@ -206,8 +207,8 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
return target;
}
public IReadOnlyCollection<T> CreateCopy(ISerializationManager serializationManager, IReadOnlyCollection<T> source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public IReadOnlyCollection<T> CreateCopy(ISerializationManager serializationManager, IReadOnlyCollection<T> source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
var target = new List<T>(source.Count);
@@ -219,8 +220,8 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
return target;
}
public ImmutableList<T> CreateCopy(ISerializationManager serializationManager, ImmutableList<T> source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public ImmutableList<T> CreateCopy(ISerializationManager serializationManager, ImmutableList<T> source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
var target = new List<T>(source.Count);

View File

@@ -55,7 +55,7 @@ public sealed class QueueSerializer<T> : ITypeSerializer<Queue<T>, SequenceDataN
return sequence;
}
public void CopyTo(ISerializationManager serializationManager, Queue<T> source, ref Queue<T> target, SerializationHookContext hookCtx, ISerializationContext? context = null)
public void CopyTo(ISerializationManager serializationManager, Queue<T> source, ref Queue<T> target, IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target.Clear();
target.EnsureCapacity(source.Count);

View File

@@ -61,8 +61,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations.Generic
}
public (T1, T2) CreateCopy(ISerializationManager serializationManager, (T1, T2) source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return (serializationManager.CreateCopy(source.Item1, hookCtx, context),
serializationManager.CreateCopy(source.Item2, hookCtx, context));

View File

@@ -48,8 +48,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public Regex CreateCopy(ISerializationManager serializationManager, Regex source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.ToString(), source.Options, source.MatchTimeout);
}

View File

@@ -72,8 +72,7 @@ public sealed class ResPathSerializer : ITypeSerializer<ResPath, ValueDataNode>,
}
public ResPath CreateCopy(ISerializationManager serializationManager, ResPath source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new ResPath(source.ToString());
}

View File

@@ -171,20 +171,20 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
return mapping;
}
public Texture CreateCopy(ISerializationManager serializationManager, Texture source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public Texture CreateCopy(ISerializationManager serializationManager, Texture source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.TexturePath);
}
public EntityPrototype CreateCopy(ISerializationManager serializationManager, EntityPrototype source,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.EntityPrototypeId);
}
public Rsi CreateCopy(ISerializationManager serializationManager, Rsi source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public Rsi CreateCopy(ISerializationManager serializationManager, Rsi source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.RsiPath, source.RsiState);
}
@@ -209,31 +209,35 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
}
public SpriteSpecifier CreateCopy(ISerializationManager serializationManager, SpriteSpecifier source,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return source switch
{
Rsi rsi
=> CreateCopy(serializationManager, rsi, hookCtx, context),
=> CreateCopy(serializationManager, rsi, dependencies, hookCtx, context),
Texture texture
=> CreateCopy(serializationManager, texture, hookCtx, context),
=> CreateCopy(serializationManager, texture, dependencies, hookCtx, context),
EntityPrototype entityPrototype
=> CreateCopy(serializationManager, entityPrototype, hookCtx, context),
=> CreateCopy(serializationManager, entityPrototype, dependencies, hookCtx, context),
_ => throw new InvalidOperationException("Invalid SpriteSpecifier specified!")
};
}
public void CopyTo(ISerializationManager serializationManager, Rsi source, ref Rsi target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, Rsi source, ref Rsi target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target.RsiPath = source.RsiPath;
target.RsiState = source.RsiState;
}
public void CopyTo(ISerializationManager serializationManager, Texture source, ref Texture target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, Texture source, ref Texture target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target.TexturePath = source.TexturePath;

View File

@@ -42,8 +42,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public TimeSpan CreateCopy(ISerializationManager serializationManager, TimeSpan source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return source;
}

View File

@@ -51,8 +51,8 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
return new ValueDataNode(value.FullName ?? value.Name);
}
public Type CreateCopy(ISerializationManager serializationManager, Type source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public Type CreateCopy(ISerializationManager serializationManager, Type source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return source;
}

View File

@@ -67,8 +67,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
[MustUseReturnValue]
public UIBox2 CreateCopy(ISerializationManager serializationManager, UIBox2 source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.Left, source.Top, source.Right, source.Bottom);
}

View File

@@ -54,8 +54,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
}
public Vector2 CreateCopy(ISerializationManager serializationManager, Vector2 source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.X, source.Y);
}

View File

@@ -54,8 +54,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
}
public Vector2i CreateCopy(ISerializationManager serializationManager, Vector2i source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source.X, source.Y);
}

View File

@@ -57,8 +57,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
}
public Vector3 CreateCopy(ISerializationManager serializationManager, Vector3 source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source);
}

View File

@@ -61,8 +61,7 @@ namespace Robust.Shared.Serialization.TypeSerializers.Implementations
}
public Vector4 CreateCopy(ISerializationManager serializationManager, Vector4 source,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new(source);
}

View File

@@ -1,4 +1,5 @@
using Robust.Shared.Serialization.Manager;
using Robust.Shared.IoC;
using Robust.Shared.Serialization.Manager;
namespace Robust.Shared.Serialization.TypeSerializers.Interfaces;
@@ -8,6 +9,7 @@ public interface ITypeCopier<TType> : BaseSerializerInterfaces.ITypeInterface<TT
ISerializationManager serializationManager,
TType source,
ref TType target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null);

View File

@@ -1,4 +1,5 @@
using JetBrains.Annotations;
using Robust.Shared.IoC;
using Robust.Shared.Serialization.Manager;
namespace Robust.Shared.Serialization.TypeSerializers.Interfaces;
@@ -9,6 +10,7 @@ public interface ITypeCopyCreator<TType> : BaseSerializerInterfaces.ITypeInterfa
TType CreateCopy(
ISerializationManager serializationManager,
TType source,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null);
}

View File

@@ -84,38 +84,40 @@ public sealed partial class DataDefinitionTests
return SerializerValueDataNode;
}
public void CopyTo(ISerializationManager serializationManager, int source, ref int target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, int source, ref int target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target = SerializerReturnInt;
}
public int CreateCopy(ISerializationManager serializationManager, int source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public int CreateCopy(ISerializationManager serializationManager, int source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnInt;
}
public void CopyTo(ISerializationManager serializationManager, DataDummyStruct source, ref DataDummyStruct target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target = SerializerReturnStruct;
}
public DataDummyStruct CreateCopy(ISerializationManager serializationManager, DataDummyStruct source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public DataDummyStruct CreateCopy(ISerializationManager serializationManager, DataDummyStruct source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnStruct;
}
public void CopyTo(ISerializationManager serializationManager, DataDummyClass source, ref DataDummyClass target, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public void CopyTo(ISerializationManager serializationManager, DataDummyClass source, ref DataDummyClass target,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target = SerializerReturnClass;
}
public DataDummyClass CreateCopy(ISerializationManager serializationManager, DataDummyClass source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public DataDummyClass CreateCopy(ISerializationManager serializationManager, DataDummyClass source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnClass;
}
@@ -184,38 +186,42 @@ public sealed partial class DataDefinitionTests
return SerializerSequenceDataNode;
}
public void CopyTo(ISerializationManager serializationManager, int source, ref int target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, int source, ref int target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target = SerializerReturnInt;
}
public int CreateCopy(ISerializationManager serializationManager, int source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public int CreateCopy(ISerializationManager serializationManager, int source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnInt;
}
public void CopyTo(ISerializationManager serializationManager, DataDummyStruct source, ref DataDummyStruct target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target = SerializerReturnStruct;
}
public DataDummyStruct CreateCopy(ISerializationManager serializationManager, DataDummyStruct source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public DataDummyStruct CreateCopy(ISerializationManager serializationManager, DataDummyStruct source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnStruct;
}
public void CopyTo(ISerializationManager serializationManager, DataDummyClass source, ref DataDummyClass target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, DataDummyClass source, ref DataDummyClass target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target = SerializerReturnClass;
}
public DataDummyClass CreateCopy(ISerializationManager serializationManager, DataDummyClass source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public DataDummyClass CreateCopy(ISerializationManager serializationManager, DataDummyClass source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnClass;
}
@@ -283,38 +289,42 @@ public sealed partial class DataDefinitionTests
return SerializerMappingDataNode;
}
public void CopyTo(ISerializationManager serializationManager, int source, ref int target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, int source, ref int target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target = SerializerReturnInt;
}
public int CreateCopy(ISerializationManager serializationManager, int source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public int CreateCopy(ISerializationManager serializationManager, int source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnInt;
}
public void CopyTo(ISerializationManager serializationManager, DataDummyStruct source, ref DataDummyStruct target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target = SerializerReturnStruct;
}
public DataDummyStruct CreateCopy(ISerializationManager serializationManager, DataDummyStruct source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public DataDummyStruct CreateCopy(ISerializationManager serializationManager, DataDummyStruct source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnStruct;
}
public void CopyTo(ISerializationManager serializationManager, DataDummyClass source, ref DataDummyClass target, SerializationHookContext hookCtx,
public void CopyTo(ISerializationManager serializationManager, DataDummyClass source, ref DataDummyClass target,
IDependencyCollection dependencies,
SerializationHookContext hookCtx,
ISerializationContext? context = null)
{
target = SerializerReturnClass;
}
public DataDummyClass CreateCopy(ISerializationManager serializationManager, DataDummyClass source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public DataDummyClass CreateCopy(ISerializationManager serializationManager, DataDummyClass source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return SerializerReturnClass;
}

View File

@@ -21,6 +21,7 @@ public sealed partial class ManagerTests : ISerializationContext
private static ValueDataNode SerializerRanCustomDataNode => new ("SerializerRanCustom");
public SerializationManager.SerializerProvider SerializerProvider { get; } = new();
public bool WritingReadingPrototypes { get; }
[OneTimeSetUp]
public void SetupSerializerProvider()
@@ -62,14 +63,14 @@ public sealed partial class ManagerTests : ISerializationContext
}
public void CopyTo(ISerializationManager serializationManager, SerializerStruct source, ref SerializerStruct target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target.OneValue = source.OneValue;
target.TwoValue = source.TwoValue;
}
public SerializerStruct CreateCopy(ISerializationManager serializationManager, SerializerStruct source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public SerializerStruct CreateCopy(ISerializationManager serializationManager, SerializerStruct source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new SerializerStruct(source.OneValue, source.TwoValue);
}
@@ -97,14 +98,14 @@ public sealed partial class ManagerTests : ISerializationContext
}
public void CopyTo(ISerializationManager serializationManager, SerializerStruct source, ref SerializerStruct target,
SerializationHookContext hookCtx, ISerializationContext? context = null)
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
target.OneValue = source.OneValue;
target.TwoValue = source.TwoValue;
}
public SerializerStruct CreateCopy(ISerializationManager serializationManager, SerializerStruct source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public SerializerStruct CreateCopy(ISerializationManager serializationManager, SerializerStruct source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new SerializerStruct(source.OneValue, source.TwoValue);
}
@@ -144,8 +145,8 @@ public sealed partial class ManagerTests : ISerializationContext
return SerializerRanDataNode;
}
public SerializerClass CreateCopy(ISerializationManager serializationManager, SerializerClass source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public SerializerClass CreateCopy(ISerializationManager serializationManager, SerializerClass source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new SerializerClass(source.OneValue, source.TwoValue);
}
@@ -172,8 +173,8 @@ public sealed partial class ManagerTests : ISerializationContext
return SerializerRanCustomDataNode;
}
public SerializerClass CreateCopy(ISerializationManager serializationManager, SerializerClass source, SerializationHookContext hookCtx,
ISerializationContext? context = null)
public SerializerClass CreateCopy(ISerializationManager serializationManager, SerializerClass source,
IDependencyCollection dependencies, SerializationHookContext hookCtx, ISerializationContext? context = null)
{
return new SerializerClass(source.OneValue, source.TwoValue);
}

View File

@@ -1,6 +1,8 @@
using System;
using System.Globalization;
using System.Threading.Tasks;
using NUnit.Framework;
using Robust.Shared.Serialization;
using Robust.Shared.Serialization.Manager;
using Robust.Shared.Serialization.Markdown.Value;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
@@ -27,7 +29,7 @@ public sealed class TimeOffsetSerializerTest : RobustIntegrationTest
var dataTime = curTime + TimeSpan.FromSeconds(2);
var node = serialization.WriteValue<TimeSpan, TimeOffsetSerializer>(dataTime);
Assert.That(((ValueDataNode) node).Value, Is.EqualTo("2"));
Assert.That(((ValueDataNode) node).Value, Is.EqualTo(dataTime.TotalSeconds.ToString(CultureInfo.InvariantCulture)));
}
[Test]
@@ -41,13 +43,12 @@ public sealed class TimeOffsetSerializerTest : RobustIntegrationTest
await sim.WaitRunTicks(10);
var curTime = sim.ResolveDependency<IGameTiming>().CurTime;
var serializer = new TimeOffsetSerializer();
var node = new ValueDataNode("2");
var deserialized = serialization.Read<TimeSpan, ValueDataNode, TimeOffsetSerializer>(node);
Assert.That(deserialized, Is.Not.EqualTo(null));
var time = (TimeSpan) deserialized!;
var time = TimeSpan.Zero;
var basic = serialization.Read<TimeSpan, ValueDataNode, TimeOffsetSerializer>(node);
serialization.CopyTo(serializer, basic, ref time);
Assert.That(time, Is.EqualTo(curTime + TimeSpan.FromSeconds(2)));
}
}