From e277722cc10911f9bdc4a88de03a1dfe2fec560a Mon Sep 17 00:00:00 2001 From: Fernando Cortez Date: Thu, 18 Mar 2021 22:57:45 -0400 Subject: [PATCH 1/4] event added for clientcharactervisualization on destroy to clean up UI --- .../Character/ClientCharacterVisualization.cs | 15 +++++++++++ Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs | 26 ++++++++++++------- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs index 8152f418c..8f123ca31 100644 --- a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs +++ b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs @@ -15,6 +15,8 @@ public class ClientCharacterVisualization : NetworkBehaviour { private NetworkCharacterState m_NetState; + ulong m_ParentNetworkObjectID; + [SerializeField] private Animator m_ClientVisualsAnimator; @@ -48,6 +50,8 @@ public class ClientCharacterVisualization : NetworkBehaviour int m_DeadStateTriggerID; int m_HitStateTriggerID; + public event Action Destroyed; + /// public override void NetworkStart() { @@ -120,6 +124,15 @@ public override void NetworkStart() else { m_PartyHUD.SetAllyData(m_NetState); + + m_ParentNetworkObjectID = m_NetState.NetworkObjectId; + Destroyed += () => + { + if (m_PartyHUD != null) + { + m_PartyHUD.RemoveAlly(m_ParentNetworkObjectID); + } + }; } } } @@ -153,6 +166,8 @@ private void OnDestroy() m_NetState.OnStopChargingUpClient -= OnStoppedChargingUp; m_NetState.IsStealthy.OnValueChanged -= OnStealthyChanged; } + + Destroyed?.Invoke(); } private void OnPerformHitReaction() diff --git a/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs b/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs index 8ea23f454..19f78bba0 100644 --- a/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs +++ b/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs @@ -33,7 +33,7 @@ public class PartyHUD : MonoBehaviour [SerializeField] private Sprite[] m_ClassSymbols; - // track a list of hero (slot 0) + allies + // track a list of hero (slot 0) + allies private ulong[] m_PartyIds; // track Hero's target to show when it is the Hero or an ally @@ -113,15 +113,6 @@ public void SetAllyHealth(ulong id, int hp) m_PartyHealthSliders[slot].value = hp; } - public void SetAllyName(ulong id, string name) - { - int slot = FindOrAddAlly(id); - // do nothing if not in a slot - if (slot == -1) { return; } - - m_PartyNames[slot].text = name; - } - private void OnHeroSelectionChanged(ulong prevTarget, ulong newTarget) { SetHeroSelectFX(m_CurrentTarget, false); @@ -205,5 +196,20 @@ private int FindOrAddAlly(ulong id, bool dontAdd = false) // this should not happen unless there are too many players - we didn't find the ally or a slot return -1; } + + public void RemoveAlly(ulong id) + { + for (int i = 0; i < m_PartyIds.Length; i++) + { + // if this ID is in the list, return the slot index + if (m_PartyIds[i] == id) + { + m_AllyPanel[i - 1].SetActive(false); + // and save ally ID to party array + m_PartyIds[i] = 0; + return; + } + } + } } } From 3d79efbd44571c19752a8e0a4f1149d1153a2652 Mon Sep 17 00:00:00 2001 From: Fernando Cortez Date: Fri, 19 Mar 2021 10:44:40 -0400 Subject: [PATCH 2/4] commenting --- .../Client/Game/Character/ClientCharacterVisualization.cs | 3 +++ Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs index 8f123ca31..93b1b046c 100644 --- a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs +++ b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs @@ -15,6 +15,7 @@ public class ClientCharacterVisualization : NetworkBehaviour { private NetworkCharacterState m_NetState; + // caching a reference to our parent's NetworkObjectID for cleanup purposes ulong m_ParentNetworkObjectID; [SerializeField] @@ -126,6 +127,8 @@ public override void NetworkStart() m_PartyHUD.SetAllyData(m_NetState); m_ParentNetworkObjectID = m_NetState.NetworkObjectId; + + // once this object is destroyed, remove this ally from the PartyHUD UI Destroyed += () => { if (m_PartyHUD != null) diff --git a/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs b/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs index 19f78bba0..2d1e9a91e 100644 --- a/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs +++ b/Assets/BossRoom/Scripts/Client/UI/PartyHUD.cs @@ -197,6 +197,10 @@ private int FindOrAddAlly(ulong id, bool dontAdd = false) return -1; } + /// + /// Remove an ally from the PartyHUD UI. + /// + /// NetworkObjectID of the ally. public void RemoveAlly(ulong id) { for (int i = 0; i < m_PartyIds.Length; i++) From a6600f5dcc8662e266d614183bce24993a34691c Mon Sep 17 00:00:00 2001 From: Fernando Cortez Date: Fri, 19 Mar 2021 15:51:47 -0400 Subject: [PATCH 3/4] added refactoring comments --- .../Client/Game/Character/ClientCharacterVisualization.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs index 93b1b046c..51cf47bb8 100644 --- a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs +++ b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs @@ -51,7 +51,7 @@ public class ClientCharacterVisualization : NetworkBehaviour int m_DeadStateTriggerID; int m_HitStateTriggerID; - public event Action Destroyed; + event Action Destroyed; /// public override void NetworkStart() @@ -129,6 +129,7 @@ public override void NetworkStart() m_ParentNetworkObjectID = m_NetState.NetworkObjectId; // once this object is destroyed, remove this ally from the PartyHUD UI + // NOTE: architecturally this will be refactored Destroyed += () => { if (m_PartyHUD != null) From 0816505cf46e1db09fe78c9a7e1d35cc43c64c0e Mon Sep 17 00:00:00 2001 From: Fernando Cortez Date: Sun, 21 Mar 2021 14:56:11 -0400 Subject: [PATCH 4/4] passing in local ulong networkID for ally to be removed & removed class variable --- .../Client/Game/Character/ClientCharacterVisualization.cs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs index 51cf47bb8..68fde6128 100644 --- a/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs +++ b/Assets/BossRoom/Scripts/Client/Game/Character/ClientCharacterVisualization.cs @@ -15,9 +15,6 @@ public class ClientCharacterVisualization : NetworkBehaviour { private NetworkCharacterState m_NetState; - // caching a reference to our parent's NetworkObjectID for cleanup purposes - ulong m_ParentNetworkObjectID; - [SerializeField] private Animator m_ClientVisualsAnimator; @@ -126,7 +123,8 @@ public override void NetworkStart() { m_PartyHUD.SetAllyData(m_NetState); - m_ParentNetworkObjectID = m_NetState.NetworkObjectId; + // getting our parent's NetworkObjectID for PartyHUD removal on Destroy + var parentNetworkObjectID = m_NetState.NetworkObjectId; // once this object is destroyed, remove this ally from the PartyHUD UI // NOTE: architecturally this will be refactored @@ -134,7 +132,7 @@ public override void NetworkStart() { if (m_PartyHUD != null) { - m_PartyHUD.RemoveAlly(m_ParentNetworkObjectID); + m_PartyHUD.RemoveAlly(parentNetworkObjectID); } }; }