From 2784e3c60bda29969635eac385a4034981f15f7d Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Thu, 6 Mar 2025 21:08:02 -0600 Subject: [PATCH] Add attribute for starting items --- ALttPRandomizer/Model/SeedSettings.cs | 6 ++++-- ALttPRandomizer/Randomizers/BaseRandomizer.cs | 10 ++++------ ALttPRandomizer/Settings/Attributes.cs | 12 ++++++++++++ ALttPRandomizer/Settings/CommonSettingsProcessor.cs | 12 ++++++++++++ BaseRandomizer | 2 +- 5 files changed, 33 insertions(+), 9 deletions(-) diff --git a/ALttPRandomizer/Model/SeedSettings.cs b/ALttPRandomizer/Model/SeedSettings.cs index 8c01c63..762468e 100644 --- a/ALttPRandomizer/Model/SeedSettings.cs +++ b/ALttPRandomizer/Model/SeedSettings.cs @@ -89,7 +89,8 @@ public PrizeShuffle PrizeShuffle { get; set; } = PrizeShuffle.Vanilla; [NoSettingName] - public BootsSettings StartingBoots { get; set; } = BootsSettings.None; + [ForbiddenSetting([Apr2025], BootsSettings.Starting)] + public BootsSettings Boots { get; set; } = BootsSettings.Normal; } public enum RandomizerInstance { @@ -216,7 +217,8 @@ } public enum BootsSettings { - None, + Normal, [AdditionalSetting("--pseudoboots")] Pseudoboots, + [AddStartingItems("Pegasus_Boots")] Starting, } } diff --git a/ALttPRandomizer/Randomizers/BaseRandomizer.cs b/ALttPRandomizer/Randomizers/BaseRandomizer.cs index 4d70775..59be054 100644 --- a/ALttPRandomizer/Randomizers/BaseRandomizer.cs +++ b/ALttPRandomizer/Randomizers/BaseRandomizer.cs @@ -74,6 +74,9 @@ Logger.LogInformation("Randomizing with args: {args}", string.Join(" ", args)); + var generating = string.Format("{0}/generating", id); + await AzureStorage.UploadFile(generating, BinaryData.Empty); + var process = Process.Start(start) ?? throw new GenerationFailedException("Process failed to start."); process.EnableRaisingEvents = true; @@ -95,12 +98,7 @@ var settingsJson = JsonSerializer.SerializeToDocument(settings, JsonOptions.Default); var settingsOut = string.Format("{0}/settings.json", id); - var uploadSettings = AzureStorage.UploadFile(settingsOut, new BinaryData(settingsJson)); - - var generating = string.Format("{0}/generating", id); - var uploadGenerating = AzureStorage.UploadFile(generating, BinaryData.Empty); - - await Task.WhenAll(uploadSettings, uploadGenerating); + await AzureStorage.UploadFile(settingsOut, new BinaryData(settingsJson)); } private async Task GenerationSucceeded(string id, SeedSettings settings) { diff --git a/ALttPRandomizer/Settings/Attributes.cs b/ALttPRandomizer/Settings/Attributes.cs index 6d66af5..0f5b3bb 100644 --- a/ALttPRandomizer/Settings/Attributes.cs +++ b/ALttPRandomizer/Settings/Attributes.cs @@ -57,6 +57,18 @@ public string Setting { get; } } + internal class AddStartingItemsAttribute : RandomizerSpecificAttribute { + public AddStartingItemsAttribute(params string[] items) : base(null) { + this.Items = items; + } + + public AddStartingItemsAttribute(RandomizerInstance[] randomizers, params string[] items) : base(randomizers) { + this.Items = items; + } + + public string[] Items { get; } + } + internal class RequiredSettingAttribute : RandomizerSpecificAttribute { public RequiredSettingAttribute(params object[] values) : base(null) { this.Values = values; diff --git a/ALttPRandomizer/Settings/CommonSettingsProcessor.cs b/ALttPRandomizer/Settings/CommonSettingsProcessor.cs index 18eed32..1ab5a2c 100644 --- a/ALttPRandomizer/Settings/CommonSettingsProcessor.cs +++ b/ALttPRandomizer/Settings/CommonSettingsProcessor.cs @@ -8,6 +8,7 @@ public class CommonSettingsProcessor { public IEnumerable GetSettings(RandomizerInstance randomizer, SeedSettings settings) { var props = typeof(SeedSettings).GetProperties(BindingFlags.Instance | BindingFlags.Public); + var starting = new List(); foreach (var prop in props) { var value = prop.GetValue(settings) ?? throw new SettingsLookupException("settings.{0} not found", prop.Name); var valueFieldName = value.ToString() ?? throw new SettingsLookupException("settings.{0}.ToString() returned null", prop.Name); @@ -28,6 +29,17 @@ foreach (var att in fi.GetCustomAttributes().Where(att => att.HasRandomizer(randomizer))) { yield return att.Setting; } + + foreach (var att in fi.GetCustomAttributes().Where(att => att.HasRandomizer(randomizer))) { + foreach (var item in att.Items) { + starting.Add(item); + } + } + } + + if (starting.Count > 0) { + yield return "--usestartinventory=true"; + yield return string.Format("--startinventory={0}", string.Join(",", starting)); } } diff --git a/BaseRandomizer b/BaseRandomizer index 283ece4..82815d2 160000 --- a/BaseRandomizer +++ b/BaseRandomizer @@ -1 +1 @@ -Subproject commit 283ece402062d523193ef27d026d1ba8036fb5ad +Subproject commit 82815d256daa3d74fa3523dfc7b1dd6a95d67ee8