public static void Update() { float elapsed = TimeManager.Elapsed; _elapsed += TimeManager.ActualElapsed; if (_elapsed >= _sendInterval) { _elapsed = 0f; GetServerPlatforms(); } GetServerPlayers(); // Receive network data. NetIncomingMessage msg; while ((msg = NetClient.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.Data: { var type = new ClientMessageType(msg.ReadInt32()); switch (type.Type) { case Headers.Client.NewPlayerInfo: { int id = msg.ReadInt32(); float x = msg.ReadFloat(); float y = msg.ReadFloat(); int w = msg.ReadInt32(); int h = msg.ReadInt32(); Color drawColor = new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte(), msg.ReadByte()); Id = id; Player = new Player(new Vector2(x, y), new Vector2(w, h), drawColor); break; } case Headers.Client.PlayerInfo: { float x = msg.ReadFloat(); float y = msg.ReadFloat(); float velX = msg.ReadFloat(); float velY = msg.ReadFloat(); Player.Position = new Vector2(x, y); Player.Velocity = new Vector2(velX, velY); break; } case Headers.Client.ServerPlayers: { var plrs = new List<Player>(); while (msg.Position != msg.LengthBits) { float x = msg.ReadFloat(); float y = msg.ReadFloat(); float velX = msg.ReadFloat(); float velY = msg.ReadFloat(); Color drawColor = new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte(), msg.ReadByte()); float moveDirX = msg.ReadFloat(); float moveDirY = msg.ReadFloat(); plrs.Add(new Player(new Vector2(x, y), Player.PlayerSize, drawColor) { MoveDirection = new Vector2(moveDirX, moveDirY), Velocity = new Vector2(velX, velY) }); } _serverPlayers = plrs; break; } case Headers.Client.ServerPlatforms: { var platforms = new List<Platform>(); while (msg.Position != msg.LengthBits) { int x = msg.ReadInt32(); int y = msg.ReadInt32(); int width = msg.ReadInt32(); int height = msg.ReadInt32(); platforms.Add(new Platform(new Rectangle(x, y, width, height))); } PlatformWorld.Platforms = platforms; break; } } break; } case NetIncomingMessageType.StatusChanged: { var status = (NetConnectionStatus) msg.ReadByte(); if (Program.Debugging) Console.WriteLine("Status changed to: " + status); if (status == NetConnectionStatus.Disconnected) { Console.WriteLine("Server shutdown"); Environment.Exit(0); } break; } default: { if (Program.Debugging) Console.WriteLine("Unhandled " + msg.MessageType + ". Contained string: \"" + msg.ReadString() + "\"."); break; } } } // Update player if (Player != null) { // Update input if (InputManager.InputManager.KeyJustPressed(Keys.A)) { Player.SetMoveDirection(-1, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } else if (InputManager.InputManager.KeyJustReleased(Keys.A)) { if (!InputManager.InputManager.GetPressedKeys().Contains(Keys.D)) { Player.SetMoveDirection(0, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } } if (InputManager.InputManager.KeyJustPressed(Keys.D)) { Player.SetMoveDirection(1, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } else if (InputManager.InputManager.KeyJustReleased(Keys.D)) { if (!InputManager.InputManager.GetPressedKeys().Contains(Keys.A)) { Player.SetMoveDirection(0, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } } if (InputManager.InputManager.KeyJustPressed(Keys.W)) { Player.SetMoveDirection(Player.MoveDirection.X, -1); //ServerSetMoveDirection(Player.MoveDirection); } else if (InputManager.InputManager.KeyJustReleased(Keys.W)) { Player.SetMoveDirection(Player.MoveDirection.X, 0); //ServerSetMoveDirection(Player.MoveDirection); } if (InputManager.InputManager.KeyJustPressed(Keys.Space)) { Player.Velocity = new Vector2(Player.Velocity.X, -600); //ServerSetVelocity(Player.Velocity); } Player.UpdatePhysics(PlatformWorld.Platforms.ToArray()); ServerSetVelocity(Player.Velocity); ServerSetPosition(Player.Position); } // Update other "local" players. foreach (Player p in _serverPlayers) { if(p.DrawColor != Player.DrawColor && p.MoveDirection != Player.MoveDirection) p.UpdatePhysics(PlatformWorld.Platforms.ToArray()); } }
public static void Update() { float elapsed = TimeManager.Elapsed; _elapsed += TimeManager.ActualElapsed; if (_elapsed >= _sendInterval) { _elapsed = 0f; GetServerPlatforms(); } GetServerPlayers(); // Receive network data. NetIncomingMessage msg; while ((msg = NetClient.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.Data: { var type = new ClientMessageType(msg.ReadInt32()); switch (type.Type) { case Headers.Client.NewPlayerInfo: { int id = msg.ReadInt32(); float x = msg.ReadFloat(); float y = msg.ReadFloat(); int w = msg.ReadInt32(); int h = msg.ReadInt32(); Color drawColor = new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte(), msg.ReadByte()); Id = id; Player = new Player(new Vector2(x, y), new Vector2(w, h), drawColor); break; } case Headers.Client.PlayerInfo: { float x = msg.ReadFloat(); float y = msg.ReadFloat(); float velX = msg.ReadFloat(); float velY = msg.ReadFloat(); Player.Position = new Vector2(x, y); Player.Velocity = new Vector2(velX, velY); break; } case Headers.Client.ServerPlayers: { var plrs = new List <Player>(); while (msg.Position != msg.LengthBits) { float x = msg.ReadFloat(); float y = msg.ReadFloat(); float velX = msg.ReadFloat(); float velY = msg.ReadFloat(); Color drawColor = new Color(msg.ReadByte(), msg.ReadByte(), msg.ReadByte(), msg.ReadByte()); float moveDirX = msg.ReadFloat(); float moveDirY = msg.ReadFloat(); plrs.Add(new Player(new Vector2(x, y), Player.PlayerSize, drawColor) { MoveDirection = new Vector2(moveDirX, moveDirY), Velocity = new Vector2(velX, velY) }); } _serverPlayers = plrs; break; } case Headers.Client.ServerPlatforms: { var platforms = new List <Platform>(); while (msg.Position != msg.LengthBits) { int x = msg.ReadInt32(); int y = msg.ReadInt32(); int width = msg.ReadInt32(); int height = msg.ReadInt32(); platforms.Add(new Platform(new Rectangle(x, y, width, height))); } PlatformWorld.Platforms = platforms; break; } } break; } case NetIncomingMessageType.StatusChanged: { var status = (NetConnectionStatus)msg.ReadByte(); if (Program.Debugging) { Console.WriteLine("Status changed to: " + status); } if (status == NetConnectionStatus.Disconnected) { Console.WriteLine("Server shutdown"); Environment.Exit(0); } break; } default: { if (Program.Debugging) { Console.WriteLine("Unhandled " + msg.MessageType + ". Contained string: \"" + msg.ReadString() + "\"."); } break; } } } // Update player if (Player != null) { // Update input if (InputManager.InputManager.KeyJustPressed(Keys.A)) { Player.SetMoveDirection(-1, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } else if (InputManager.InputManager.KeyJustReleased(Keys.A)) { if (!InputManager.InputManager.GetPressedKeys().Contains(Keys.D)) { Player.SetMoveDirection(0, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } } if (InputManager.InputManager.KeyJustPressed(Keys.D)) { Player.SetMoveDirection(1, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } else if (InputManager.InputManager.KeyJustReleased(Keys.D)) { if (!InputManager.InputManager.GetPressedKeys().Contains(Keys.A)) { Player.SetMoveDirection(0, Player.MoveDirection.Y); //ServerSetMoveDirection(Player.MoveDirection); } } if (InputManager.InputManager.KeyJustPressed(Keys.W)) { Player.SetMoveDirection(Player.MoveDirection.X, -1); //ServerSetMoveDirection(Player.MoveDirection); } else if (InputManager.InputManager.KeyJustReleased(Keys.W)) { Player.SetMoveDirection(Player.MoveDirection.X, 0); //ServerSetMoveDirection(Player.MoveDirection); } if (InputManager.InputManager.KeyJustPressed(Keys.Space)) { Player.Velocity = new Vector2(Player.Velocity.X, -600); //ServerSetVelocity(Player.Velocity); } Player.UpdatePhysics(PlatformWorld.Platforms.ToArray()); ServerSetVelocity(Player.Velocity); ServerSetPosition(Player.Position); } // Update other "local" players. foreach (Player p in _serverPlayers) { if (p.DrawColor != Player.DrawColor && p.MoveDirection != Player.MoveDirection) { p.UpdatePhysics(PlatformWorld.Platforms.ToArray()); } } }