Implement INetworkObject::OnNetworkSync and make INetworkObject just virtual

This commit is contained in:
Wiktor Kocielski
2023-05-26 08:19:32 +03:00
parent 90d633fb2d
commit a21abaac84
2 changed files with 20 additions and 7 deletions

View File

@@ -13,22 +13,27 @@ API_INTERFACE(Namespace = "FlaxEngine.Networking") class FLAXENGINE_API INetwork
DECLARE_SCRIPTING_TYPE_MINIMAL(INetworkObject);
public:
/// <summary>
/// Event called when network objects gets spawned.
/// Event called when network object gets spawned.
/// </summary>
API_FUNCTION() virtual void OnNetworkSpawn() = 0;
API_FUNCTION() virtual void OnNetworkSpawn() {};
/// <summary>
/// Event called when network objects gets despawned.
/// Event called when network object gets despawned.
/// </summary>
API_FUNCTION() virtual void OnNetworkDespawn() = 0;
API_FUNCTION() virtual void OnNetworkDespawn() {};
/// <summary>
/// Event called before network object gets replicated (before reading data).
/// </summary>
API_FUNCTION() virtual void OnNetworkSerialize() = 0;
API_FUNCTION() virtual void OnNetworkSerialize() {};
/// <summary>
/// Event called when network objects gets replicated (after reading data).
/// Event called when network object gets replicated (after reading data).
/// </summary>
API_FUNCTION() virtual void OnNetworkDeserialize() = 0;
API_FUNCTION() virtual void OnNetworkDeserialize() {};
/// <summary>
/// Event called when network object gets synced (called only once upon initial sync).
/// </summary>
API_FUNCTION() virtual void OnNetworkSync() {};
};

View File

@@ -111,6 +111,7 @@ struct NetworkReplicatedObject
uint8 Spawned : 1;
DataContainer<uint32> 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())