Files
alttpr-backend/ALttPRandomizer/Randomizers/MysteryRandomizer.cs

31 lines
1008 B
C#

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