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.

SimpleEntitySerializer.cs 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using Svelto.ECS;
  3. using Svelto.ECS.Serialization;
  4. using RobocraftX.Common;
  5. namespace GamecraftModdingAPI.Persistence
  6. {
  7. public class SimpleEntitySerializer<Descriptor> : IEntitySerializer where Descriptor : ISerializableEntityDescriptor, new()
  8. {
  9. public delegate EGID[] GetEntitiesToSerialize(EntitiesDB entitiesDB);
  10. private GetEntitiesToSerialize getEntitiesToSerialize;
  11. protected int serializationType;
  12. public IEntityFactory EntityFactory { set; protected get; }
  13. public EntitiesDB entitiesDB { set; protected get; }
  14. public EntityComponentInitializer BuildDeserializedEntity(EGID egid, ISerializationData serializationData, ISerializableEntityDescriptor entityDescriptor, int serializationType, IEntitySerialization entitySerialization)
  15. {
  16. EntityComponentInitializer esi = EntityFactory.BuildEntity<Descriptor>(egid);
  17. entitySerialization.DeserializeEntityComponents(serializationData, entityDescriptor, ref esi, serializationType);
  18. return esi;
  19. }
  20. public bool Deserialize(ref ISerializationData serializationData, IEntitySerialization entitySerializer)
  21. {
  22. BinaryBufferReader bbr = new BinaryBufferReader(serializationData.data.ToArrayFast(out uint count), serializationData.dataPos);
  23. uint entityCount = bbr.ReadUint();
  24. serializationData.dataPos = bbr.Position;
  25. for (uint i = 0; i < entityCount; i++)
  26. {
  27. entitySerializer.DeserializeEntity(serializationData, serializationType);
  28. }
  29. return true;
  30. }
  31. public void Ready() { }
  32. public bool Serialize(ref ISerializationData serializationData, EntitiesDB entitiesDB, IEntitySerialization entitySerializer)
  33. {
  34. serializationData.data.ExpandBy(4u);
  35. BinaryBufferWriter bbw = new BinaryBufferWriter(serializationData.data.ToArrayFast(out uint count), serializationData.dataPos);
  36. EGID[] toSerialize = getEntitiesToSerialize(entitiesDB);
  37. bbw.Write((uint)toSerialize.Length);
  38. serializationData.dataPos = bbw.Position;
  39. for (uint i = 0; i < toSerialize.Length; i++)
  40. {
  41. entitySerializer.SerializeEntity(toSerialize[i], serializationData, serializationType);
  42. }
  43. return true;
  44. }
  45. public SimpleEntitySerializer(GetEntitiesToSerialize getEntitiesToSerialize)
  46. {
  47. this.getEntitiesToSerialize = getEntitiesToSerialize;
  48. serializationType = (int)SerializationType.Storage;
  49. }
  50. }
  51. }