diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp
index f87b53bcf..b5d277f67 100644
--- a/Source/Engine/Networking/NetworkReplicator.cpp
+++ b/Source/Engine/Networking/NetworkReplicator.cpp
@@ -269,7 +269,6 @@ void NetworkReplicator::AddObject(ScriptingObject* obj, ScriptingObject* parent)
{
if (!obj || NetworkManager::State == NetworkConnectionState::Offline)
return;
- CHECK(parent && parent != obj);
ScopeLock lock(ObjectsLock);
if (Objects.Contains(obj))
return;
@@ -278,11 +277,11 @@ void NetworkReplicator::AddObject(ScriptingObject* obj, ScriptingObject* parent)
NetworkReplicatedObject item;
item.Object = obj;
item.ObjectId = obj->GetID();
- item.ParentId = parent->GetID();
+ item.ParentId = parent ? parent->GetID() : Guid::Empty;
item.OwnerClientId = NetworkManager::ServerClientId; // Server owns objects by default
item.Role = NetworkManager::IsClient() ? NetworkObjectRole::Replicated : NetworkObjectRole::OwnedAuthoritative;
#if NETWORK_REPLICATOR_DEBUG_LOG
- LOG(Info, "[NetworkReplicator] Add new object {}:{}, parent {}:{}", item.ToString(), obj->GetType().ToString(), item.ParentId.ToString(), parent->GetType().ToString());
+ LOG(Info, "[NetworkReplicator] Add new object {}:{}, parent {}:{}", item.ToString(), obj->GetType().ToString(), item.ParentId.ToString(), parent ? parent->GetType().ToString() : String::Empty);
#endif
Objects.Add(MoveTemp(item));
}
@@ -296,7 +295,7 @@ void NetworkReplicator::SpawnObject(ScriptingObject* obj)
if (it == Objects.End())
{
// Ensure that object is added to the replication locally
- AddObject(obj, nullptr);
+ AddObject(obj);
it = Objects.Find(obj->GetID());
}
@@ -660,6 +659,8 @@ void NetworkInternal::OnNetworkMessageObjectReplicate(NetworkEvent& event, Netwo
}
#endif
}
+
+ // TODO: speed up replication of client-owned object to other clients from server
}
else
{
diff --git a/Source/Engine/Networking/NetworkReplicator.h b/Source/Engine/Networking/NetworkReplicator.h
index db38682a9..64c4a8600 100644
--- a/Source/Engine/Networking/NetworkReplicator.h
+++ b/Source/Engine/Networking/NetworkReplicator.h
@@ -57,7 +57,7 @@ public:
/// Does nothing if network is offline.
/// The object to replicate.
/// The parent of the object (eg. player that spawned it).
- API_FUNCTION() static void AddObject(ScriptingObject* obj, ScriptingObject* parent);
+ API_FUNCTION() static void AddObject(ScriptingObject* obj, ScriptingObject* parent = nullptr);
///
/// Spawns the object to the other clients. Can be spawned by the owner who locally created it (eg. from prefab).