Implement INetworkObject::OnNetworkSync and make INetworkObject just virtual
This commit is contained in:
@@ -13,22 +13,27 @@ API_INTERFACE(Namespace = "FlaxEngine.Networking") class FLAXENGINE_API INetwork
|
|||||||
DECLARE_SCRIPTING_TYPE_MINIMAL(INetworkObject);
|
DECLARE_SCRIPTING_TYPE_MINIMAL(INetworkObject);
|
||||||
public:
|
public:
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event called when network objects gets spawned.
|
/// Event called when network object gets spawned.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
API_FUNCTION() virtual void OnNetworkSpawn() = 0;
|
API_FUNCTION() virtual void OnNetworkSpawn() {};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event called when network objects gets despawned.
|
/// Event called when network object gets despawned.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
API_FUNCTION() virtual void OnNetworkDespawn() = 0;
|
API_FUNCTION() virtual void OnNetworkDespawn() {};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event called before network object gets replicated (before reading data).
|
/// Event called before network object gets replicated (before reading data).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
API_FUNCTION() virtual void OnNetworkSerialize() = 0;
|
API_FUNCTION() virtual void OnNetworkSerialize() {};
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event called when network objects gets replicated (after reading data).
|
/// Event called when network object gets replicated (after reading data).
|
||||||
/// </summary>
|
/// </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() {};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ struct NetworkReplicatedObject
|
|||||||
uint8 Spawned : 1;
|
uint8 Spawned : 1;
|
||||||
DataContainer<uint32> TargetClientIds;
|
DataContainer<uint32> TargetClientIds;
|
||||||
INetworkObject* AsNetworkObject;
|
INetworkObject* AsNetworkObject;
|
||||||
|
bool NetworkObjectSync = false;
|
||||||
|
|
||||||
NetworkReplicatedObject()
|
NetworkReplicatedObject()
|
||||||
{
|
{
|
||||||
@@ -637,7 +638,14 @@ void InvokeObjectReplication(NetworkReplicatedObject& item, uint32 ownerFrame, b
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (item.AsNetworkObject)
|
if (item.AsNetworkObject)
|
||||||
|
{
|
||||||
item.AsNetworkObject->OnNetworkDeserialize();
|
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)
|
// 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())
|
if (NetworkManager::IsServer())
|
||||||
|
|||||||
Reference in New Issue
Block a user