private void OnLogicUpdate() { _serverTick = (ushort)((_serverTick + 1) % NetworkGeneral.MaxGameSequence); _playerManager.LogicUpdate(); //if (_serverTick % 2 == 0) { _serverState.Tick = _serverTick; _serverState.PlayerStates = _playerManager.PlayerStates; int pCount = _playerManager.Count; foreach (ServerPlayer p in _playerManager) { int statesMax = p.AssociatedPeer.GetMaxSinglePacketSize(DeliveryMethod.Unreliable) - ServerState.HeaderSize; statesMax /= PlayerState.Size; for (int s = 0; s < (pCount - 1) / statesMax + 1; s++) { //TODO: divide _serverState.LastProcessedCommand = p.LastProcessedCommandId; _serverState.PlayerStatesCount = pCount; _serverState.StartState = s * statesMax; p.AssociatedPeer.Send(WriteSerializable(PacketType.ServerState, _serverState), DeliveryMethod.Unreliable); } } } }