From 5e4e443e4f8ce15ed4146c431655dc22497b81e7 Mon Sep 17 00:00:00 2001 From: Anna Date: Thu, 8 Aug 2024 15:23:33 -0400 Subject: [PATCH] fix: reset text colour when resetting all members --- Plugin.cs | 147 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 76 insertions(+), 71 deletions(-) diff --git a/Plugin.cs b/Plugin.cs index cded992..874fe43 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -20,6 +20,7 @@ using FFXIVClientStructs.FFXIV.Client.UI; using FFXIVClientStructs.FFXIV.Client.UI.Agent; using FFXIVClientStructs.FFXIV.Client.UI.Info; using FFXIVClientStructs.FFXIV.Component.GUI; +using FFXIVClientStructs.Interop; using Lumina.Excel.GeneratedSheets; namespace PartyDamage; @@ -409,6 +410,77 @@ public class Plugin : IDalamudPlugin { return false; } + private unsafe (Pointer, Pointer) GetTextNodes(AddonPartyList.PartyListMemberStruct unit) { + if (unit.MPGaugeBar == null) { + return (null, null); + } + + var left = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(2); + var right = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(3); + + var hasLeft = left != null && left->IsVisible(); + var hasRight = right != null && right->IsVisible(); + + return ( + hasLeft ? (Pointer) left : null, + hasRight ? (Pointer) right : null + ); + } + + private unsafe void ResetTextColour(AddonPartyList.PartyListMemberStruct unit) { + var (left, right) = this.GetTextNodes(unit); + + if (left.Value == null) { + return; + } + + left.Value->TextColor = new ByteColor { + RGBA = 0xFFFFFFFF, + }; + + left.Value->AddRed = 0; + left.Value->AddGreen = 0; + left.Value->AddBlue = 0; + left.Value->MultiplyRed = 100; + left.Value->MultiplyGreen = 100; + left.Value->MultiplyBlue = 100; + + if (right.Value == null) { + return; + } + + right.Value->TextColor = left.Value->TextColor; + right.Value->AddRed = left.Value->AddRed; + right.Value->AddGreen = left.Value->AddGreen; + right.Value->AddBlue = left.Value->AddBlue; + right.Value->MultiplyRed = left.Value->MultiplyRed; + right.Value->MultiplyGreen = left.Value->MultiplyGreen; + right.Value->MultiplyBlue = left.Value->MultiplyBlue; + } + + private unsafe void ResetManaText(AddonPartyList.PartyListMemberStruct unit, uint? mana) { + var (left, right) = this.GetTextNodes(unit); + + if (left.Value == null) { + return; + } + + var manaString = mana == null + ? "???" + : mana.Value.ToString(CultureInfo.InvariantCulture); + if (right.Value != null) { + if (manaString.Length <= 1) { + left.Value->SetText(""); + right.Value->SetText(manaString); + } else { + left.Value->SetText(manaString[..^2]); + right.Value->SetText(manaString[^2..]); + } + } else { + left.Value->SetText(manaString); + } + } + private unsafe void ResetMember( AddonPartyList* list, ListInfo info, @@ -449,77 +521,8 @@ public class Plugin : IDalamudPlugin { } } - if (unit.MPGaugeBar == null) { - return; - } - - var left = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(2); - var right = (AtkTextNode*) unit.MPGaugeBar->GetTextNodeById(3); - - var hasLeft = left != null && left->IsVisible(); - var hasRight = right != null && right->IsVisible(); - - if (!hasLeft) { - return; - } - - left->TextColor = new ByteColor { - RGBA = 0xFFFFFFFF, - }; - - var manaString = info.Mana == null - ? "???" - : info.Mana.Value.ToString(CultureInfo.InvariantCulture); - if (hasRight) { - if (manaString.Length <= 1) { - left->SetText(""); - right->SetText(manaString); - } else { - left->SetText(manaString[..^2]); - right->SetText(manaString[^2..]); - } - } else { - left->SetText(manaString); - } - - left->AddRed = 0; - left->AddGreen = 0; - left->AddBlue = 0; - left->MultiplyRed = 100; - left->MultiplyGreen = 100; - left->MultiplyBlue = 100; - - if (hasRight) { - right->TextColor = left->TextColor; - right->AddRed = left->AddRed; - right->AddGreen = left->AddGreen; - right->AddBlue = left->AddBlue; - right->MultiplyRed = left->MultiplyRed; - right->MultiplyGreen = left->MultiplyGreen; - right->MultiplyBlue = left->MultiplyBlue; - } - - // fixme: need to figure out a way to get the game to repop - // var defaultName = new StringBuilder("\ue06a"); - // foreach (var digit in member.Object->Level.ToString(CultureInfo.InvariantCulture)) { - // var offset = digit - '0'; - // defaultName.Append((char) ('\ue060' + offset)); - // } - - // defaultName.Append(' '); - // defaultName.Append(member.Object->NameString); - - // unit.Name->SetText(defaultName.ToString()); - // unit.Name->TextColor = new ByteColor { - // RGBA = 0xFFFFFFFF, - // }; - - // unit.Name->AddRed = 0; - // unit.Name->AddGreen = 0; - // unit.Name->AddBlue = 0; - // unit.Name->MultiplyRed = 100; - // unit.Name->MultiplyGreen = 100; - // unit.Name->MultiplyBlue = 100; + this.ResetTextColour(unit); + this.ResetManaText(unit, info.Mana); } private unsafe void ResetMembers(AddonPartyList* list) { @@ -527,6 +530,8 @@ public class Plugin : IDalamudPlugin { if (member.TargetGlow != null) { member.TargetGlow->SetWidth(320); } + + this.ResetTextColour(member); } if (list->Chocobo.TargetGlow != null) {