Mystery setup

This commit is contained in:
2026-05-25 00:23:10 -05:00
parent bceff701bf
commit 3fae7e5b4c
7 changed files with 70 additions and 22 deletions
@@ -2,6 +2,7 @@
using ALttPRandomizer.Azure;
using ALttPRandomizer.Model;
using ALttPRandomizer.Randomizers;
using ALttPRandomizer.Settings;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Text.Json;
@@ -11,10 +12,12 @@
public RandomizeService(
IdGenerator idGenerator,
BaseRandomizer baseRandomizer,
MysteryRandomizer mysteryRandomizer,
AzureStorage azureStorage,
ILogger<RandomizeService> logger) {
this.IdGenerator = idGenerator;
this.BaseRandomizer = baseRandomizer;
this.MysteryRandomizer = mysteryRandomizer;
this.AzureStorage = azureStorage;
this.Logger = logger;
}
@@ -23,6 +26,7 @@
private IdGenerator IdGenerator { get; }
private BaseRandomizer BaseRandomizer { get; }
private MysteryRandomizer MysteryRandomizer { get; }
private AzureStorage AzureStorage { get; }
public async Task<string> RandomizeSeed(SeedSettings settings, string? seedId = null) {
@@ -35,6 +39,31 @@
return id;
}
public async Task<string> RandomizeMystery(MysterySettings mysterySettings, SeedSettings baseSettings, string? seedId = null) {
var id = seedId ?? this.IdGenerator.GenerateId();
this.Logger.LogDebug("Rolling mystery seed {seedId} with mystery {@settings}", id, mysterySettings);
SeedSettings seedSettings;
for (var i = 0; i < 10; i++) {
seedSettings = baseSettings.Clone();
this.MysteryRandomizer.Roll(mysterySettings, seedSettings);
this.Logger.LogInformation("Mystery seed {seedId} rolled settings {@settings}", id, seedSettings);
try {
this.BaseRandomizer.Validate(seedSettings);
} catch (InvalidSettingsException) {
this.Logger.LogWarning("Mystery seed {seedId} settings {@settings} failed validation; retrying", id, seedSettings);
continue;
}
await this.BaseRandomizer.Randomize(id, seedSettings, true, seedId == null ? mysterySettings : null);
return id;
}
throw new InvalidSettingsException("Could not roll settings that pass validation");
}
public async Task<string> RandomizeMultiworld(IList<SeedSettings> settings, string? multiId = null) {
var id = multiId ?? this.IdGenerator.GenerateId();
this.Logger.LogInformation("Generating multiworld {seedId} with settings {@settings}", id, settings);