feat: allow customising random evaluator pool

This commit is contained in:
Anna 2024-07-28 00:40:02 -04:00
parent 57467788ea
commit 4b2f88850e
Signed by: anna
GPG Key ID: D0943384CD9F87D1
5 changed files with 51 additions and 5 deletions

17
ArrayExt.cs Executable file
View File

@ -0,0 +1,17 @@
namespace PartyDamage;
public static class ArrayExt {
public static bool TryGetIndex<T>(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<T>(this T[] array, int index) {
return array.TryGetIndex(index, out var result) ? result : default;
}
}

View File

@ -18,4 +18,4 @@ public class Commands : IDisposable {
private void OnCommand(string command, string args) {
this.Plugin.Ui.Visible ^= true;
}
}
}

View File

@ -37,6 +37,10 @@ public class Configuration : IPluginConfiguration {
};
public int EvaluationMinCombatants;
public int EvaluationMinSameRole;
public Dictionary<Guid, bool> EvaluatorsRandomEnabled = Evaluator.Evaluators.ToDictionary(
e => e.Id,
_ => true
);
}
public enum MeterMode {

View File

@ -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);
}
}
/// <summary>

View File

@ -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);
}