Add Apr2025 Randomizer

This commit is contained in:
2025-03-06 10:29:23 -06:00
parent 83d860ef79
commit 7604c78db8
15 changed files with 422 additions and 76 deletions

View File

@@ -1,24 +1,41 @@
using ALttPRandomizer.Model;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;
namespace ALttPRandomizer.Service {
using ALttPRandomizer.Model;
using ALttPRandomizer.Randomizers;
using ALttPRandomizer.Settings;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Reflection;
using System.Threading.Tasks;
namespace ALttPRandomizer.Service {
public class RandomizeService {
public RandomizeService(IdGenerator idGenerator, Randomizer randomizer, ILogger<RandomizeService> logger) {
public RandomizeService(IdGenerator idGenerator, IServiceProvider serviceProvider, ILogger<RandomizeService> logger) {
this.IdGenerator = idGenerator;
this.Randomizer = randomizer;
this.ServiceProvider = serviceProvider;
this.Logger = logger;
}
private ILogger<RandomizeService> Logger { get; }
private IdGenerator IdGenerator { get; }
private Randomizer Randomizer { get; }
private IServiceProvider ServiceProvider { get; }
public async Task<string> RandomizeSeed(SeedSettings settings) {
var id = this.IdGenerator.GenerateId();
this.Logger.LogInformation("Generating seed {seedId} with settings {@settings}", id, settings);
await this.Randomizer.Randomize(id, settings);
var fi = typeof(RandomizerInstance).GetField(settings.Randomizer.ToString(), BindingFlags.Static | BindingFlags.Public);
var randomizerKey = fi?.GetCustomAttribute<RandomizerNameAttribute>()?.Name;
if (randomizerKey == null) {
throw new InvalidSettingsException("Invalid randomizer: {0}", settings.Randomizer);
}
var randomizer = this.ServiceProvider.GetRequiredKeyedService<IRandomizer>(randomizerKey);
randomizer.Validate(settings);
await randomizer.Randomize(id, settings);
return id;
}
}