fix: more performant and reset mana

This commit is contained in:
Anna 2024-07-24 23:56:10 -04:00
parent 9273763187
commit 528276c414
Signed by: anna
GPG Key ID: D0943384CD9F87D1

View File

@ -117,6 +117,7 @@ public class Plugin : IDalamudPlugin {
}
var chara = (Character*) player.Address;
var playerName = player.Name.TextValue;
var list = (AddonPartyList*) AtkStage.Instance()->RaptureAtkUnitManager->GetAddonByName("_PartyList");
if (list->HoveredIndex >= 0 || list->TargetedIndex >= 0) {
@ -124,7 +125,9 @@ public class Plugin : IDalamudPlugin {
}
var names = new List<string>();
foreach (var member in AgentHUD.Instance()->PartyMembers) {
var members = AgentHUD.Instance()->PartyMembers;
for (var i = 0; i < members.Length && i < list->PartyMembers.Length; i++) {
var member = members[i];
if (member.Name == null) {
continue;
}
@ -136,31 +139,46 @@ public class Plugin : IDalamudPlugin {
var name = MemoryHelper.ReadStringNullTerminated((nint) member.Name);
names.Add(name);
}
var numPlayers = list->PartyMembers.Length;
foreach (var combatant in data.Combatants.Values) {
if (combatant.Name.EndsWith(" (YOU)")) {
var name = combatant.Name[..^6];
var chocoboName = UIState.Instance()->Buddy.CompanionInfo.NameString;
if (chocoboName == name) {
this.UpdateMember(list->Chocobo, data.Encounter, combatant);
continue;
}
}
var lookupName = name == playerName
? "YOU"
: name;
var idx = combatant.Name == "YOU"
? 0
: names.IndexOf(combatant.Name);
if (idx == -1 || idx >= numPlayers) {
if (!data.Combatants.TryGetValue(lookupName, out var combatant)) {
continue;
}
this.UpdateMember(list->PartyMembers[idx], data.Encounter, combatant);
}
this.UpdateMember(list->PartyMembers[i], member.Object, data.Encounter, combatant);
}
private unsafe void UpdateMember(AddonPartyList.PartyListMemberStruct member, Encounter encounter, Combatant combatant) {
// var numPlayers = list->PartyMembers.Length;
// foreach (var combatant in data.Combatants.Values) {
// if (combatant.Name.EndsWith(" (YOU)")) {
// var name = combatant.Name[..^6];
// var chocoboName = UIState.Instance()->Buddy.CompanionInfo.NameString;
// if (chocoboName == name) {
// this.UpdateMember(list->Chocobo, data.Encounter, combatant);
// continue;
// }
// }
// var idx = combatant.Name == "YOU"
// ? 0
// : names.IndexOf(combatant.Name);
// if (idx == -1 || idx >= numPlayers) {
// continue;
// }
// this.UpdateMember(list->PartyMembers[idx], data.Encounter, combatant);
// }
}
private unsafe void UpdateMember(
AddonPartyList.PartyListMemberStruct member,
BattleChara* chara,
Encounter encounter,
Combatant combatant
) {
member.TargetGlow->ToggleVisibility(true);
member.TargetGlow->SetAlpha(128);
member.TargetGlow->SetScaleX(
@ -178,6 +196,10 @@ public class Plugin : IDalamudPlugin {
};
right->TextColor = left->TextColor;
var manaString = chara->Mana.ToString(CultureInfo.InvariantCulture);
left->SetText(manaString[..^2]);
right->SetText(manaString[^2..]);
return;
}