protected override void OnStart() { base.OnStart(); Application.SetWindowTitle("Server"); game = new Game(MultiplayerMode.Server); networkPlayersLookup = new Dictionary<NetConnection, Player>(); networkPlayers = new List<Player>(); // local players are ready int playerIndex = 0; GameSettings.InputEntry[] entries = settings.inputEntries; for (; playerIndex < entries.Length; ++playerIndex) { Player player = new Player(entries[playerIndex].playerIndex); player.SetPlayerInput(entries[playerIndex].input); player.IsReady = true; game.AddPlayer(player); } // network players are not ready List<NetConnection> connections = GetServer().GetConnections(); for (int i = 0; i < connections.Count; ++i) { Player player = new Player(playerIndex + i); player.SetPlayerInput(new PlayerNetworkInput()); player.ResetNetworkState(); game.AddPlayer(player); AddPlayerConnection(connections[i], player); } LoadField(settings.scheme); GetConsole().TryExecuteCommand("exec game.cfg"); SetPacketRate(CVars.sv_packetRate.intValue); RegisterNotification(Notifications.ConsoleVariableChanged, ServerRateVarChangedCallback); RegisterNotification(NetworkNotifications.ClientConnected, ClientConnectedNotification); RegisterNotification(NetworkNotifications.ClientDisconnected, ClientDisconnectedNotification); }
private void ReadFieldState(Peer peer, NetIncomingMessage message) { game = new Game(MultiplayerMode.Client); SetupField(settings.scheme); ReadFieldState(message); m_localPlayer = null; List<Player> players = game.GetPlayers().list; for (int i = 0; i < players.Count; ++i) { if (players[i].input == null) { m_localPlayer = players[i]; m_localPlayer.SetPlayerInput(InputMapping.CreatePlayerInput(InputType.Keyboard1)); m_localPlayer.input.IsActive = true; // TODO: handle console break; } } Debug.Assert(m_localPlayer != null); m_localPlayer.connection = peer.RemoteConnection; m_localPlayer.IsReady = true; m_localPlayer.needsFieldState = false; }
protected void ReadFieldState(NetBuffer buffer) { // bricks & powerups FieldCellSlot[] slots = game.Field.GetCells().slots; for (int i = 0; i < slots.Length; ++i) { BrickCell brick = slots[i].GetBrick(); if (brick != null) { bool hasPowerup = buffer.ReadBoolean(); if (hasPowerup) { brick.powerup = buffer.ReadByte(); } } } // players int senderIndex = buffer.ReadByte(); int playersCount = buffer.ReadByte(); for (int i = 0; i < playersCount; ++i) { Player player = new Player(i); int cx = buffer.ReadByte(); int cy = buffer.ReadByte(); player.SetCell(cx, cy); if (i != senderIndex) { player.SetPlayerInput(new PlayerNetworkInput()); } game.AddPlayer(player); } }
protected override void OnStart() { base.OnStart(); game = new Game(MultiplayerMode.None); GameSettings.InputEntry[] entries = settings.inputEntries; for (int i = 0; i < entries.Length; ++i) { Player player = new Player(entries[i].playerIndex); player.SetPlayerInput(entries[i].input); game.AddPlayer(player); } LoadField(settings.scheme); gameScreen = new GameScreen(); StartScreen(gameScreen); GetConsole().TryExecuteCommand("exec game.cfg"); }