TechbloxModdingAPI/TechbloxModdingAPI/Persistence/SerializerManager.cs
NorbiPeti 94c0c1370b
Removed 2 non-OOP classes and fixed fly cam teleport
Remvoed Hotbar and GameClient since their functions are also implemented in OOP classes
Added static methods to add/remove persistent debug info
Made some patches and other things internal
Added support for FlyCams in SetLocation
2021-05-30 01:34:30 +02:00

73 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using Svelto.ECS;
using Svelto.ECS.Serialization;
using TechbloxModdingAPI.Utility;
namespace TechbloxModdingAPI.Persistence
{
/// <summary>
/// Keeps track of serializers.
/// This is used to add and retrieve serializers.
/// Added IEntitySerializations are used in serializing and deserializing Techblox save files (GameSave.GC).
/// </summary>
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;
}
internal 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]);
}
}
}
}