Ejemplo n.º 1
0
        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);
                    }
                }
            }
        }