internal static void HandleNetworkVariableDelta(ulong clientId, Stream stream, Action <ulong, PreBufferPreset> bufferCallback, PreBufferPreset bufferPreset) { #if DEVELOPMENT_BUILD || UNITY_EDITOR s_HandleNetworkVariableDelta.Begin(); #endif if (!NetworkManager.Singleton.NetworkConfig.EnableNetworkVariable) { if (NetworkLog.CurrentLogLevel <= LogLevel.Normal) { NetworkLog.LogWarning($"{nameof(NetworkConstants.NETWORK_VARIABLE_DELTA)} received but {nameof(NetworkConfig.EnableNetworkVariable)} is false"); } return; } using (var reader = PooledNetworkReader.Get(stream)) { ulong networkObjectId = reader.ReadUInt64Packed(); ushort networkBehaviourIndex = reader.ReadUInt16Packed(); if (NetworkSpawnManager.SpawnedObjects.ContainsKey(networkObjectId)) { NetworkBehaviour instance = NetworkSpawnManager.SpawnedObjects[networkObjectId].GetNetworkBehaviourAtOrderIndex(networkBehaviourIndex); if (instance == null) { if (NetworkLog.CurrentLogLevel <= LogLevel.Normal) { NetworkLog.LogWarning($"{nameof(NetworkConstants.NETWORK_VARIABLE_DELTA)} message received for a non-existent behaviour. {nameof(networkObjectId)}: {networkObjectId}, {nameof(networkBehaviourIndex)}: {networkBehaviourIndex}"); } } else { NetworkBehaviour.HandleNetworkVariableDeltas(instance.NetworkVariableFields, stream, clientId, instance); } } else if (NetworkManager.Singleton.IsServer || !NetworkManager.Singleton.NetworkConfig.EnableMessageBuffering) { if (NetworkLog.CurrentLogLevel <= LogLevel.Normal) { NetworkLog.LogWarning($"{nameof(NetworkConstants.NETWORK_VARIABLE_DELTA)} message received for a non-existent object with {nameof(networkObjectId)}: {networkObjectId}. This delta was lost."); } } else { if (NetworkLog.CurrentLogLevel <= LogLevel.Normal) { NetworkLog.LogWarning($"{nameof(NetworkConstants.NETWORK_VARIABLE_DELTA)} message received for a non-existent object with {nameof(networkObjectId)}: {networkObjectId}. This delta will be buffered and might be recovered."); } bufferCallback(networkObjectId, bufferPreset); } } #if DEVELOPMENT_BUILD || UNITY_EDITOR s_HandleNetworkVariableDelta.End(); #endif }