Use objects id mapping for networking to have proper replication of networked object references
This commit is contained in:
@@ -18,6 +18,7 @@ class NetworkInternal
|
||||
{
|
||||
public:
|
||||
static void NetworkReplicatorClear();
|
||||
static void NetworkReplicatorPreUpdate();
|
||||
static void NetworkReplicatorUpdate();
|
||||
static void OnNetworkMessageReplicatedObject(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer);
|
||||
};
|
||||
|
||||
@@ -320,6 +320,7 @@ void NetworkManagerService::Update()
|
||||
LastUpdateTime = currentTime;
|
||||
NetworkManager::Frame++;
|
||||
auto peer = NetworkManager::Peer;
|
||||
NetworkInternal::NetworkReplicatorPreUpdate();
|
||||
// TODO: convert into TaskGraphSystems and use async jobs
|
||||
|
||||
// Process network messages
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "Engine/Scripting/Scripting.h"
|
||||
#include "Engine/Scripting/ScriptingObjectReference.h"
|
||||
#include "Engine/Threading/Threading.h"
|
||||
#include "Engine/Threading/ThreadLocal.h"
|
||||
|
||||
// Enables verbose logging for Network Replicator actions (dev-only)
|
||||
#define NETWORK_REPLICATOR_DEBUG_LOG 1
|
||||
@@ -241,6 +242,12 @@ void NetworkInternal::NetworkReplicatorClear()
|
||||
CachedTargets.Resize(0);
|
||||
}
|
||||
|
||||
void NetworkInternal::NetworkReplicatorPreUpdate()
|
||||
{
|
||||
// Inject ObjectsLookupIdMapping to properly map networked object ids into local object ids (deserialization with Scripting::TryFindObject will remap objects)
|
||||
Scripting::ObjectsLookupIdMapping.Set(&IdsRemappingTable);
|
||||
}
|
||||
|
||||
void NetworkInternal::NetworkReplicatorUpdate()
|
||||
{
|
||||
PROFILE_CPU();
|
||||
@@ -325,6 +332,9 @@ void NetworkInternal::NetworkReplicatorUpdate()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Clear networked objects mapping table
|
||||
Scripting::ObjectsLookupIdMapping.Set(nullptr);
|
||||
}
|
||||
|
||||
void NetworkInternal::OnNetworkMessageReplicatedObject(NetworkEvent& event, NetworkClient* client, NetworkPeer* peer)
|
||||
|
||||
Reference in New Issue
Block a user