Preparation fo Mystery rolling
This commit is contained in:
30
ALttPRandomizer/Randomizers/MysteryRandomizer.cs
Normal file
30
ALttPRandomizer/Randomizers/MysteryRandomizer.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user