diff --git a/Source/Engine/Networking/INetworkObject.h b/Source/Engine/Networking/INetworkObject.h index 457811557..932c3aa0d 100644 --- a/Source/Engine/Networking/INetworkObject.h +++ b/Source/Engine/Networking/INetworkObject.h @@ -13,22 +13,27 @@ API_INTERFACE(Namespace = "FlaxEngine.Networking") class FLAXENGINE_API INetwork DECLARE_SCRIPTING_TYPE_MINIMAL(INetworkObject); public: /// - /// Event called when network objects gets spawned. + /// Event called when network object gets spawned. /// - API_FUNCTION() virtual void OnNetworkSpawn() = 0; + API_FUNCTION() virtual void OnNetworkSpawn() {}; /// - /// Event called when network objects gets despawned. + /// Event called when network object gets despawned. /// - API_FUNCTION() virtual void OnNetworkDespawn() = 0; + API_FUNCTION() virtual void OnNetworkDespawn() {}; /// /// Event called before network object gets replicated (before reading data). /// - API_FUNCTION() virtual void OnNetworkSerialize() = 0; + API_FUNCTION() virtual void OnNetworkSerialize() {}; /// - /// Event called when network objects gets replicated (after reading data). + /// Event called when network object gets replicated (after reading data). /// - API_FUNCTION() virtual void OnNetworkDeserialize() = 0; + API_FUNCTION() virtual void OnNetworkDeserialize() {}; + + /// + /// Event called when network object gets synced (called only once upon initial sync). + /// + API_FUNCTION() virtual void OnNetworkSync() {}; }; diff --git a/Source/Engine/Networking/NetworkReplicator.cpp b/Source/Engine/Networking/NetworkReplicator.cpp index 8d0ba3c0e..0a0319196 100644 --- a/Source/Engine/Networking/NetworkReplicator.cpp +++ b/Source/Engine/Networking/NetworkReplicator.cpp @@ -111,6 +111,7 @@ struct NetworkReplicatedObject uint8 Spawned : 1; DataContainer TargetClientIds; INetworkObject* AsNetworkObject; + bool NetworkObjectSync = false; NetworkReplicatedObject() { @@ -637,7 +638,14 @@ void InvokeObjectReplication(NetworkReplicatedObject& item, uint32 ownerFrame, b } if (item.AsNetworkObject) + { item.AsNetworkObject->OnNetworkDeserialize(); + if (!item.NetworkObjectSync) + { + item.AsNetworkObject->OnNetworkSync(); + item.NetworkObjectSync = true; + } + } // Speed up replication of client-owned objects to other clients from server to reduce lag (data has to go from client to server and then to other clients) if (NetworkManager::IsServer())