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 : struct { ComponentDepot.Set(entity.ID, component); } public void Send(in TMessage message) where TMessage : struct { MessageDepot.Add(message); } public void FinishUpdate() { MessageDepot.Clear(); } public ComponentDepotState Serialize() { var state = ComponentDepot.CreateState(); ComponentDepot.Serialize(state); return state; } public void Deserialize(ComponentDepotState state) { ComponentDepot.Deserialize(state); } } }