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);