public void checkHitOnPlayers(Player player1, Player player2, ComboManager comboManager, RoundManager roundManager, KeyboardState Keyboard, GameState gameState)
        {
            for (int i = player1Projectiles.Count - 1; i >= 0; i--)
            {
                Projectile projectile = player1Projectiles[i];
                if (projectile.Hitbox.Intersects(player2.Sprite.Hurtbox))
                {
                    if (projectile.NumOfHits > 0)
                    {
                        Rectangle collisionZone = Rectangle.Intersect(projectile.Hitbox, player2.Sprite.Hurtbox);

                        comboManager.player1LandedHit(player2.CharacterState);
                        Boolean hitEnemy = player2.hitByEnemy(Keyboard, projectile.CurrentProjectile.HitInfo, collisionZone);
                        player1.hitEnemy(hitEnemy);
                        projectile.hitEnemy();
                    }
                    else
                    {
                        if (!projectile.PlayOnce)
                        {
                            player1Projectiles.RemoveAt(i);
                        }
                    }
                    System.Diagnostics.Debug.WriteLine("We have projectile  1 collision at " + projectile.CurrentProjectile.CurrentFrame);
                    if (player2.CurrentHealth <= 0)
                    {
                        roundManager.roundEnd(1);
                        gameState = GameState.ROUNDEND;
                    }
                }
            }

            for (int j = player2Projectiles.Count - 1; j >= 0; j--)
            {
                Projectile projectile = player2Projectiles[j];
                if (projectile.Hitbox.Intersects(player1.Sprite.Hurtbox))
                {
                    if (projectile.NumOfHits > 0)
                    {
                        Rectangle collisionZone = Rectangle.Intersect(projectile.Hitbox, player1.Sprite.Hurtbox);
                        comboManager.player2LandedHit(player1.CharacterState);
                        Boolean hitEnemy = player1.hitByEnemy(Keyboard, projectile.CurrentProjectile.HitInfo, collisionZone);
                        player2.hitEnemy(hitEnemy);
                        projectile.hitEnemy();
                    }
                    else
                    {
                        if (!projectile.PlayOnce)
                        {
                            player2Projectiles.RemoveAt(j);
                        }
                    }
                    System.Diagnostics.Debug.WriteLine("We have projectile collision at " + projectile.CurrentProjectile.CurrentFrame);
                    if (player1.CurrentHealth <= 0)
                    {
                        roundManager.roundEnd(2);
                        gameState = GameState.ROUNDEND;
                    }
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Allows the game to run logic such as updating the world,
        /// checking for collisions, gathering input, and playing audio.
        /// </summary>
        /// <param name="gameTime">Provides a snapshot of timing values.</param>
        protected override void Update(GameTime gameTime)
        {
            if (gameState == GameState.MAINMENU)
            {
                mainMenu.moveMenuSelection(Keyboard.GetState(), player1Controls.Controls, player2Controls.Controls);
                if (mainMenu.menuItemSelected())
                {
                    if (mainMenu.SelectedMenu == "Start")
                    {
                        gameState = GameState.LOADING;
                        mainMenu.resetMenuSelection();
                    }
                }
            }
            if (gameState == GameState.PLAYERSELECT)
            {
                characterSelection.moveCharacterSelection(Keyboard.GetState(), player1Controls.Controls, player2Controls.Controls);
                if (characterSelection.selectionLocked())
                {
                    player1CharacterId = characterSelection.Player1CharacterId;
                    player2CharacterId = characterSelection.Player1CharacterId;
                    gameState          = GameState.LOADING;
                }
            }
            if (gameState == GameState.LOADING && !isLoading) //isLoading bool is to prevent the LoadGame method from being called 60 times a seconds
            {
                backgroundThread = new Thread(LoadGame);
                isLoading        = true;

                //start backgroundthread
                backgroundThread.Start();
            }
            else if (gameState == GameState.ROUNDEND)
            {
                projectileManager.clearAllProjectiles();
                player1.Update(gameTime, Keyboard.GetState(), false);
                player2.Update(gameTime, Keyboard.GetState(), false);
                roundManager.handleRoundEnd(projectileManager);
                if (roundManager.ResetRound == true)
                {
                    if (roundManager.Player1RoundWins == 2)
                    {
                        gameState = GameState.DEMOEND;
                        roundManager.keepFadedOut();
                        Thread.Sleep(1000);
                        Console.WriteLine("Player 1 wins at " + roundManager.Player1RoundWins + " ending round");
                    }
                    else if (roundManager.Player2RoundWins == 2)
                    {
                        gameState = GameState.DEMOEND;
                        roundManager.keepFadedOut();
                        Thread.Sleep(1000);
                        Console.WriteLine("Player 1 wins at " + roundManager.Player1RoundWins + " ending round");
                    }
                    else
                    {
                        gameState = GameState.PLAYING;
                    }
                }
                adjustCamera();
            }
            else if (gameState == GameState.DEMOEND)
            {
                projectileManager.clearAllProjectiles();
                player1.Update(gameTime, Keyboard.GetState(), false);
                player2.Update(gameTime, Keyboard.GetState(), false);
                roundManager.handleMatchEnd(projectileManager);
                if (roundManager.FadeAmount < .1f)
                {
                    Thread.Sleep(5000);
                    gameState = GameState.MAINMENU;
                }
            }
            else if (gameState == GameState.PAUSED)
            {
                pauseMenu.moveMenuSelection(Keyboard.GetState(), player1Controls.Controls, player2Controls.Controls);
                if (pauseMenu.menuItemSelected())
                {
                    if (pauseMenu.SelectedMenu == "Exit")
                    {
                        Exit();
                    }
                    else if (pauseMenu.SelectedMenu == "Controller Settings")
                    {
                        Keys[] test = Keyboard.GetState().GetPressedKeys();
                        if (test.Length > 0)
                        {
                            for (var i = 0; i < test.Length; i++)
                            {
                                Console.WriteLine(test[i]);
                            }
                        }
                        GamePadState padState1 = GamePad.GetState(PlayerIndex.One);
                        if (padState1.IsConnected)
                        {
                            if (padState1.Buttons.A == ButtonState.Pressed)
                            {
                                Console.WriteLine("Button A pressed on gamepad");
                            }
                        }
                    }
                    else if (pauseMenu.SelectedMenu == "Resume")
                    {
                        gameState = GameState.PLAYING;
                        pauseMenu.resetMenuSelection();
                    }
                }
            }
            else if (gameState == GameState.PLAYING)
            {
                frameTimer += (float)gameTime.ElapsedGameTime.TotalSeconds;

                //  if (frameTimer > frameLength)
                //{
                frameTimer = 0.0f;

                if (superManager.isInSuperFreeze())
                {
                    if (superManager.playerPerformingSuper() == 1)
                    {
                        player1.Update(gameTime, Keyboard.GetState(), false);
                    }
                    else
                    {
                        player2.Update(gameTime, Keyboard.GetState(), false);
                    }

                    superManager.processSuperFreeze();
                }
                else
                {
                    projectileManager.updateProjectileList(gameTime);
                    if (hitstop > 0)
                    {
                        player1.Update(gameTime, Keyboard.GetState(), true);

                        player2.Update(gameTime, Keyboard.GetState(), true);
                    }
                    else
                    {
                        player1.Update(gameTime, Keyboard.GetState(), false);

                        player2.Update(gameTime, Keyboard.GetState(), false);
                    }

                    if (hitstop == 0 && !superManager.isInSuperFreeze())
                    {
                        adjustPlayerPositioning();

                        keepPlayersInBound();

                        throwManager.updateCharacterState(1, player1);
                        throwManager.updateCharacterState(2, player2);

                        // Detect player collisions
                        //
                        if (player1.Sprite.Hitbox.Intersects(player2.Sprite.Hurtbox) && !player1.HasHitOpponent && player1.Sprite.CurrentMoveAnimation.HitInfo != null)
                        {
                            // TODO make this not hardcoded
                            //
                            Rectangle test = Rectangle.Intersect(player1.Sprite.Hitbox, player2.Sprite.Hurtbox);

                            hitstop = 7;
                            comboManager.player1LandedHit(player2.CharacterState);
                            Boolean hitEnemy = player2.hitByEnemy(Keyboard.GetState(), player1.Sprite.CurrentMoveAnimation.HitInfo, test);
                            player1.hitEnemy(hitEnemy);

                            System.Diagnostics.Debug.WriteLine("We have collision at " + player1.Sprite.CurrentMoveAnimation.CurrentFrame);
                            if (player2.CurrentHealth <= 0)
                            {
                                roundManager.roundEnd(1);
                                Console.WriteLine("Player 1 wins at " + roundManager.Player1RoundWins + " ending round");

                                gameState = GameState.ROUNDEND;
                            }
                        }
                        else if (player2.Sprite.Hitbox.Intersects(player1.Sprite.Hurtbox) && !player2.HasHitOpponent && player2.Sprite.CurrentMoveAnimation.HitInfo != null && player2.Sprite.Hitbox.Width > 0)
                        {
                            hitstop = 7;
                            Rectangle test = Rectangle.Intersect(player1.Sprite.Hurtbox, player2.Sprite.Hitbox);

                            comboManager.player2LandedHit(player1.CharacterState);
                            Boolean hitEnemy = player1.hitByEnemy(Keyboard.GetState(), player2.Sprite.CurrentMoveAnimation.HitInfo, test);
                            player2.hitEnemy(hitEnemy);
                            if (player1.CurrentHealth <= 0)
                            {
                                roundManager.roundEnd(2);

                                gameState = GameState.ROUNDEND;
                            }
                        }
                        else if (Keyboard.GetState().IsKeyDown(Keys.P))
                        {
                            Console.WriteLine("Test STuff");
                            //         cam.Zoom = 1.2f;
                            // player1.hitByEnemy(Keyboard.GetState(), testHitInfo);
                            //  player1.CurrentHealth -= 10;
                        }
                        else if (Keyboard.GetState().IsKeyDown(Keys.Escape))
                        {
                            //Exit();
                            gameState = GameState.PAUSED;
                        }
                        else if (Keyboard.GetState().IsKeyDown(Keys.O))
                        {
                            cam.X -= 3;
                        }
                        projectileManager.checkHitOnPlayers(player1, player2, comboManager, roundManager, Keyboard.GetState(), gameState);
                        if (player1.CurrentHealth <= 0)
                        {
                            gameState = GameState.ROUNDEND;
                        }
                        elapsedTime += gameTime.ElapsedGameTime;

                        if (elapsedTime > TimeSpan.FromSeconds(1))
                        {
                            elapsedTime -= TimeSpan.FromSeconds(1);
                            frameRate    = frameCounter;
                            frameCounter = 0;
                        }

                        // leftBorder.Width += 10;

                        adjustCamera();
                        comboManager.decrementComboTimer();

                        roundManager.decrementTimer(gameTime);
                        if (roundManager.isTimeOut())
                        {
                            roundManager.timeOut();
                        }

                        base.Update(gameTime);
                    }
                    else
                    {
                        hitstop--;
                        if (hitstop < 0)
                        {
                            hitstop = 0;
                        }
                    }
                }
            }
        }