using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Options; using NeonSprawl.Server.Game.Skills; namespace NeonSprawl.Server.Game.Combat; /// DI registration for the fail-fast ability catalog (NEO-77). public static class AbilityCatalogServiceCollectionExtensions { /// Binds and registers and as singletons. public static IServiceCollection AddAbilityDefinitionCatalog(this IServiceCollection services, IConfiguration configuration) { services.AddOptions() .Bind(configuration.GetSection(ContentPathsOptions.SectionName)); services.AddSingleton(sp => { var hostEnv = sp.GetRequiredService(); var opts = sp.GetRequiredService>().Value; var logger = sp.GetRequiredService() .CreateLogger("NeonSprawl.Server.Game.Combat.AbilityCatalog"); var abilitiesDir = AbilityCatalogPathResolution.ResolveAbilitiesDirectory( opts.AbilitiesDirectory, hostEnv.ContentRootPath); var schemaPath = AbilityCatalogPathResolution.ResolveAbilityDefSchemaPath( abilitiesDir, opts.AbilityDefSchemaPath, hostEnv.ContentRootPath); return AbilityDefinitionCatalogLoader.Load(abilitiesDir, schemaPath, logger); }); services.AddSingleton(sp => new AbilityDefinitionRegistry(sp.GetRequiredService())); return services; } }