feat: entity register for serialized entity references

This commit is contained in:
2025-04-30 19:18:12 +03:00
parent 4c41870732
commit d2ca85568f
22 changed files with 185 additions and 113 deletions

View File

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