IFilterEntityManager work

Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com>
This commit is contained in:
AMZN-Olex
2021-06-30 17:28:55 -04:00
parent bafcdfe037
commit d7bfd34a67
7 changed files with 91 additions and 26 deletions
@@ -812,6 +812,16 @@ namespace Multiplayer
return &m_networkEntityManager;
}
void MultiplayerSystemComponent::SetFilterEntityManager(IFilterEntityManager* entityFilter)
{
m_filterEntityManager = entityFilter;
}
IFilterEntityManager* MultiplayerSystemComponent::GetFilterEntityManager()
{
return m_filterEntityManager;
}
void MultiplayerSystemComponent::DumpStats([[maybe_unused]] const AZ::ConsoleCommandContainer& arguments)
{
const MultiplayerStats& stats = GetStats();
@@ -114,6 +114,8 @@ namespace Multiplayer
AZ::TimeMs GetCurrentHostTimeMs() const override;
INetworkTime* GetNetworkTime() override;
INetworkEntityManager* GetNetworkEntityManager() override;
void SetFilterEntityManager(IFilterEntityManager* entityFilter) override;
IFilterEntityManager* GetFilterEntityManager() override;
//! @}
//! Console commands.
@@ -138,6 +140,8 @@ namespace Multiplayer
NetworkEntityManager m_networkEntityManager;
NetworkTime m_networkTime;
MultiplayerAgentType m_agentType = MultiplayerAgentType::Uninitialized;
IFilterEntityManager* m_filterEntityManager = nullptr; // non-owning pointer
SessionInitEvent m_initEvent;
SessionShutdownEvent m_shutdownEvent;
@@ -63,13 +63,6 @@ namespace Multiplayer
m_controlledEntityTransform = entity ? entity->GetTransform() : nullptr;
AZ_Assert(m_controlledEntityTransform, "Controlled player entity must have a transform");
//// this one is optional
//mp_ControlledFilteredEntityComponent = m_controlledEntity->FindController<FilteredEntityComponent::Authority>();
//if (mp_ControlledFilteredEntityComponent)
//{
// mp_ControlledFilteredEntityComponent->AddFilteredEntityEventHandle(m_FilteredEntityAddedEventHandle);
//}
m_updateWindowEvent.Enqueue(sv_ClientReplicationWindowUpdateMs, true);
AZ::Interface<AZ::ComponentApplicationRequests>::Get()->RegisterEntityActivatedEventHandler(m_entityActivatedEventHandler);
@@ -145,21 +138,23 @@ namespace Multiplayer
}
);
NetworkEntityTracker* networkEntityTracker = GetNetworkEntityTracker();
NetworkEntityTracker* networkEntityTracker = GetNetworkEntityTracker();
IFilterEntityManager* filterEntityManager = GetMultiplayer()->GetFilterEntityManager();
// Add all the neighbors
for (AzFramework::VisibilityEntry* visEntry : gatheredEntries)
{
//if (mp_ControlledFilteredEntityComponent && mp_ControlledFilteredEntityComponent->IsEntityFiltered(iterator.Get()))
//{
// continue;
//}
// We want to find the closest extent to the player and prioritize using that distance
AZ::Entity* entity = static_cast<AZ::Entity*>(visEntry->m_userData);
if (filterEntityManager && filterEntityManager->IsEntityFiltered(entity, m_controlledEntity, m_connection->GetConnectionId()))
{
continue;
}
NetBindComponent* entryNetBindComponent = entity->template FindComponent<NetBindComponent>();
if (entryNetBindComponent != nullptr)
{
// We want to find the closest extent to the player and prioritize using that distance
const AZ::Vector3 supportNormal = controlledEntityPosition - visEntry->m_boundingVolume.GetCenter();
const AZ::Vector3 closestPosition = visEntry->m_boundingVolume.GetSupport(supportNormal);
const float gatherDistanceSquared = controlledEntityPosition.GetDistanceSq(closestPosition);
@@ -212,10 +207,13 @@ namespace Multiplayer
{
if (netBindComponent->HasController())
{
//if (mp_ControlledFilteredEntityComponent && mp_ControlledFilteredEntityComponent->IsEntityFiltered(newEntity))
//{
// return;
//}
if (IFilterEntityManager* filter = GetMultiplayer()->GetFilterEntityManager())
{
if (filter->IsEntityFiltered(entity, m_controlledEntity, m_connection->GetConnectionId()))
{
return;
}
}
AZ::TransformInterface* transformInterface = entity->GetTransform();
if (transformInterface != nullptr)
@@ -274,6 +272,8 @@ namespace Multiplayer
void ServerToClientReplicationWindow::AddEntityToReplicationSet(ConstNetworkEntityHandle& entityHandle, float priority, [[maybe_unused]] float distanceSquared)
{
// Assumption: the entity has been checked for filtering prior to this call.
if (!sv_ReplicateServerProxies)
{
NetBindComponent* netBindComponent = entityHandle.GetNetBindComponent();
@@ -314,10 +314,4 @@ namespace Multiplayer
// }
// }
//}
//void ServerToClientReplicationWindow::OnAddFilteredEntity(NetEntityId filteredEntityId)
//{
// ConstEntityPtr filteredEntity = gNovaGame->GetEntityManager().GetEntity(filteredEntityId);
// m_replicationSet.erase(filteredEntityId);
//}
}
@@ -54,7 +54,6 @@ namespace Multiplayer
void OnEntityDeactivated(AZ::Entity* entity);
//void CollectControlledEntitiesRecursive(ReplicationSet& replicationSet, EntityHierarchyComponent::Authority& hierarchyController);
//void OnAddFilteredEntity(NetEntityId filteredEntityId);
void EvaluateConnection();
void AddEntityToReplicationSet(ConstNetworkEntityHandle& entityHandle, float priority, float distanceSquared);
@@ -73,7 +72,6 @@ namespace Multiplayer
AZ::EntityActivatedEvent::Handler m_entityActivatedEventHandler;
AZ::EntityDeactivatedEvent::Handler m_entityDeactivatedEventHandler;
//FilteredEntityComponent::Authority* m_controlledFilteredEntityComponent = nullptr;
//NetBindComponent* m_controlledNetBindComponent = nullptr;
const AzNetworking::IConnection* m_connection = nullptr;