From eed90f2dedfd47a2bc110b2cdbf027d92b51a8b2 Mon Sep 17 00:00:00 2001 From: Anna Date: Sat, 27 Jul 2024 21:15:28 -0400 Subject: [PATCH] feat: add random evaluator option --- Evaluator.cs | 7 ++++--- Plugin.cs | 59 +++++++++++++++++++++++++++------------------------- PluginUi.cs | 10 +++++++-- 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/Evaluator.cs b/Evaluator.cs index 1f908a2..abcb3e6 100644 --- a/Evaluator.cs +++ b/Evaluator.cs @@ -44,6 +44,8 @@ public class Evaluator { return line; } + public static readonly Guid RandomId = new("00000000-0000-0000-0000-000000000001"); + public static readonly Evaluator[] Evaluators = [ new Evaluator { Id = new Guid("ebbccc44-13b5-4843-a635-3b693fe47840"), @@ -117,10 +119,9 @@ public class Evaluator { Lines = new Dictionary { [Evaluation.Best] = [ new SeStringBuilder() - .AddItalics("Incredible!") - .AddText(" You have ") + .AddText("Incredible! You have ") .AddItalics("got") - .AddText("to show me how to do that sometime!") + .AddText(" to show me how to do that sometime!") .Build(), ], }, diff --git a/Plugin.cs b/Plugin.cs index 60fe02d..d196304 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -173,37 +173,40 @@ public class Plugin : IDalamudPlugin { this.Config.UseEvaluatorNpc && this.ClientState.LocalPlayer is { } player && this.Client.Data != null - && Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId) is { } evaluator ) { - var combatants = this.Client.Data.Combatants.Values - .Where(combatant => { - var job = this.DataManager.GetExcelSheet()! - .FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase)); + var evaluator = this.Config.EvaluatorId == Evaluator.RandomId + ? Random.Shared.GetItems(Evaluator.Evaluators, 1)[0] + : Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId); + if (evaluator != null) { + var combatants = this.Client.Data.Combatants.Values + .Where(combatant => { + var job = this.DataManager.GetExcelSheet()! + .FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase)); - return job?.Role == player.ClassJob.GameData?.Role; - }) - .ToList(); - combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps)); - var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count; - var evaluation = rank switch { - >= .85f => Evaluation.Best, - >= .65f => Evaluation.Good, - >= .45f => Evaluation.Fair, - >= .25f => Evaluation.Poor, - _ => Evaluation.Awful, - }; - var msg = evaluator.GetLineFor(evaluation); - if (msg != null) { - var bytes = msg.EncodeWithNullTerminator(); - UIModule.Instance()->ShowBattleTalkImage( - Encoding.UTF8.GetBytes(evaluator.Name), - bytes, - 5f, - evaluator.BattleTalkImage, - 0 - ); + return job?.Role == player.ClassJob.GameData?.Role; + }) + .ToList(); + combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps)); + var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count; + var evaluation = rank switch { + >= .85f => Evaluation.Best, + >= .65f => Evaluation.Good, + >= .45f => Evaluation.Fair, + >= .25f => Evaluation.Poor, + _ => Evaluation.Awful, + }; + var msg = evaluator.GetLineFor(evaluation); + if (msg != null) { + var bytes = msg.EncodeWithNullTerminator(); + UIModule.Instance()->ShowBattleTalkImage( + Encoding.UTF8.GetBytes(evaluator.Name), + bytes, + 5f, + evaluator.BattleTalkImage, + 0 + ); + } } - } } diff --git a/PluginUi.cs b/PluginUi.cs index e4f99a8..85d8b6c 100644 --- a/PluginUi.cs +++ b/PluginUi.cs @@ -120,7 +120,9 @@ public class PluginUi : IDisposable { using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) { var current = Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Plugin.Config.EvaluatorId); var preview = current == null - ? "None" + ? this.Plugin.Config.EvaluatorId == Evaluator.RandomId + ? "Random" + : "None" : current.Name; if (ImGui.BeginCombo("Evaluator", preview)) { using var endCombo = new OnDispose(ImGui.EndCombo); @@ -130,6 +132,11 @@ public class PluginUi : IDisposable { this.Plugin.Config.EvaluatorId = Guid.Empty; } + if (ImGui.Selectable("Random", this.Plugin.Config.EvaluatorId == Evaluator.RandomId)) { + anyChanged = true; + this.Plugin.Config.EvaluatorId = Evaluator.RandomId; + } + foreach (var evaluator in Evaluator.Evaluators) { if (ImGui.Selectable(evaluator.Name, this.Plugin.Config.EvaluatorId == evaluator.Id)) { anyChanged = true; @@ -141,7 +148,6 @@ public class PluginUi : IDisposable { } - if (anyChanged) { this.Plugin.SaveConfig(); }