using System.Diagnostics.CodeAnalysis; namespace NeonSprawl.Server.Game.Npc; /// Adapter over (NEO-89). public sealed class NpcBehaviorDefinitionRegistry(NpcBehaviorDefinitionCatalog catalog) : INpcBehaviorDefinitionRegistry { private readonly List _definitionsInIdOrder = BuildDefinitionsInIdOrder(catalog); /// public bool TryGetDefinition(string? behaviorId, [NotNullWhen(true)] out NpcBehaviorDefRow? definition) { if (behaviorId is null) { definition = null; return false; } return catalog.TryGetBehavior(behaviorId, out definition); } /// public bool TryNormalizeKnown(string? rawBehaviorId, [NotNullWhen(true)] out string normalized) { if (rawBehaviorId is null) { normalized = string.Empty; return false; } normalized = rawBehaviorId.Trim().ToLowerInvariant(); if (normalized.Length == 0) { normalized = string.Empty; return false; } return catalog.TryGetBehavior(normalized, out _); } /// public IReadOnlyList GetDefinitionsInIdOrder() => _definitionsInIdOrder; private static List BuildDefinitionsInIdOrder(NpcBehaviorDefinitionCatalog catalog) { string[] ids = [.. catalog.ById.Keys.OrderBy(k => k, StringComparer.Ordinal)]; var list = new List(ids.Length); foreach (var id in ids) { list.Add(catalog.ById[id]); } return list; } }