diff --git a/Glamourer/Designs/Special/RandomDesign.cs b/Glamourer/Designs/Special/RandomDesign.cs index 13d914a..a54ffcf 100644 --- a/Glamourer/Designs/Special/RandomDesign.cs +++ b/Glamourer/Designs/Special/RandomDesign.cs @@ -12,7 +12,8 @@ public class RandomDesign(RandomDesignGenerator rng) : IDesignStandIn public const string ResolvedName = "Random"; private Design? _currentDesign; - public IReadOnlyList Predicates { get; private set; } = []; + public IReadOnlyList Predicates { get; private set; } = []; + public bool ResetOnRedraw { get; set; } = false; public string ResolveName(bool _) => ResolvedName; @@ -40,6 +41,7 @@ public class RandomDesign(RandomDesignGenerator rng) : IDesignStandIn public bool Equals(IDesignStandIn? other) => other is RandomDesign r + && r.ResetOnRedraw == ResetOnRedraw && string.Equals(RandomPredicate.GeneratePredicateString(r.Predicates), RandomPredicate.GeneratePredicateString(Predicates), StringComparison.OrdinalIgnoreCase); @@ -48,7 +50,7 @@ public class RandomDesign(RandomDesignGenerator rng) : IDesignStandIn public IEnumerable<(IDesignStandIn Design, ApplicationType Flags, JobFlag Jobs)> AllLinks(bool newApplication) { - if (newApplication) + if (newApplication || ResetOnRedraw) _currentDesign = rng.Design(Predicates); else _currentDesign ??= rng.Design(Predicates); @@ -61,22 +63,32 @@ public class RandomDesign(RandomDesignGenerator rng) : IDesignStandIn public void AddData(JObject jObj) { - jObj["Restrictions"] = RandomPredicate.GeneratePredicateString(Predicates); + jObj["Restrictions"] = RandomPredicate.GeneratePredicateString(Predicates); + jObj["ResetOnRedraw"] = ResetOnRedraw; } public void ParseData(JObject jObj) { var restrictions = jObj["Restrictions"]?.ToObject() ?? string.Empty; - Predicates = RandomPredicate.GeneratePredicates(restrictions); + Predicates = RandomPredicate.GeneratePredicates(restrictions); + ResetOnRedraw = jObj["ResetOnRedraw"]?.ToObject() ?? false; } public bool ChangeData(object data) { - if (data is not List predicates) - return false; + if (data is List predicates) + { + Predicates = predicates; + return true; + } - Predicates = predicates; - return true; + if (data is bool resetOnRedraw) + { + ResetOnRedraw = resetOnRedraw; + return true; + } + + return false; } public bool ForcedRedraw diff --git a/Glamourer/Glamourer.cs b/Glamourer/Glamourer.cs index 93173ba..9c4583f 100644 --- a/Glamourer/Glamourer.cs +++ b/Glamourer/Glamourer.cs @@ -139,7 +139,7 @@ public class Glamourer : IDalamudPlugin ReadOnlySpan relevantPlugins = [ "Penumbra", "MareSynchronos", "CustomizePlus", "SimpleHeels", "VfxEditor", "heliosphere-plugin", "Ktisis", "Brio", "DynamicBridge", - "LoporritSync", "GagSpeak", "RoleplayingVoiceDalamud", + "LoporritSync", "GagSpeak", "ProjectGagSpeak", "RoleplayingVoiceDalamud", ]; var plugins = _services.GetService().InstalledPlugins .GroupBy(p => p.InternalName) diff --git a/Glamourer/Gui/Tabs/AutomationTab/RandomRestrictionDrawer.cs b/Glamourer/Gui/Tabs/AutomationTab/RandomRestrictionDrawer.cs index f125f36..e7efc09 100644 --- a/Glamourer/Gui/Tabs/AutomationTab/RandomRestrictionDrawer.cs +++ b/Glamourer/Gui/Tabs/AutomationTab/RandomRestrictionDrawer.cs @@ -8,6 +8,7 @@ using ImGuiNET; using OtterGui; using OtterGui.Raii; using OtterGui.Services; +using OtterGui.Text; namespace Glamourer.Gui.Tabs.AutomationTab; @@ -385,6 +386,11 @@ public sealed class RandomRestrictionDrawer : IService, IDisposable ImGui.SetCursorPosY(ImGui.GetCursorPosY() - ImGui.GetStyle().WindowPadding.Y + ImGuiHelpers.GlobalScale); ImGui.Separator(); ImGui.Dummy(Vector2.Zero); + var reset = random.ResetOnRedraw; + if (ImUtf8.Checkbox("Reset Chosen Design On Every Redraw"u8, ref reset)) + _autoDesignManager.ChangeData(_set!, _designIndex, reset); + ImGui.Separator(); + ImGui.Dummy(Vector2.Zero); var list = random.Predicates.ToList(); if (list.Count == 0)