31 lines
1008 B
C#
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;
|
|
}
|
|
}
|
|
}
|