Make PreventRandomc figurable, clean up logic

Will no longer hold design reference or make redundant copy of list
This commit is contained in:
Diorik 2025-02-06 12:49:23 -06:00
parent 45981f2fee
commit 67fd65d366
3 changed files with 13 additions and 8 deletions

View file

@ -67,6 +67,7 @@ public class Configuration : IPluginConfiguration, ISavable
public bool UseTemporarySettings { get; set; } = true; public bool UseTemporarySettings { get; set; } = true;
public bool AllowDoubleClickToApply { get; set; } = false; public bool AllowDoubleClickToApply { get; set; } = false;
public bool RespectManualOnAutomationUpdate { get; set; } = false; public bool RespectManualOnAutomationUpdate { get; set; } = false;
public bool PreventRandomRepeats { get; set; } = false;
public DefaultDesignSettings DefaultDesignSettings { get; set; } = new(); public DefaultDesignSettings DefaultDesignSettings { get; set; } = new();

View file

@ -1,24 +1,25 @@
using OtterGui.Services; using OtterGui;
using OtterGui.Services;
namespace Glamourer.Designs.Special; namespace Glamourer.Designs.Special;
public class RandomDesignGenerator(DesignStorage designs, DesignFileSystem fileSystem) : IService public class RandomDesignGenerator(DesignStorage designs, DesignFileSystem fileSystem, Configuration config) : IService
{ {
private readonly Random _rng = new(); private readonly Random _rng = new();
private Design? _lastDesign = null; private Guid? _lastDesignID = null;
public Design? Design(IReadOnlyList<Design> localDesigns) public Design? Design(IList<Design> localDesigns)
{ {
if (localDesigns.Count == 0) if (localDesigns.Count == 0)
return null; return null;
if (_lastDesign != null && localDesigns.Count > 1) if (config.PreventRandomRepeats && _lastDesignID != null && localDesigns.Count > 1 && localDesigns.FindFirst(d => d.Identifier == _lastDesignID, out var found))
localDesigns = localDesigns.Where(d => d != _lastDesign).ToList(); localDesigns.Remove(found);
var idx = _rng.Next(0, localDesigns.Count); var idx = _rng.Next(0, localDesigns.Count);
Glamourer.Log.Verbose($"[Random Design] Chose design {idx + 1} out of {localDesigns.Count}: {localDesigns[idx].Incognito}."); Glamourer.Log.Verbose($"[Random Design] Chose design {idx + 1} out of {localDesigns.Count}: {localDesigns[idx].Incognito}.");
_lastDesign = localDesigns[idx]; _lastDesignID = localDesigns[idx].Identifier;
return _lastDesign; return localDesigns[idx];
} }
public Design? Design() public Design? Design()

View file

@ -109,6 +109,9 @@ public class SettingsTab(
Checkbox("Use Temporary Mod Settings", Checkbox("Use Temporary Mod Settings",
"Apply all settings as temporary settings so they will be reset when Glamourer or the game shut down.", config.UseTemporarySettings, "Apply all settings as temporary settings so they will be reset when Glamourer or the game shut down.", config.UseTemporarySettings,
v => config.UseTemporarySettings = v); v => config.UseTemporarySettings = v);
Checkbox("Prevent Random Design Repeats",
"When using random designs, prevent the same design from being chosen twice in a row.",
config.PreventRandomRepeats, v => config.PreventRandomRepeats = v);
ImGui.NewLine(); ImGui.NewLine();
} }