diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyChildComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyChildComponent.cpp index 37125a88b9..59782b1f4d 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyChildComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyChildComponent.cpp @@ -148,25 +148,21 @@ namespace Multiplayer m_networkHierarchyChangedEvent.Signal(m_rootEntity->GetId()); } } - else + else if ((previousHierarchyRoot && m_rootEntity == previousHierarchyRoot) || !previousHierarchyRoot) { - if (m_rootEntity == previousHierarchyRoot || !previousHierarchyRoot) - { - m_rootEntity = nullptr; + m_rootEntity = nullptr; - if (HasController() && GetNetBindComponent()->GetNetEntityRole() == NetEntityRole::Authority) - { - NetworkHierarchyChildComponentController* controller = static_cast(GetController()); - controller->SetHierarchyRoot(InvalidNetEntityId); - } + if (HasController() && GetNetBindComponent()->GetNetEntityRole() == NetEntityRole::Authority) + { + NetworkHierarchyChildComponentController* controller = static_cast(GetController()); + controller->SetHierarchyRoot(InvalidNetEntityId); + } - GetNetBindComponent()->SetOwningConnectionId(m_previousOwningConnectionId); - m_networkHierarchyLeaveEvent.Signal(); + GetNetBindComponent()->SetOwningConnectionId(m_previousOwningConnectionId); + m_networkHierarchyLeaveEvent.Signal(); - NotifyChildrenHierarchyDisbanded(); - } + NotifyChildrenHierarchyDisbanded(); } - } void NetworkHierarchyChildComponent::SetOwningConnectionId(AzNetworking::ConnectionId connectionId) diff --git a/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyRootComponent.cpp b/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyRootComponent.cpp index 6858242cd4..76f4bddb1a 100644 --- a/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyRootComponent.cpp +++ b/Gems/Multiplayer/Code/Source/Components/NetworkHierarchyRootComponent.cpp @@ -325,36 +325,36 @@ namespace Multiplayer { if (newHierarchyRoot) { - m_rootEntity = newHierarchyRoot; - - if (HasController() && GetNetBindComponent()->GetNetEntityRole() == NetEntityRole::Authority) - { - NetworkHierarchyChildComponentController* controller = static_cast(GetController()); - - const NetEntityId netRootId = GetNetworkEntityManager()->GetNetEntityIdById(m_rootEntity->GetId()); - controller->SetHierarchyRoot(netRootId); - } - - GetNetBindComponent()->SetOwningConnectionId(m_rootEntity->FindComponent()->GetOwningConnectionId()); - } - else - { - if (previousHierarchyRoot && m_rootEntity == previousHierarchyRoot || !previousHierarchyRoot) + if (m_rootEntity != newHierarchyRoot) { - m_rootEntity = nullptr; + m_rootEntity = newHierarchyRoot; if (HasController() && GetNetBindComponent()->GetNetEntityRole() == NetEntityRole::Authority) { - NetworkHierarchyChildComponentController* controller = static_cast(GetController()); - - controller->SetHierarchyRoot(InvalidNetEntityId); + NetworkHierarchyRootComponentController* controller = static_cast(GetController()); + const NetEntityId netRootId = GetNetworkEntityManager()->GetNetEntityIdById(m_rootEntity->GetId()); + controller->SetHierarchyRoot(netRootId); } - GetNetBindComponent()->SetOwningConnectionId(m_previousOwningConnectionId); + GetNetBindComponent()->SetOwningConnectionId(m_rootEntity->FindComponent()->GetOwningConnectionId()); + m_networkHierarchyChangedEvent.Signal(m_rootEntity->GetId()); + } + } + else if ((previousHierarchyRoot && m_rootEntity == previousHierarchyRoot) || !previousHierarchyRoot) + { + m_rootEntity = nullptr; - // We lost the parent hierarchical entity, so as a root we need to re-build our own hierarchy. - RebuildHierarchy(); + if (HasController() && GetNetBindComponent()->GetNetEntityRole() == NetEntityRole::Authority) + { + NetworkHierarchyRootComponentController* controller = static_cast(GetController()); + controller->SetHierarchyRoot(InvalidNetEntityId); } + + GetNetBindComponent()->SetOwningConnectionId(m_previousOwningConnectionId); + m_networkHierarchyLeaveEvent.Signal(); + + // We lost the parent hierarchical entity, so as a root we need to re-build our own hierarchy. + RebuildHierarchy(); } }