From 6929a91312e9cb281ca1a42c097b20a64dd31d32 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Fri, 29 Mar 2024 13:03:38 +0100 Subject: [PATCH] Add support for manually dirtying objects that use `ReplicationFPS < 0` for manual-only replication --- .../Networking/NetworkReplicationHierarchy.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Source/Engine/Networking/NetworkReplicationHierarchy.cpp b/Source/Engine/Networking/NetworkReplicationHierarchy.cpp index e3ee09829..224ee9f31 100644 --- a/Source/Engine/Networking/NetworkReplicationHierarchy.cpp +++ b/Source/Engine/Networking/NetworkReplicationHierarchy.cpp @@ -80,7 +80,16 @@ bool NetworkReplicationNode::DirtyObject(ScriptingObject* obj) if (index != -1) { NetworkReplicationHierarchyObject& e = Objects[index]; - e.ReplicationUpdatesLeft = 0; + if (e.ReplicationFPS < -ZeroTolerance) // < 0 + { + // Indicate for manual sync (see logic in Update) + e.ReplicationUpdatesLeft = 1; + } + else + { + // Replicate it next frame + e.ReplicationUpdatesLeft = 0; + } } return index != -1; } @@ -93,6 +102,12 @@ void NetworkReplicationNode::Update(NetworkReplicationHierarchyUpdateResult* res { if (obj.ReplicationFPS < -ZeroTolerance) // < 0 { + if (obj.ReplicationUpdatesLeft) + { + // Marked as dirty to sync manually + obj.ReplicationUpdatesLeft = 0; + result->AddObject(obj.Object); + } continue; } else if (obj.ReplicationFPS < ZeroTolerance) // == 0