A stable modding interface between Techblox and mods https://mod.exmods.org/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SerializerManager.cs 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Svelto.ECS;
  5. using Svelto.ECS.Serialization;
  6. using GamecraftModdingAPI.Utility;
  7. namespace GamecraftModdingAPI.Persistence
  8. {
  9. public static class SerializerManager
  10. {
  11. private static Dictionary<string, IEntitySerializer> _serializers = new Dictionary<string, IEntitySerializer>();
  12. private static Dictionary<string, Action<IEntitySerialization>> _registrations = new Dictionary<string, Action<IEntitySerialization>>();
  13. private static EnginesRoot _lastEnginesRoot;
  14. public static void AddSerializer<T>(IEntitySerializer serializer) where T : ISerializableEntityDescriptor, new()
  15. {
  16. string name = typeof(T).FullName;
  17. _serializers[name] = serializer;
  18. _registrations[name] = (IEntitySerialization ies) => { ies.RegisterSerializationFactory<T>(serializer); };
  19. if (_lastEnginesRoot != null)
  20. {
  21. serializer.EntityFactory = _lastEnginesRoot.GenerateEntityFactory();
  22. _registrations[name].Invoke(_lastEnginesRoot.GenerateEntitySerializer());
  23. _lastEnginesRoot.AddEngine(serializer);
  24. }
  25. }
  26. public static bool ExistsSerializer(string name)
  27. {
  28. return _serializers.ContainsKey(name);
  29. }
  30. public static bool ExistsSerializer<T>(IEntitySerializer serializer) where T : ISerializableEntityDescriptor, new()
  31. {
  32. return ExistsSerializer(typeof(T).FullName);
  33. }
  34. public static IEntitySerializer GetSerializer(string name)
  35. {
  36. return _serializers[name];
  37. }
  38. public static string[] GetSerializerNames()
  39. {
  40. return _serializers.Keys.ToArray();
  41. }
  42. public static int GetSerializersCount()
  43. {
  44. return _serializers.Count;
  45. }
  46. public static void RegisterSerializers(EnginesRoot enginesRoot)
  47. {
  48. _lastEnginesRoot = enginesRoot;
  49. IEntityFactory factory = enginesRoot.GenerateEntityFactory();
  50. IEntitySerialization ies = enginesRoot.GenerateEntitySerializer();
  51. foreach (string key in _serializers.Keys)
  52. {
  53. Logging.MetaDebugLog($"Registering IEntitySerializer for {key}");
  54. _serializers[key].EntityFactory = factory;
  55. _registrations[key].Invoke(ies);
  56. enginesRoot.AddEngine(_serializers[key]);
  57. }
  58. }
  59. }
  60. }