using System; using System.Collections.Generic; namespace Syntriax.Engine.Core.Serialization; public class EntityRegistry { public Event 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?.Invoke(this, new(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?.Invoke(registeredEntities[id]); } public void Reset() { assignCallbacks.Clear(); registeredEntities.Clear(); } public readonly record struct EntityRegisteredArguments(IEntity Entity); }