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; } } } }
/// <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; } } } } }