Preparation fo Mystery rolling

This commit is contained in:
2026-05-24 02:55:03 -05:00
parent 47bd6110cf
commit bceff701bf
15 changed files with 646 additions and 32 deletions

View File

@@ -0,0 +1,30 @@
namespace ALttPRandomizer.Randomizers {
using System;
using System.Linq;
using ALttPRandomizer.Model;
public class MysteryRandomizer {
private static readonly Random random = new();
public SeedSettings Roll(MysterySettings mystery, SeedSettings initialSettings) {
var mysteryFields = typeof(MysterySettings).GetProperties();
var settingsFields =
typeof(SeedSettings).GetProperties()
.ToDictionary(field => field.Name, field => field);
foreach (var field in mysteryFields) {
if (!settingsFields.ContainsKey(field.Name)) {
continue;
}
var value = field.GetValue(mystery);
if (value is IRandomizableWeights weights && !weights.IsEmpty) {
settingsFields[field.Name].SetValue(initialSettings, weights.Roll());
}
}
return initialSettings;
}
}
}