using System; using System.Collections.Generic; namespace Syntriax.Engine.Core.Serialization; public class EntityRegistry { public event EntityRegisteredEventHandler? OnEntityRegistered = null!; private readonly Dictionary?> assignCallbacks = []; private readonly Dictionary registeredEntities = []; public IReadOnlyDictionary RegisteredEntities => registeredEntities; public void Add(IEntity entity) { if (registeredEntities.TryAdd(entity.Id, entity)) OnEntityRegistered?.InvokeSafe(this, entity); } public void QueueAssign(string id, Action setMethod) { assignCallbacks.TryAdd(id, null); assignCallbacks[id] = assignCallbacks[id] + setMethod; } public void AssignAll() { foreach ((string id, Action? action) in assignCallbacks) action?.InvokeSafe(registeredEntities[id]); } public void Reset() { assignCallbacks.Clear(); registeredEntities.Clear(); } public delegate void EntityRegisteredEventHandler(EntityRegistry sender, IEntity entity); }