Minor improvements to new replication hierarchy

This commit is contained in:
Wojtek Figat
2023-05-24 22:59:22 +02:00
parent e10aa1ff58
commit 90d633fb2d
3 changed files with 18 additions and 9 deletions

View File

@@ -49,10 +49,11 @@ bool NetworkReplicationHierarchyUpdateResult::GetClientLocation(int32 clientInde
void NetworkReplicationNode::AddObject(NetworkReplicationHierarchyObject obj)
{
ASSERT(obj.Object && obj.ReplicationFPS > 0.0f);
// Randomize initial replication update to spread rep rates more evenly for large scenes that register all objects within the same frame
obj.ReplicationUpdatesLeft = NetworkReplicationNodeObjectCounter++ % Math::Clamp(Math::RoundToInt(NetworkManager::NetworkFPS / obj.ReplicationFPS), 1, 60);
if (obj.ReplicationFPS > 0.0f)
{
// Randomize initial replication update to spread rep rates more evenly for large scenes that register all objects within the same frame
obj.ReplicationUpdatesLeft = NetworkReplicationNodeObjectCounter++ % Math::Clamp(Math::RoundToInt(NetworkManager::NetworkFPS / obj.ReplicationFPS), 1, 60);
}
Objects.Add(obj);
}
@@ -79,7 +80,12 @@ void NetworkReplicationNode::Update(NetworkReplicationHierarchyUpdateResult* res
const float networkFPS = NetworkManager::NetworkFPS / result->ReplicationScale;
for (NetworkReplicationHierarchyObject& obj : Objects)
{
if (obj.ReplicationUpdatesLeft > 0)
if (obj.ReplicationFPS <= 0.0f)
{
// Always relevant
result->AddObject(obj.Object);
}
else if (obj.ReplicationUpdatesLeft > 0)
{
// Move to the next frame
obj.ReplicationUpdatesLeft--;
@@ -87,7 +93,7 @@ void NetworkReplicationNode::Update(NetworkReplicationHierarchyUpdateResult* res
else
{
NetworkClientsMask targetClients = result->GetClientsMask();
if (result->_clientsHaveLocation)
if (result->_clientsHaveLocation && obj.CullDistance > 0.0f)
{
// Cull object against viewers locations
if (const Actor* actor = obj.GetActor())