namespace MoonTools.ECS { public class World { internal readonly EntityStorage EntityStorage = new EntityStorage(); internal readonly ComponentDepot ComponentDepot = new ComponentDepot(); internal readonly MessageDepot MessageDepot = new MessageDepot(); internal readonly RelationDepot RelationDepot = new RelationDepot(); public Entity CreateEntity() { return EntityStorage.Create(); } public void Set(Entity entity, in TComponent component) where TComponent : unmanaged { ComponentDepot.Set(entity.ID, component); } public void Send(in TMessage message) where TMessage : unmanaged { MessageDepot.Add(message); } public void FinishUpdate() { MessageDepot.Clear(); } public void DisableSerialization() where TComponent : unmanaged { ComponentDepot.DisableSerialization(); } public WorldState CreateState() { return new WorldState(); } public void Serialize(WorldState state) { ComponentDepot.Serialize(state.ComponentDepotState); EntityStorage.Serialize(state.EntityStorageState); } public void Deserialize(WorldState state) { ComponentDepot.Deserialize(state.ComponentDepotState); EntityStorage.Deserialize(state.EntityStorageState); } } }