using System.Diagnostics.CodeAnalysis; namespace NeonSprawl.Server.Game.Combat; /// /// Read-only access to validated entries loaded at startup (). /// /// /// E5.M1 (combat / hotbar / cast): callers validating ability ids and resolving damage/cooldown metadata should depend on this interface /// rather than so ability defs stay centralized. /// NEO-78: HTTP/read-model projections should depend on this interface rather than reaching into the catalog. /// public interface IAbilityDefinitionRegistry { /// Attempts to resolve an ability by stable id (see ability-def.schema.json). Unknown ids and null return false without throwing. bool TryGetDefinition(string? abilityId, [NotNullWhen(true)] out AbilityDefRow? definition); /// Trims and lowercases ; returns true when the normalized id exists in the loaded catalog. null, empty, and whitespace return false without throwing. bool TryNormalizeKnown(string? rawAbilityId, [NotNullWhen(true)] out string normalized); /// Every loaded definition, ordered by (ordinal). IReadOnlyList GetDefinitionsInIdOrder(); }