fix: handle reset properly

This commit is contained in:
Anna 2024-07-27 20:08:48 -04:00
parent c1aeff4684
commit 953016e733
Signed by: anna
GPG Key ID: D0943384CD9F87D1
3 changed files with 130 additions and 83 deletions

View File

@ -3,6 +3,7 @@ using Dalamud.Game.Text.SeStringHandling;
using Dalamud.Game.Text.SeStringHandling.Payloads; using Dalamud.Game.Text.SeStringHandling.Payloads;
namespace PartyDamage; namespace PartyDamage;
public class Evaluator { public class Evaluator {
public required Guid Id { get; init; } public required Guid Id { get; init; }
public required string Name { get; init; } public required string Name { get; init; }
@ -21,17 +22,24 @@ public class Evaluator {
} }
foreach (var payload in line.Payloads) { foreach (var payload in line.Payloads) {
if (payload is TextPayload text) { if (payload is not TextPayload text) {
continue;
}
var newText = new StringBuilder(); var newText = new StringBuilder();
var upper = true; var upper = true;
foreach (var ch in text.Text!) { foreach (var ch in text.Text!) {
if (!char.IsLetter(ch)) {
newText.Append(ch);
continue;
}
newText.Append(upper ? char.ToUpperInvariant(ch) : char.ToLowerInvariant(ch)); newText.Append(upper ? char.ToUpperInvariant(ch) : char.ToLowerInvariant(ch));
upper = !upper; upper = !upper;
} }
text.Text = newText.ToString(); text.Text = newText.ToString();
} }
}
return line; return line;
} }
@ -80,10 +88,8 @@ public class Evaluator {
Name = "G'raha Tia", Name = "G'raha Tia",
BattleTalkImage = 73012, BattleTalkImage = 73012,
Lines = new Dictionary<Evaluation, SeString[]> { Lines = new Dictionary<Evaluation, SeString[]> {
}, },
}, },
]; ];
} }

View File

