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;
}
}