fix: reset text colour when resetting all members
This commit is contained in:
parent
10be02139f
commit
5e4e443e4f
147
Plugin.cs
147
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<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) {
|
||||
|
Loading…
Reference in New Issue
Block a user