public Gamestate Update(GameTime gameTime) { Gamestate nextState = Gamestate.NoChange; byte[] receivedData; receivedData = game.Udp.GetNextPacket(); while (receivedData != null) { nextState = ProcessReceivedData(receivedData); if (nextState != Gamestate.NoChange) { return(nextState); } receivedData = game.Udp.GetNextPacket(); } game.Udp.addSendingData(sendingManager.GetData()); game.Udp.Send(); string input = base.GetInput(gameTime); switch (input) { case "Back to Menu": return(Gamestate.Menu); } return(Gamestate.NoChange); }
public Gamestate Update(GameTime gameTime) { controlPointManager.Update(); Gamestate nextstate = Gamestate.NoChange; byte[] receivedData; //Hole Packete falls welche da receivedData = game.Udp.GetNextPacket(); while (receivedData != null) { //Verarbeite Packet nextstate = processData(receivedData); if (nextstate != Gamestate.NoChange) { return(nextstate); } receivedData = game.Udp.GetNextPacket(); } receivedData = null; //offset += new Vector2(1, 1); if (timeout-- < 0) { Debug.Assert(false, "Timout"); } if (Takt == 255) { Takt = 0; } else { Takt++; } UI.output = " " + timeout + " "; for (int i = 0; i < players.Length; i++) { players[i].Update(gameTime, offset); } //Regelmäßiges Updaten //abwechselnd damit nicht zuviel auf einmal gemacht werden muss if (Takt % 2 == 0) { //Beschreibe Daten int length = ((LocalPlayer)players[0]).WriteBytes(sendingBuffer); // füge sie der SendeQueue hinzu game.Udp.addSendingData(sendingBuffer, length); } //abwechselnd damit nicht zuviel auf einmal gemacht werden muss else { //Hitdetection gegnerische Einheiten vs Eigene Projectile //gibt zurück wieviele daten beschriebn wurden int length = 0; length = ((NetworkPlayer)players[1]).unitManager.Hitdetection(((LocalPlayer)players[0]).projectileFactory, sendingBuffer); //wenn die länge 2 oder weniger ist, dann sind keine sinvollen daten vorhanden und senden kann sich gespart werden //Fall bedingung nicht erfüllt ist kann das packet keine sinvollen daten enthalten da das packet "leer" 1+UnitTypeCount groß ist if (length > 1 + UnitManager.UnitTypeCount) { //wichtige Daten, sie unbedingt ankommen sollten sendingManager.addItem(sendingBuffer, length); } } //1 Sieg -1 Niederlage int winningStatus = ((LocalPlayer)players[0]).GetWinningStatus(); if (winningStatus != 0) { if (winningStatus == 1) { return(Gamestate.Victory); } else { return(Gamestate.Defeat); } } //fügt packete hinzu falls welche vorhanden sind game.Udp.addSendingData(sendingManager.GetData()); //absenden game.Udp.Send(); return(Gamestate.NoChange); }