From 528276c4146b58f3dfe72a3a41aa8a099462d291 Mon Sep 17 00:00:00 2001 From: Anna Date: Wed, 24 Jul 2024 23:56:10 -0400 Subject: [PATCH] fix: more performant and reset mana --- Plugin.cs | 58 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 18 deletions(-) diff --git a/Plugin.cs b/Plugin.cs index 5092c84..8afc5f5 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -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(); - 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); } + + // 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, Encounter encounter, Combatant 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; }