@ -47,6 +47,9 @@ public class Plugin : IDalamudPlugin {
[PluginService] [PluginService]
internal IDataManager DataManager { get; init; } internal IDataManager DataManager { get; init; }
// [PluginService]
// internal ITextureProvider TextureProvider { get; init; }
internal Configuration Config { get; } internal Configuration Config { get; }
private Client Client { get; } private Client Client { get; }
internal PluginUi Ui { get; } internal PluginUi Ui { get; }
@ -177,7 +180,7 @@ public class Plugin : IDalamudPlugin {
var job = this.DataManager.GetExcelSheet<ClassJob>()! var job = this.DataManager.GetExcelSheet<ClassJob>()!
.FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase)); .FirstOrDefault(j => j.Abbreviation.RawString.Equals(combatant.JobAbbr, StringComparison.InvariantCultureIgnoreCase));
return job?.ClassJobCategory.Row == player.ClassJob.GameData?.ClassJobCategory.Row; 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));
@ -300,10 +303,11 @@ public class Plugin : IDalamudPlugin {
AddonPartyList* list, AddonPartyList* list,
BattleChara* chara, BattleChara* chara,
int listIndex, int listIndex,
bool includeBar,
bool includeTargeted bool includeTargeted
) { ) {
var unit = list->PartyMembers[listIndex]; var unit = list->PartyMembers[listIndex];
if (unit.TargetGlow != null && (includeTargeted || list->TargetedIndex != listIndex)) { if (includeBar && unit.TargetGlow != null && (includeTargeted || list->TargetedIndex != listIndex)) {
unit.TargetGlow->SetAlpha(255); unit.TargetGlow->SetAlpha(255);
unit.TargetGlow->SetScaleX(0); unit.TargetGlow->SetScaleX(0);
unit.TargetGlow->AddRed = 0; unit.TargetGlow->AddRed = 0;
@ -388,7 +392,7 @@ public class Plugin : IDalamudPlugin {
private unsafe void ResetMembers(AddonPartyList* list) { private unsafe void ResetMembers(AddonPartyList* list) {
var members = AgentHUD.Instance()->PartyMembers; var members = AgentHUD.Instance()->PartyMembers;
for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) { for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) {
this.ResetMember(list, members[i].Object, i, false); this.ResetMember(list, members[i].Object, i, true, false);
} }
} }
@ -430,7 +434,7 @@ public class Plugin : IDalamudPlugin {
if (this.Config.Alternate && !this._showDps) { if (this.Config.Alternate && !this._showDps) {
var isCaster = hasChara && Array.IndexOf(this._manaUsers, chara->ClassJob) != -1; var isCaster = hasChara && Array.IndexOf(this._manaUsers, chara->ClassJob) != -1;
if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) { if (!this.Config.ManaModeAlternateOnlyManaUsers || isCaster) {
this.ResetMember(list, chara, listIndex, true); this.ResetMember(list, chara, listIndex, false, false);
return; return;
} }
} }

View File

@ -30,6 +30,15 @@ public class PluginUi : IDisposable {
var anyChanged = false; var anyChanged = false;
if (!ImGui.BeginTabBar("##main-tab-bar")) {
return;
}
using var endTabBar = new OnDispose(ImGui.EndTabBar);
if (ImGui.BeginTabItem("Meter")) {
using var endTabItem = new OnDispose(ImGui.EndTabItem);
// ImGui.TextUnformatted("Meter mode"); // ImGui.TextUnformatted("Meter mode");
// if (ImGui.BeginCombo("##mode", Enum.GetName(this.Plugin.Config.Mode))) { // if (ImGui.BeginCombo("##mode", Enum.GetName(this.Plugin.Config.Mode))) {
// using var endCombo = new OnDispose(ImGui.EndCombo); // using var endCombo = new OnDispose(ImGui.EndCombo);
@ -60,6 +69,8 @@ public class PluginUi : IDisposable {
anyChanged |= ImGui.SliderInt("Multiply blue", ref this.Plugin.Config.BarMulBlue, 0, 100); anyChanged |= ImGui.SliderInt("Multiply blue", ref this.Plugin.Config.BarMulBlue, 0, 100);
} }
ImGui.Spacing();
anyChanged |= ImGui.Checkbox("Alternate between values", ref this.Plugin.Config.Alternate); anyChanged |= ImGui.Checkbox("Alternate between values", ref this.Plugin.Config.Alternate);
using (ImGuiHelper.DisabledUnless(this.Plugin.Config.Alternate)) { using (ImGuiHelper.DisabledUnless(this.Plugin.Config.Alternate)) {
anyChanged |= ImGui.SliderFloat("Seconds before alternating", ref this.Plugin.Config.AlternateSeconds, 0.1f, 60f); anyChanged |= ImGui.SliderFloat("Seconds before alternating", ref this.Plugin.Config.AlternateSeconds, 0.1f, 60f);
@ -69,6 +80,8 @@ public class PluginUi : IDisposable {
anyChanged |= ImGui.Checkbox("Only alternate on jobs that use mana", ref this.Plugin.Config.ManaModeAlternateOnlyManaUsers); anyChanged |= ImGui.Checkbox("Only alternate on jobs that use mana", ref this.Plugin.Config.ManaModeAlternateOnlyManaUsers);
} }
ImGui.Spacing();
var textColour = ConvertRgba(this.Plugin.Config.TextColour); var textColour = ConvertRgba(this.Plugin.Config.TextColour);
if (ImGui.ColorEdit3("DPS text colour", ref textColour)) { if (ImGui.ColorEdit3("DPS text colour", ref textColour)) {
anyChanged = true; anyChanged = true;
@ -86,10 +99,22 @@ public class PluginUi : IDisposable {
anyChanged |= ImGui.SliderInt("Multiply blue", ref this.Plugin.Config.TextMulBlue, 0, 100); anyChanged |= ImGui.SliderInt("Multiply blue", ref this.Plugin.Config.TextMulBlue, 0, 100);
} }
ImGui.Spacing();
anyChanged |= ImGui.Checkbox("Clear results after encounter ends", ref this.Plugin.Config.ClearResultsOnInactive); anyChanged |= ImGui.Checkbox("Clear results after encounter ends", ref this.Plugin.Config.ClearResultsOnInactive);
using (ImGuiHelper.DisabledUnless(this.Plugin.Config.ClearResultsOnInactive)) { using (ImGuiHelper.DisabledUnless(this.Plugin.Config.ClearResultsOnInactive)) {
anyChanged |= ImGui.SliderFloat("Seconds to delay before clearing", ref this.Plugin.Config.ClearDelaySeconds, 0, 300); anyChanged |= ImGui.SliderFloat("Seconds to delay before clearing", ref this.Plugin.Config.ClearDelaySeconds, 0, 300);
} }
}
if (ImGui.BeginTabItem("Evaluations")) {
using var endTabItem = new OnDispose(ImGui.EndTabItem);
ImGui.PushTextWrapPos();
using var popTextWrapPos = new OnDispose(ImGui.PopTextWrapPos);
ImGui.TextUnformatted("These evaluations are based on your relative rank compared to other players playing the same role (tank, healer, melee, magical ranged, physical ranged). This means that you will always receive the highest evaluation if you are the only member of your role. These evaluations should not be taken too seriously.");
ImGui.Separator();
anyChanged |= ImGui.Checkbox("Show an NPC text bubble rating your performance after an encounter", ref this.Plugin.Config.UseEvaluatorNpc); anyChanged |= ImGui.Checkbox("Show an NPC text bubble rating your performance after an encounter", ref this.Plugin.Config.UseEvaluatorNpc);
using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) { using (ImGuiHelper.DisabledUnless(this.Plugin.Config.UseEvaluatorNpc)) {
@ -113,12 +138,24 @@ public class PluginUi : IDisposable {
} }
} }
} }
}
if (anyChanged) { if (anyChanged) {
this.Plugin.SaveConfig(); this.Plugin.SaveConfig();
} }
// ImGui.InputInt("image id", ref this._imageId);
// if (this.Plugin.TextureProvider.TryGetFromGameIcon(new GameIconLookup((uint) this._imageId), out var tex)) {
// if (tex.TryGetWrap(out var wrap, out _)) {
// ImGui.Image(wrap.ImGuiHandle, new Vector2(wrap.Width, wrap.Height));
// }
// }
} }
// private int _imageId = 73000;
private static Vector3 ConvertRgba(uint colour) { private static Vector3 ConvertRgba(uint colour) {
var red = colour >> 24; var red = colour >> 24;
var green = (colour >> 16) & 0xFF; var green = (colour >> 16) & 0xFF;