protected override JobHandle OnUpdate(JobHandle inputDeps) { #if UNITY_EDITOR || DEVELOPMENT_BUILD if (m_NetStats[0] != 0) { m_GhostStatsCollectionSystem.AddCommandStats(m_NetStats); m_NetStats[0] = 0; m_NetStats[1] = 0; } #endif var targetTick = m_ClientSimulationSystemGroup.ServerTick; if (m_ClientSimulationSystemGroup.ServerTickFraction < 1) { --targetTick; } // Make sure we only send a single ack per tick - only triggers when using dynamic timestep if (targetTick == m_LastServerTick) { return(inputDeps); } m_LastServerTick = targetTick; var sendJob = new CommandSendJob { driver = m_ReceiveSystem.ConcurrentDriver, unreliablePipeline = m_ReceiveSystem.UnreliablePipeline, inputFromEntity = GetBufferFromEntity <TCommandData>(true), compressionModel = m_CompressionModel, localTime = NetworkTimeSystem.TimestampMS, inputTargetTick = targetTick, interpolationDelay = m_ClientSimulationSystemGroup.ServerTick - m_ClientSimulationSystemGroup.InterpolationTick, isNullCommandData = typeof(TCommandData) == typeof(NullCommandData), #if UNITY_EDITOR || DEVELOPMENT_BUILD netStats = m_NetStats #endif }; var handle = sendJob.ScheduleSingle(this, JobHandle.CombineDependencies(inputDeps, m_ReceiveSystem.LastDriverWriter)); handle = m_ReceiveSystem.Driver.ScheduleFlushSend(handle); m_ReceiveSystem.LastDriverWriter = handle; return(handle); }
protected override JobHandle OnUpdate(JobHandle inputDeps) { #if UNITY_EDITOR || DEVELOPMENT_BUILD if (m_NetStats[0] != 0) { m_GhostStatsCollectionSystem.AddCommandStats(m_NetStats); m_NetStats[0] = 0; m_NetStats[1] = 0; } #endif var recvJob = new ReceiveJob(); recvJob.commandData = GetBufferFromEntity <TCommandData>(); recvJob.cmdBuffer = GetBufferFromEntity <IncomingCommandDataStreamBufferComponent>(); recvJob.compressionModel = m_CompressionModel; recvJob.serverTick = serverSimulationSystemGroup.ServerTick; #if UNITY_EDITOR || DEVELOPMENT_BUILD recvJob.netStats = m_NetStats; #endif return(recvJob.ScheduleSingle(this, inputDeps)); }