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.

90 lines
4.1KB

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