64 lines
2.3 KiB
C#
64 lines
2.3 KiB
C#
|
using System;
|
|||
|
|
|||
|
using Svelto.ECS;
|
|||
|
using Svelto.ECS.Serialization;
|
|||
|
|
|||
|
using RobocraftX.Common;
|
|||
|
|
|||
|
namespace GamecraftModdingAPI.Persistence
|
|||
|
{
|
|||
|
public class SimpleEntitySerializer<Descriptor> : IEntitySerializer where Descriptor : ISerializableEntityDescriptor, new()
|
|||
|
{
|
|||
|
public delegate EGID[] GetEntitiesToSerialize(EntitiesDB entitiesDB);
|
|||
|
|
|||
|
private GetEntitiesToSerialize getEntitiesToSerialize;
|
|||
|
|
|||
|
protected int serializationType;
|
|||
|
|
|||
|
public IEntityFactory EntityFactory { set; protected get; }
|
|||
|
|
|||
|
public EntitiesDB entitiesDB { set; protected get; }
|
|||
|
|
|||
|
public EntityComponentInitializer BuildDeserializedEntity(EGID egid, ISerializationData serializationData, ISerializableEntityDescriptor entityDescriptor, int serializationType, IEntitySerialization entitySerialization)
|
|||
|
{
|
|||
|
EntityComponentInitializer esi = EntityFactory.BuildEntity<Descriptor>(egid);
|
|||
|
entitySerialization.DeserializeEntityComponents(serializationData, entityDescriptor, ref esi, serializationType);
|
|||
|
return esi;
|
|||
|
}
|
|||
|
|
|||
|
public bool Deserialize(ref ISerializationData serializationData, IEntitySerialization entitySerializer)
|
|||
|
{
|
|||
|
BinaryBufferReader bbr = new BinaryBufferReader(serializationData.data.ToArrayFast(out uint count), serializationData.dataPos);
|
|||
|
uint entityCount = bbr.ReadUint();
|
|||
|
serializationData.dataPos = bbr.Position;
|
|||
|
for (uint i = 0; i < entityCount; i++)
|
|||
|
{
|
|||
|
entitySerializer.DeserializeEntity(serializationData, serializationType);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public void Ready() { }
|
|||
|
|
|||
|
public bool Serialize(ref ISerializationData serializationData, EntitiesDB entitiesDB, IEntitySerialization entitySerializer)
|
|||
|
{
|
|||
|
serializationData.data.ExpandBy(4u);
|
|||
|
BinaryBufferWriter bbw = new BinaryBufferWriter(serializationData.data.ToArrayFast(out uint count), serializationData.dataPos);
|
|||
|
EGID[] toSerialize = getEntitiesToSerialize(entitiesDB);
|
|||
|
bbw.Write((uint)toSerialize.Length);
|
|||
|
serializationData.dataPos = bbw.Position;
|
|||
|
for (uint i = 0; i < toSerialize.Length; i++)
|
|||
|
{
|
|||
|
entitySerializer.SerializeEntity(toSerialize[i], serializationData, serializationType);
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public SimpleEntitySerializer(GetEntitiesToSerialize getEntitiesToSerialize)
|
|||
|
{
|
|||
|
this.getEntitiesToSerialize = getEntitiesToSerialize;
|
|||
|
serializationType = (int)SerializationType.Storage;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|