Mystery setup
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user