2020-04-29 01:56:34 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
using Svelto.ECS;
|
|
|
|
|
using Svelto.ECS.Serialization;
|
|
|
|
|
|
|
|
|
|
using GamecraftModdingAPI.Utility;
|
|
|
|
|
|
|
|
|
|
namespace GamecraftModdingAPI.Persistence
|
|
|
|
|
{
|
2020-04-29 02:59:36 +00:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// Keeps track of serializers.
|
|
|
|
|
/// This is used to add and retrieve serializers.
|
|
|
|
|
/// Added IEntitySerializations are used in serializing and deserializing Gamecraft save files (GameSave.GC).
|
|
|
|
|
/// </summary>
|
2020-04-29 01:56:34 +00:00
|
|
|
|
public static class SerializerManager
|
|
|
|
|
{
|
|
|
|
|
private static Dictionary<string, IEntitySerializer> _serializers = new Dictionary<string, IEntitySerializer>();
|
|
|
|
|
|
|
|
|
|
private static Dictionary<string, Action<IEntitySerialization>> _registrations = new Dictionary<string, Action<IEntitySerialization>>();
|
|
|
|
|
|
|
|
|
|
private static EnginesRoot _lastEnginesRoot;
|
|
|
|
|
|
|
|
|
|
public static void AddSerializer<T>(IEntitySerializer serializer) where T : ISerializableEntityDescriptor, new()
|
|
|
|
|
{
|
|
|
|
|
string name = typeof(T).FullName;
|
|
|
|
|
_serializers[name] = serializer;
|
|
|
|
|
_registrations[name] = (IEntitySerialization ies) => { ies.RegisterSerializationFactory<T>(serializer); };
|
|
|
|
|
if (_lastEnginesRoot != null)
|
|
|
|
|
{
|
|
|
|
|
_registrations[name].Invoke(_lastEnginesRoot.GenerateEntitySerializer());
|
|
|
|
|
_lastEnginesRoot.AddEngine(serializer);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool ExistsSerializer(string name)
|
|
|
|
|
{
|
|
|
|
|
return _serializers.ContainsKey(name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static bool ExistsSerializer<T>(IEntitySerializer serializer) where T : ISerializableEntityDescriptor, new()
|
|
|
|
|
{
|
|
|
|
|
return ExistsSerializer(typeof(T).FullName);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static IEntitySerializer GetSerializer(string name)
|
|
|
|
|
{
|
|
|
|
|
return _serializers[name];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static string[] GetSerializerNames()
|
|
|
|
|
{
|
|
|
|
|
return _serializers.Keys.ToArray();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static int GetSerializersCount()
|
|
|
|
|
{
|
|
|
|
|
return _serializers.Count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void RegisterSerializers(EnginesRoot enginesRoot)
|
|
|
|
|
{
|
|
|
|
|
_lastEnginesRoot = enginesRoot;
|
|
|
|
|
IEntitySerialization ies = enginesRoot.GenerateEntitySerializer();
|
|
|
|
|
foreach (string key in _serializers.Keys)
|
|
|
|
|
{
|
|
|
|
|
Logging.MetaDebugLog($"Registering IEntitySerializer for {key}");
|
|
|
|
|
_registrations[key].Invoke(ies);
|
|
|
|
|
enginesRoot.AddEngine(_serializers[key]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|