public void Draw(SpriteBatch spriteBatch, Player player)
        {
            spriteBatch.Draw(texture,new Rectangle(0,player.level.Height*32,player.level.Width*32,32), Color.White);

            string text = string.Format("Gold : {0} Lives : {1}", player.Money, player.Lives);
            spriteBatch.DrawString(font, text, textPosition, Color.White);
        }
        public Enemy(Vector2 position, float health, int bountyGiven, float speed, Player player, List<Texture2D> textures, Pathfinder pathFinder)
            : base(textures[0], position)
        {
            this.startHealth = health;
            this.currentHealth = startHealth;
            this.player = player;
            this.bountyGiven = bountyGiven;
            this.speed = speed;
            EnemyDied += new EnemyDiedEventHandler(player.RaiseStats);

            this.textures = textures;

            this.pathFinder = pathFinder;
        }
        private Queue<Wave> waves = new Queue<Wave>(); // A queue of all our waves

        #endregion Fields

        #region Constructors

        public WaveManager(Level level, int numberOfWaves, Player player, List<Texture2D> textures, Pathfinder pathFinder)
        {
            this.numberOfWaves = numberOfWaves;

            this.level = level;

            for (int i = 0; i < numberOfWaves; i++)
            {
                int initialNumerOfEnemies = 6;
                int numberModifier = (i / 6) + 1;

                Wave wave = new Wave(i, initialNumerOfEnemies *
                   numberModifier, level, player, textures, pathFinder);

                waves.Enqueue(wave);
            }

            StartNextWave();
        }
        private void UpdateInput(Player player, GameTime gameTime)
        {
            foreach (LocalNetworkGamer gamer in networkSession.LocalGamers)
            {
                ReceiveNetworkData(gamer, gameTime);

                packetWriter.Write(player.Money);
                packetWriter.Write(player.Lives);

                packetWriter.Write(player.Towers.Count);

                if (player.Towers.Count >= 1)
                {
                    packetWriter.Write(player.Towers[player.Towers.Count-1].Position);
                }

                packetWriter.Write(player.waveManager.CurrentWave.Enemies.Count);
                foreach (Enemy e in player.waveManager.CurrentWave.Enemies)
                {
                    packetWriter.Write(e.Position);
                }

                gamer.SendData(packetWriter, SendDataOptions.None);

                player.Update(gameTime, true);
            }
        }
 private void HandleGameplayInput(Player player, GameTime gameTime)
 {
     UpdateInput(player, gameTime);
         networkSession.Update();
 }
        void DrawPlayer(Player player, Viewport viewport)
        {
            //GraphicsDevice.Clear(Color.CornflowerBlue);

            graphics.GraphicsDevice.Viewport = viewport;

            spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);

            player.Draw(spriteBatch);

            spriteBatch.End();
        }
        protected override void Update(GameTime gameTime)
        {
            MouseState mouse = Mouse.GetState();
            KeyboardState kstatee = Keyboard.GetState();

            switch (CurrentGameState)
            {
                case GameState.Video:
                    //if (vidPlayer.State == MediaState.Stopped)
                    CurrentGameState = GameState.MainMenu;
                    break;
                case GameState.MainMenu:

                    if (buttonSP.isClicked == true)
                    {
                        spPlayer = new Player(Content, "Player1" );
                        CurrentGameState = GameState.SinglePlayer;
                        screenwidth = spPlayer.level.Width * 32;
                        screenheight = (spPlayer.level.Height + 1) * 32;
                        graphics.PreferredBackBufferWidth = screenwidth;
                        graphics.PreferredBackBufferHeight = screenheight;
                        graphics.ApplyChanges();
                    }
                    if (buttonMP.isClicked == true)
                    {
                        CurrentGameState = GameState.Multiplayer;
                        splitbar = Content.Load<Texture2D>("Game/SplitBalken");
                        spPlayer = new Player(Content, "Player1"); //spPlayer nur zwecks Abmessungen
                        screenwidth = spPlayer.level.Width * 32 * 2 +2 ;
                        screenheight = (spPlayer.level.Height + 1) * 32;
                        graphics.PreferredBackBufferWidth = screenwidth;
                        graphics.PreferredBackBufferHeight = screenheight;
                        graphics.ApplyChanges();

                        GraphicsDevice.Viewport = new Viewport(0, 0, screenwidth, screenheight);
                        graphics.ApplyChanges();
                        mainViewport = GraphicsDevice.Viewport;

                        leftViewport = mainViewport;
                        rightViewport = mainViewport;
                        leftViewport.Width = (leftViewport.Width / 2 ) -1;
                        rightViewport.Width = (rightViewport.Width / 2)-1 ;
                        rightViewport.X = leftViewport.Width  +2;

                        graphics.ApplyChanges();
                    }
                    if (buttonHS.isClicked == true)
                    {
                        highscore = new HighScore(Content.Load<Texture2D>("MainMenu/Back"), graphics.GraphicsDevice);
                        screenwidth = 300;
                        screenheight = 300;
                        graphics.PreferredBackBufferWidth = screenwidth;
                        graphics.PreferredBackBufferHeight = screenheight;
                        graphics.ApplyChanges();
                        CurrentGameState = GameState.HighScore;
                    }
                    if (buttonEX.isClicked == true) CurrentGameState = GameState.Exiting;

                    buttonSP.Update(mouse);
                    buttonMP.Update(mouse);
                    buttonHS.Update(mouse);
                    buttonEX.Update(mouse);

                    break;
                case GameState.SinglePlayer:
                    if (SignedInGamer.SignedInGamers[0].Gamertag != null && SignedInGamer.SignedInGamers[0].Gamertag != spPlayer.Name)
                        spPlayer.Name = SignedInGamer.SignedInGamers[0].Gamertag;
                    if (spPlayer.Lives <= 0 && spPlayer.Lives != -1)
                    {
                        spPlayer.Lost();
                        spPlayer.Lives = -1;
                    }
                    if(spPlayer.Lives > 0)
                        spPlayer.Update(gameTime, true);

                    break;
                case GameState.Multiplayer:
                    if (!Guide.IsVisible)
                    {
                        foreach (SignedInGamer signedInGamer in
                            SignedInGamer.SignedInGamers)
                        {
                            Player player = signedInGamer.Tag as Player;

                            if (networkSession != null)
                            {
                                if (networkSession.SessionState ==
                                            NetworkSessionState.Lobby)
                                {
                                    HandleLobbyInput();

                                }
                                else
                                {
                                    if(player.Lives>0)
                                    HandleGameplayInput(player, gameTime);

                                }
                            }
                            else if (availableSessions != null)
                            {
                                HandleAvailableSessionsInput();
                            }
                            else
                            {
                                HandleTitleScreenInput();
                            }
                        }
                    }

                    break;
                case GameState.HighScore:
                    if (highscore.highscorebutton.isClicked == true)
                    {
                        SetMainMenuOptions();
                    }
                    highscore.Update(mouse);
                    break;
                case GameState.Exiting:
                    this.Exit();
                    break;
            }

            if (kstatee.IsKeyDown(Keys.Escape))
            {
                if (CurrentGameState == GameState.MainMenu)
                    CurrentGameState = GameState.Exiting;
                else
                {
                    SetMainMenuOptions();
                }
            }

            base.Update(gameTime);
        }