feat: add random evaluator option

This commit is contained in:
Anna 2024-07-27 21:15:28 -04:00
parent 8c7222b6ef
commit eed90f2ded
Signed by: anna
GPG Key ID: D0943384CD9F87D1
3 changed files with 43 additions and 33 deletions

View File

@ -44,6 +44,8 @@ public class Evaluator {
return line; return line;
} }
public static readonly Guid RandomId = new("00000000-0000-0000-0000-000000000001");
public static readonly Evaluator[] Evaluators = [ public static readonly Evaluator[] Evaluators = [
new Evaluator { new Evaluator {
Id = new Guid("ebbccc44-13b5-4843-a635-3b693fe47840"), Id = new Guid("ebbccc44-13b5-4843-a635-3b693fe47840"),
@ -117,10 +119,9 @@ public class Evaluator {
Lines = new Dictionary<Evaluation, SeString[]> { Lines = new Dictionary<Evaluation, SeString[]> {
[Evaluation.Best] = [ [Evaluation.Best] = [
new SeStringBuilder() new SeStringBuilder()
.AddItalics("Incredible!") .AddText("Incredible! You have ")
.AddText(" You have ")
.AddItalics("got") .AddItalics("got")
.AddText("to show me how to do that sometime!") .AddText(" to show me how to do that sometime!")
.Build(), .Build(),
], ],
}, },

View File

@ -173,37 +173,40 @@ public class Plugin : IDalamudPlugin {
this.Config.UseEvaluatorNpc this.Config.UseEvaluatorNpc
&& this.ClientState.LocalPlayer is { } player && this.ClientState.LocalPlayer is { } player
&& this.Client.Data != null && this.Client.Data != null
&& Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId) is { } evaluator
) { ) {
var combatants = this.Client.Data.Combatants.Values var evaluator = this.Config.EvaluatorId == Evaluator.RandomId
.Where(combatant => { ? Random.Shared.GetItems(Evaluator.Evaluators, 1)[0]
var job = this.DataManager.GetExcelSheet<ClassJob>()! : Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Config.EvaluatorId);
.FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase)); if (evaluator != null) {
var combatants = this.Client.Data.Combatants.Values
.Where(combatant => {
var job = this.DataManager.GetExcelSheet<ClassJob>()!
.FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase));
return job?.Role == player.ClassJob.GameData?.Role; return job?.Role == player.ClassJob.GameData?.Role;
}) })
.ToList(); .ToList();
combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps)); combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps));
var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count; var rank = (float) (combatants.FindIndex(combatant => combatant.Name == "YOU") + 1) / combatants.Count;
var evaluation = rank switch { var evaluation = rank switch {
>= .85f => Evaluation.Best, >= .85f => Evaluation.Best,
>= .65f => Evaluation.Good, >= .65f => Evaluation.Good,
>= .45f => Evaluation.Fair, >= .45f => Evaluation.Fair,
>= .25f => Evaluation.Poor, >= .25f => Evaluation.Poor,
_ => Evaluation.Awful, _ => Evaluation.Awful,
}; };
var msg = evaluator.GetLineFor(evaluation); var msg = evaluator.GetLineFor(evaluation);
if (msg != null) { if (msg != null) {
var bytes = msg.EncodeWithNullTerminator(); var bytes = msg.EncodeWithNullTerminator();
UIModule.Instance()->ShowBattleTalkImage( UIModule.Instance()->ShowBattleTalkImage(
Encoding.UTF8.GetBytes(evaluator.Name), Encoding.UTF8.GetBytes(evaluator.Name),
bytes, bytes,
5f, 5f,
evaluator.BattleTalkImage, evaluator.BattleTalkImage,
0 0
); );
}
} }
} }
} }

View File

@ -120,7 +120,9 @@ public class PluginUi : IDisposable {
using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) { using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) {
var current = Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Plugin.Config.EvaluatorId); var current = Evaluator.Evaluators.FirstOrDefault(e => e.Id == this.Plugin.Config.EvaluatorId);
var preview = current == null var preview = current == null
? "None" ? this.Plugin.Config.EvaluatorId == Evaluator.RandomId
? "Random"
: "None"
: current.Name; : current.Name;
if (ImGui.BeginCombo("Evaluator", preview)) { if (ImGui.BeginCombo("Evaluator", preview)) {
using var endCombo = new OnDispose(ImGui.EndCombo); using var endCombo = new OnDispose(ImGui.EndCombo);
@ -130,6 +132,11 @@ public class PluginUi : IDisposable {
this.Plugin.Config.EvaluatorId = Guid.Empty; 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) { foreach (var evaluator in Evaluator.Evaluators) {
if (ImGui.Selectable(evaluator.Name, this.Plugin.Config.EvaluatorId == evaluator.Id)) { if (ImGui.Selectable(evaluator.Name, this.Plugin.Config.EvaluatorId == evaluator.Id)) {
anyChanged = true; anyChanged = true;
@ -141,7 +148,6 @@ public class PluginUi : IDisposable {
} }
if (anyChanged) { if (anyChanged) {
this.Plugin.SaveConfig(); this.Plugin.SaveConfig();
} }