Mirror of Svelto.ECS because we're a fan of it
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.

89 lines
4.1KB

  1. using System.Runtime.CompilerServices;
  2. namespace Svelto.ECS.Serialization
  3. {
  4. public interface IEntitySerialization
  5. {
  6. /// <summary>
  7. /// Fill the serializationData of the entitiesToSerialize of this descriptor
  8. /// </summary>
  9. /// <param name="egid"></param>
  10. /// <param name="serializedData"></param>
  11. /// <param name="serializationType"></param>
  12. /// <returns>Size in bytes of the newly instantiated entity</returns>
  13. void SerializeEntity(EGID egid, ISerializationData serializationData, int serializationType);
  14. /// <summary>
  15. /// Deserialize a serializationData and copy directly onto the appropriate entities
  16. /// </summary>
  17. /// <param name="data"></param>
  18. /// <param name="dataPos"></param>
  19. /// <param name="serializationType"></param>
  20. void DeserializeEntity(ISerializationData serializationData, int serializationType);
  21. /// <summary>
  22. /// Deserialize a serializationData and copy directly onto the appropriate entities with explicit EGID
  23. /// </summary>
  24. /// <param name="egid"></param>
  25. /// <param name="data"></param>
  26. /// <param name="dataPos"></param>
  27. /// <param name="serializationType"></param>
  28. void DeserializeEntity(EGID egid, ISerializationData serializationData, int serializationType);
  29. /// <summary>
  30. /// Deserialize a serializationData and copy directly to an previously created EntityInitializer
  31. /// </summary>
  32. /// <param name="serializationData"></param>
  33. /// <param name="entityDescriptor"></param>
  34. /// <param name="initializer"></param>
  35. /// <param name="serializationType"></param>
  36. void DeserializeEntityComponents(ISerializationData serializationData,
  37. ISerializableEntityDescriptor entityDescriptor,
  38. ref EntityInitializer initializer, int serializationType);
  39. /// <summary>
  40. /// Contrary to the other Deserialize methods that assume that the entity exists, this method is used to deserialise
  41. /// a new Entity
  42. /// </summary>
  43. /// <param name="egid"></param>
  44. /// <param name="serializationData"></param>
  45. /// <param name="serializationType"></param>
  46. /// <returns></returns>
  47. EntityInitializer DeserializeNewEntity(EGID egid, ISerializationData serializationData,
  48. int serializationType);
  49. /// <summary>
  50. /// Skips over entities without deserializing them, but incrementing the data position of the serialization data
  51. /// as if it had
  52. /// </summary>
  53. /// <param name="serializationData"></param>
  54. /// <param name="serializationType"></param>
  55. /// <param name="numberOfEntities"></param>
  56. void SkipEntityDeserialization(ISerializationData serializationData, int serializationType,
  57. int numberOfEntities);
  58. /// <summary>
  59. /// Special Entity Swap method that works without knowing the EntityDescriptor to swap
  60. /// </summary>
  61. /// <param name="fromEGID"></param>
  62. /// <param name="toEGID"></param>
  63. /// <param name="caller"></param>
  64. void DeserializeEntityToSwap(EGID fromEGID, EGID toEGID, [CallerMemberName] string caller = null);
  65. /// <summary>
  66. /// Special Entity delete method that works without knowing the EntityDescriptor to delete
  67. /// </summary>
  68. /// <param name="egid"></param>
  69. void DeserializeEntityToDelete(EGID egid, [CallerMemberName] string caller = null);
  70. uint GetHashFromGroup(ExclusiveGroupStruct groupStruct);
  71. ExclusiveGroupStruct GetGroupFromHash(uint groupHash);
  72. void RegisterSerializationFactory<T>(IDeserializationFactory deserializationFactory)
  73. where T : ISerializableEntityDescriptor, new();
  74. T DeserializeEntityComponent<T>(ISerializationData serializationData,
  75. ISerializableEntityDescriptor entityDescriptor, int serializationType)
  76. where T : unmanaged, IEntityComponent;
  77. }
  78. }