From a90de82e4502209babb31f235596a68fff672c6a Mon Sep 17 00:00:00 2001 From: Wojciech Figat Date: Mon, 31 Oct 2022 12:20:54 +0100 Subject: [PATCH] Add network objects dirtying api --- Source/Engine/Networking/NetworkReplicator.cpp | 12 ++++++++++++ Source/Engine/Networking/NetworkReplicator.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp index f521346e2..809a508c7 100644 --- a/Source/Engine/Networking/NetworkReplicator.cpp +++ b/Source/Engine/Networking/NetworkReplicator.cpp @@ -466,6 +466,18 @@ void NetworkReplicator::SetObjectOwnership(ScriptingObject* obj, uint32 ownerCli } } +void NetworkReplicator::DirtyObject(ScriptingObject* obj) +{ + ScopeLock lock(ObjectsLock); + const auto it = Objects.Find(obj->GetID()); + if (it == Objects.End()) + return; + auto& item = it->Item; + if (item.Object != obj || item.Role != NetworkObjectRole::OwnedAuthoritative) + return; + // TODO: implement objects state replication frequency and dirtying +} + void NetworkInternal::NetworkReplicatorClientConnected(NetworkClient* client) { ScopeLock lock(ObjectsLock); diff --git a/Source/Engine/Networking/NetworkReplicator.h b/Source/Engine/Networking/NetworkReplicator.h index ad73e5640..4ec23805e 100644 --- a/Source/Engine/Networking/NetworkReplicator.h +++ b/Source/Engine/Networking/NetworkReplicator.h @@ -95,6 +95,12 @@ public: /// The local role to assign for the object. API_FUNCTION() static void SetObjectOwnership(ScriptingObject* obj, uint32 ownerClientId, NetworkObjectRole localRole = NetworkObjectRole::Replicated); + /// + /// Marks the object dirty to perform immediate replication to the other clients. + /// + /// The network object. + API_FUNCTION() static void DirtyObject(ScriptingObject* obj); + private: #if !COMPILE_WITHOUT_CSHARP API_FUNCTION(NoProxy) static void AddSerializer(const ScriptingTypeHandle& type, const Function& serialize, const Function& deserialize);