From 4b2f88850ec4cbdb1d82e5f5a8c411b968c07da7 Mon Sep 17 00:00:00 2001 From: Anna Date: Sun, 28 Jul 2024 00:40:02 -0400 Subject: [PATCH] feat: allow customising random evaluator pool --- ArrayExt.cs | 17 +++++++++++++++++ Commands.cs | 2 +- Configuration.cs | 4 ++++ Plugin.cs | 21 +++++++++++++++++---- PluginUi.cs | 12 ++++++++++++ 5 files changed, 51 insertions(+), 5 deletions(-) create mode 100755 ArrayExt.cs diff --git a/ArrayExt.cs b/ArrayExt.cs new file mode 100755 index 0000000..09bf8f5 --- /dev/null +++ b/ArrayExt.cs @@ -0,0 +1,17 @@ +namespace PartyDamage; + +public static class ArrayExt { + public static bool TryGetIndex(this T[] array, int index, out T? result) { + if (index < 0 || index >= array.Length) { + result = default; + return false; + } + + result = array[index]; + return true; + } + + public static T? GetIndexOrDefault(this T[] array, int index) { + return array.TryGetIndex(index, out var result) ? result : default; + } +} diff --git a/Commands.cs b/Commands.cs index e4e07a0..f8ad905 100644 --- a/Commands.cs +++ b/Commands.cs @@ -18,4 +18,4 @@ public class Commands : IDisposable { private void OnCommand(string command, string args) { this.Plugin.Ui.Visible ^= true; } -} \ No newline at end of file +} diff --git a/Configuration.cs b/Configuration.cs index 7dc23a6..7a08900 100644 --- a/Configuration.cs +++ b/Configuration.cs @@ -37,6 +37,10 @@ public class Configuration : IPluginConfiguration { }; public int EvaluationMinCombatants; public int EvaluationMinSameRole; + public Dictionary EvaluatorsRandomEnabled = Evaluator.Evaluators.ToDictionary( + e => e.Id, + _ => true + ); } public enum MeterMode { diff --git a/Plugin.cs b/Plugin.cs index 1d7d219..c9da64b 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -212,9 +212,7 @@ public class Plugin : IDalamudPlugin { return; } - var evaluator = this.Config.EvaluatorId == Evaluator.RandomId - ? Random.Shared.GetItems(Evaluator.Evaluators, 1)[0] - : Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId); + var evaluator = GetEvaluator(); if (evaluator == null) { return; } @@ -257,12 +255,27 @@ public class Plugin : IDalamudPlugin { bytes, 5f, evaluator.BattleTalkImage, - 0 + 6 ); } break; } + + return; + + Evaluator? GetEvaluator() { + if (this.Config.EvaluatorId != Evaluator.RandomId) { + return Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId); + } + + var pool = Evaluator.Evaluators + .Where(e => this.Config.EvaluatorsRandomEnabled.GetValueOrDefault(e.Id)) + .ToArray(); + return pool.Length == 0 + ? null + : Random.Shared.GetItems(pool, 1).GetIndexOrDefault(0); + } } /// diff --git a/PluginUi.cs b/PluginUi.cs index 7d6decc..f53ad1a 100644 --- a/PluginUi.cs +++ b/PluginUi.cs @@ -163,6 +163,18 @@ public class PluginUi : IDisposable { } } + if (ImGui.TreeNodeEx("Random evaluator pool")) { + using var treePop = new OnDispose(ImGui.TreePop); + + foreach (var evaluator in Evaluator.Evaluators) { + var enabled = this.Plugin.Config.EvaluatorsRandomEnabled.GetValueOrDefault(evaluator.Id, false); + if (ImGui.Checkbox(evaluator.Name, ref enabled)) { + anyChanged = true; + this.Plugin.Config.EvaluatorsRandomEnabled[evaluator.Id] = enabled; + } + } + } + anyChanged |= ImGui.SliderInt("Minimum players to show evaluation", ref this.Plugin.Config.EvaluationMinCombatants, 0, 24); anyChanged |= ImGui.SliderInt("Minimum players on the same role to show evaluation", ref this.Plugin.Config.EvaluationMinSameRole, 0, 8); }