コード例 #1
0
ファイル: VictoryState.cs プロジェクト: nebulark/RespawnWars
 public VictoryState(Game1 game)
     : base(game)
 {
     this.game      = game;
     sendingManager = new SendingManager();
     sendingManager.addItem(new byte[] { (byte)PacketType.Victory });
     base.Initialize(menuname, buttons);
 }
コード例 #2
0
ファイル: IngameState.cs プロジェクト: nebulark/RespawnWars
        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);
        }