private void chooseOUToolStripMenuItem_Click(object sender, EventArgs e) { sfd = new SomeFunctionDelegate(this.AddUsersAsync); sfd.BeginInvoke(null, null); }
protected override void Update(GameTime gameTime) { // // Collect input // float xinput = 0; float yinput = 0; if (state != GameState.playing) { mouseState = Mouse.GetState(); if (mouseState.LeftButton == ButtonState.Pressed) { if (singlePlayerButton.isVisible()) { Rectangle recA = new Rectangle((int)singlePlayerButton.getPos().X, (int)singlePlayerButton.getPos().Y, singlePlayerButton.getImage().Width, singlePlayerButton.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { gameType = "single"; server = new Server(); sfd = new SomeFunctionDelegate(server.launchServer); sfd.BeginInvoke(null, null); host = true; LAN = true; client.DiscoverLocalPeers(14242); state = GameState.lobby; } } if (multiplayerButton.isVisible()) { Rectangle recA = new Rectangle((int)multiplayerButton.getPos().X, (int)multiplayerButton.getPos().Y, multiplayerButton.getImage().Width, multiplayerButton.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { state = GameState.multiplayerMenu; } } if (hostGame.isVisible()) { Rectangle recA = new Rectangle((int)hostGame.getPos().X, (int)hostGame.getPos().Y, hostGame.getImage().Width, hostGame.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { gameType = "multi"; server = new Server(); sfd = new SomeFunctionDelegate(server.launchServer); sfd.BeginInvoke(null, null); host = true; LAN = true; client.DiscoverLocalPeers(14242); state = GameState.lobby; } } if (joinGame.isVisible()) { Rectangle recA = new Rectangle((int)joinGame.getPos().X, (int)joinGame.getPos().Y, joinGame.getImage().Width, joinGame.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { state = GameState.joinOptions; } } if (joinIneternet.isVisible()) { Rectangle recA = new Rectangle((int)joinIneternet.getPos().X, (int)joinIneternet.getPos().Y, joinIneternet.getImage().Width, joinIneternet.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { state = GameState.enterIp; gameType = "multi"; } } if (joinLan.isVisible()) { Rectangle recA = new Rectangle((int)joinLan.getPos().X, (int)joinLan.getPos().Y, joinLan.getImage().Width, joinLan.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { client.DiscoverLocalPeers(14242); state = GameState.lobby; gameType = "multi"; LAN = true; } } if (startGame.isVisible() && host == true) { Rectangle recA = new Rectangle((int)startGame.getPos().X, (int)startGame.getPos().Y, startGame.getImage().Width, startGame.getImage().Height); Rectangle recB = new Rectangle(mouseState.X, mouseState.Y, 1, 1); if (recA.Contains(recB)) { state = GameState.playing; NetOutgoingMessage om = client.CreateMessage(); om.Write(player.getId()); om.Write(1); client.SendMessage(om, NetDeliveryMethod.UnreliableSequenced, 6); } } } if (state == GameState.lobby) { //Console.WriteLine(allPlayers.Count); NetIncomingMessage msg; while ((msg = client.ReadMessage()) != null) { bool playerFound = false; bool cookieFound = false; switch (msg.MessageType) { case NetIncomingMessageType.DiscoveryResponse: // just connect to first server discovered // Console.WriteLine("Received a request response"); if (LAN) { client.Connect(msg.SenderEndPoint); } break; case NetIncomingMessageType.Data: if (msg.SequenceChannel == 0) { // server sent a position update long who = msg.ReadInt64(); float x = msg.ReadFloat(); float y = msg.ReadFloat(); int playerNum = msg.ReadInt32(); Texture2D image; if (playerNum == 2) { image = truett_yellow; } else if (playerNum == 3) { image = truett_green; } else { image = truettFall; } Player newPlayer = null; foreach (var p in allPlayers) { if (who == p.getId()) { if (p.getId() == player.getId()) { if (firstPass == true && x > 0) { player.newPos(new Vector2(x, y)); firstPass = false; } if (player.getPlayerNum() != playerNum) { player.setPlayerNum(playerNum, image); } } playerFound = true; } } if (playerFound == false) { newPlayer = new Player(image, x, y, who, numPlayers); allPlayers.Add(newPlayer); numPlayers++; } positions[who] = new Vector2(x, y); } else if (msg.SequenceChannel == 1) { //cookies.Clear(); float x = msg.ReadFloat(); float y = msg.ReadFloat(); int id = msg.ReadInt32(); foreach (var c in cookies) { if (c.getId() == id) { cookieFound = true; } } if (cookieFound == false) { Object newCookie = new Object(cookieImage, x, y, id); cookies.Add(newCookie); } } else if (msg.SequenceChannel == 6) { int start = msg.ReadInt32(); if (start == 1) { state = GameState.playing; } } break; } } } } else { KeyboardState keyState = Keyboard.GetState(); // exit game if escape or Back is pressed if (keyState.IsKeyDown(Keys.Escape) || GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // use arrows or dpad to move avatar if (GamePad.GetState(PlayerIndex.One).DPad.Left == ButtonState.Pressed || keyState.IsKeyDown(Keys.Left)) if (player.getPos().X > 0) { xinput = -3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds; } if (GamePad.GetState(PlayerIndex.One).DPad.Right == ButtonState.Pressed || keyState.IsKeyDown(Keys.Right)) if (player.getPos().X < 1160) { xinput = 3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds; } //if (GamePad.GetState(PlayerIndex.One).DPad.Up == ButtonState.Pressed || keyState.IsKeyDown(Keys.Up)) //if (GamePad.GetState(PlayerIndex.One).DPad.Down == ButtonState.Pressed || keyState.IsKeyDown(Keys.Down)) if (player.getPos().Y < 480 && player.goingUp() == false) { yinput = 3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds; foreach (var tramp in trampolines) { Rectangle recA = new Rectangle((int)player.getPos().X, (int)player.getPos().Y, player.getImage().Width, player.getImage().Height); Rectangle recB = new Rectangle((int)tramp.getPos().X, (int)tramp.getPos().Y, tramp.getImage().Width, tramp.getImage().Height); if (collision.PerPixel(recA, player.getImage(), recB, tramp.getImage()) && (player.getPos().Y + 100 <= tramp.getPos().Y)) { player.updateDirection(); //player.updateImage(truettJump); break; } } //yinput = 3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds; } else if (player.getPos().Y >= 0 && player.goingUp() == true) { yinput = -3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds; if (player.getPos().Y <= 50) { player.updateDirection(); //player.updateImage(truettFall); } } foreach(var pl in allPlayers) { for (int x = 0; x < cookies.Count; x++) { Rectangle recA = new Rectangle((int)player.getPos().X, (int)player.getPos().Y, 114, 240); Rectangle recB = new Rectangle((int)cookies[x].getPos().X, (int)cookies[x].getPos().Y, 60, 60); Rectangle recC = new Rectangle((int)pl.getPos().X, (int)pl.getPos().Y, 114, 240); if (recA.Intersects(recB) || recC.Intersects(recB)) { if(recA.Intersects(recB)) { NetOutgoingMessage om = client.CreateMessage(); om.Write(player.getId()); om.Write(cookies[x].getId()); client.SendMessage(om, NetDeliveryMethod.UnreliableSequenced, 1); } cookies.RemoveAt(x); //We just removed an object, so we set x back by one to make sure we skip none //Just sit down and think about it, it makes sense x--; } } } if (xinput != 0 || yinput != 0) { player.updatePosX(xinput); player.updatePosY(yinput); //player.newPos(new Vector2(xinput, yinput)); //Console.WriteLine(player.getPos().X + " " + player.getPos().Y); // // If there's input; send it to server // NetOutgoingMessage om = client.CreateMessage(); om.Write(player.getId()); om.Write(xinput); // very inefficient to send a full Int32 (4 bytes) but we'll use this for simplicity om.Write(yinput); client.SendMessage(om, NetDeliveryMethod.UnreliableSequenced, 0); } //move all the other players foreach (var p in allPlayers) { if (player.getId() != p.getId()) { if (p.getMoveX() == 1) { p.updatePosX(3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds); } else if (p.getMoveX() == -1) { p.updatePosX(-3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds); } if (p.getMoveY() == 1) { p.updatePosY(3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds); //p.updateImage(truettJump); } else if (p.getMoveY() == -1) { p.updatePosY(-3 * 100 * (float)gameTime.ElapsedGameTime.TotalSeconds); //p.updateImage(truettFall); } } } //move toby moveToby(gameTime); // read messages NetIncomingMessage msg; while ((msg = client.ReadMessage()) != null) { bool playerFound = false; bool cookieFound = false; switch (msg.MessageType) { case NetIncomingMessageType.DiscoveryResponse: // just connect to first server discovered Console.WriteLine("Received a request response"); if (gameType == "single") { client.Connect(msg.SenderEndPoint); } break; case NetIncomingMessageType.Data: if (msg.SequenceChannel == 0) { // server sent a position update long who = msg.ReadInt64(); float x = msg.ReadFloat(); float y = msg.ReadFloat(); int playerNum = msg.ReadInt32(); foreach (var p in allPlayers) { if (who == p.getId()) { if (p.getId() != player.getId()) { float xDiff = Math.Abs(x - p.getPos().X); float yDiff = Math.Abs(y - p.getPos().Y); if (xDiff <= 5) { p.setMoveX(0); } else if (x > p.getPos().X) { p.setMoveX(1); } else if (x < p.getPos().X) { p.setMoveX(-1); } if (y == p.getPos().Y) { p.setMoveY(0); } else if (y > p.getPos().Y) { p.setMoveY(1); } else { p.setMoveY(-1); } } } } positions[who] = new Vector2(x, y); } if (msg.SequenceChannel == 1) { //cookies.Clear(); float x = msg.ReadFloat(); float y = msg.ReadFloat(); int id = msg.ReadInt32(); foreach (var c in cookies) { if (c.getId() == id) { cookieFound = true; } } if (cookieFound == false) { Object newCookie = new Object(cookieImage, x, y, id); cookies.Add(newCookie); } } else if (msg.SequenceChannel == 2) { int cookieId = msg.ReadInt32(); List<Object> deleteCookies = new List<Object>(cookies); foreach (var c in deleteCookies) { if (c.getId() == cookieId) { cookies.Remove(c); } } } else if (msg.SequenceChannel == 4) { remoteLevel = msg.ReadInt32(); if (localLevel != remoteLevel) { localLevel = remoteLevel; Thread.Sleep(2000); } } break; } } textbox.Update(gameTime); base.Update(gameTime); } }
public MyClass() { sfd = new SomeFunctionDelegate(this.SomeFunction); }