refactor: pull evaluation into its own method

This commit is contained in:
Anna 2024-07-27 22:46:45 -04:00
parent b299309463
commit 7e77b5100a
Signed by: anna
GPG Key ID: D0943384CD9F87D1

View File

@ -169,48 +169,7 @@ public class Plugin : IDalamudPlugin {
this.DelayWatch.Restart();
}
if (
this.Config.UseEvaluatorNpc
&& this.ClientState.LocalPlayer is { } player
&& this.Client.Data != null
) {
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<ClassJob>()!
.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 thresholds = this.Config.EvaluationThresholds.ToList();
thresholds.Sort((a, b) => b.Value.CompareTo(a.Value));
foreach (var threshold in thresholds) {
if (rank < threshold.Value) {
continue;
}
var msg = evaluator.GetLineFor(threshold.Key);
if (msg != null) {
var bytes = msg.EncodeWithNullTerminator();
UIModule.Instance()->ShowBattleTalkImage(
Encoding.UTF8.GetBytes(evaluator.Name),
bytes,
5f,
evaluator.BattleTalkImage,
0
);
}
break;
}
}
}
this.HandleEvaluation();
}
if (this.Config.ClearResultsOnInactive && this.DelayWatch.IsRunning && this.DelayWatch.Elapsed >= TimeSpan.FromSeconds(this.Config.ClearDelaySeconds)) {
@ -244,6 +203,60 @@ public class Plugin : IDalamudPlugin {
}
}
private unsafe void HandleEvaluation() {
if (
!this.Config.UseEvaluatorNpc
|| this.ClientState.LocalPlayer is not { } player
|| this.Client.Data == null
) {
return;
}
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) {
return;
}
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;
})
.ToList();
combatants.Sort((a, b) => a.EncDps.CompareTo(b.EncDps));
var youIndex = combatants.FindIndex(combatant => combatant.Name == "YOU");
if (youIndex == -1) {
return;
}
var rank = (float) (youIndex + 1) / combatants.Count;
var thresholds = this.Config.EvaluationThresholds.ToList();
thresholds.Sort((a, b) => b.Value.CompareTo(a.Value));
foreach (var threshold in thresholds) {
if (rank < threshold.Value) {
continue;
}
var msg = evaluator.GetLineFor(threshold.Key);
if (msg != null) {
var bytes = msg.EncodeWithNullTerminator();
UIModule.Instance()->ShowBattleTalkImage(
Encoding.UTF8.GetBytes(evaluator.Name),
bytes,
5f,
evaluator.BattleTalkImage,
0
);
}
break;
}
}
/// <summary>
/// Update the party list.
/// </summary>