fix: reset text colour when resetting all members

This commit is contained in:
Anna 2024-08-08 15:23:33 -04:00
parent 10be02139f
commit 5e4e443e4f
Signed by: anna
GPG Key ID: D0943384CD9F87D1

147
Plugin.cs
View File

@ -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<AtkTextNode>, Pointer<AtkTextNode>) 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<AtkTextNode>) left : null,
hasRight ? (Pointer<AtkTextNode>) 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) {