From 15a7ada8a1ee1fa0e1850e57736e42da1e13330c Mon Sep 17 00:00:00 2001 From: trandit <trandit@mcmaster.ca> Date: Tue, 15 Nov 2016 11:14:59 -0500 Subject: [PATCH] Added damage dealt number popup --- src/Blaze-Brigade/Blaze_Brigade/Game.cs | 34 ++++++++++ src/Blaze-Brigade/Blaze_Brigade/GameState.cs | 68 ++++++++++++++++++- .../Blaze_Brigade/MouseHandler.cs | 20 +++--- 3 files changed, 109 insertions(+), 13 deletions(-) diff --git a/src/Blaze-Brigade/Blaze_Brigade/Game.cs b/src/Blaze-Brigade/Blaze_Brigade/Game.cs index 1a86f18..636fef9 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/Game.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/Game.cs @@ -55,6 +55,8 @@ namespace Controller private SpriteFont largeFont; // custom font 2 private SpriteFont largestFont; // custom font 3 private float ElapsedTime = 0f; + private float damageDealtTime1 = 0f; + private float damageDealtTime2 = 0f; #endregion @@ -258,6 +260,26 @@ namespace Controller } } + if (GameState.currentPlayerDamagePopup) + { + damageDealtTime1 += (float)gameTime.ElapsedGameTime.TotalSeconds; + if (damageDealtTime1 > 2.5) + { + GameState.currentPlayerDamagePopup = false; + damageDealtTime1 = 0f; + } + } + + if (GameState.enemyPlayerDamagePopup) + { + damageDealtTime2 += (float)gameTime.ElapsedGameTime.TotalSeconds; + if (damageDealtTime2 > 2.5) + { + GameState.enemyPlayerDamagePopup = false; + damageDealtTime2 = 0f; + } + } + // removes deceased units in Player 1 foreach (Unit unit in player1.getUnits()) { @@ -333,6 +355,18 @@ namespace Controller } #endregion + if (GameState.currentPlayerDamagePopup) + { + spriteBatch.DrawString(largestFont, GameState.CurrentPlayerDamageDealt, GameState.lastDefendingUnit.PixelCoordinates + (new Vector2(2, -65)), Color.DarkRed, 0, + Vector2.Zero, 1f, SpriteEffects.None, 0f); + } + if (GameState.enemyPlayerDamagePopup) + { + spriteBatch.DrawString(largestFont, GameState.EnemyPlayerDamageDealt, GameState.lastAttackingUnit.PixelCoordinates + (new Vector2(2, -65)), Color.DarkRed, 0, + Vector2.Zero, 1f, SpriteEffects.None, 0f); + } + + #region When Unit is selected //if unit is currently clicked on if (GameState.playableUnitSelected) diff --git a/src/Blaze-Brigade/Blaze_Brigade/GameState.cs b/src/Blaze-Brigade/Blaze_Brigade/GameState.cs index 6fae82e..d42c191 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/GameState.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/GameState.cs @@ -77,7 +77,73 @@ namespace Model sets and gets whether it is currently transitioning turns */ public static bool transitionTurn { get; set; } - /* + /** + Sets and gets whether damage dealt number pops up for current player + */ + public static bool currentPlayerDamagePopup { get; set; } + /** + Stores the damage dealt by current player in their most recent attack + */ + private static String currentPlayerDamageDealt; + /** + Sets and gets the current player's last attack + */ + public static String CurrentPlayerDamageDealt + { + get + { + return currentPlayerDamageDealt; + } + set + { + int damage = Int32.Parse(value); + if (damage == 0) + { + currentPlayerDamageDealt = "Miss"; + } + else { + currentPlayerDamageDealt = value; + } + } + } + /** + Sets and gets the current unit controlled in a 2nd location, for printing damage popup AFTER selectedUnit has been updated, since damage Popup should appear for a few seconds after action has finished + */ + public static Unit lastAttackingUnit { get; set; } + /** + Sets and gets whether damage dealt number pops up for enemy player + */ + public static bool enemyPlayerDamagePopup { get; set; } + /** + Stores the damage dealt by enemy player in their most recent attack + */ + private static String enemyPlayerDamageDealt; + /** + Sets and gets the enemy player's last attack + */ + public static String EnemyPlayerDamageDealt + { + get + { + return enemyPlayerDamageDealt; + } + set + { + int damage = Int32.Parse(value); + if (damage == 0) + { + enemyPlayerDamageDealt = "Miss"; + } + else { + enemyPlayerDamageDealt = value; + } + } + } + /** + Sets and gets the current unit controlled in a 2nd location, for printing damage popup AFTER unitToAttack has been updated, since damage Popup should appear for a few seconds after action has finished + */ + public static Unit lastDefendingUnit { get; set; } + /** Sets and gets movable nodes that can be retrieved without calling path finding */ public static LinkedList<Node> moveableNodes { get; set; } diff --git a/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs b/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs index 6b91bff..3964265 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs @@ -456,16 +456,12 @@ namespace Controller button.Active = false; unit.getButtonType(ButtonType.Move).Active = false; // move button is no longer active unit.getButtonType(ButtonType.Attack).Active = false; // attack button is no longer active - int attackDirection = 0; - int counterAttackDirection = 0; //Gets attack anaimation direction #region Attack animation Direction Direction attackDir = Direction.Up; Direction counterAttackDir = Direction.Up; if (unit.Position.Item1 < unit2.Position.Item1) //attack right { - attackDirection = 0; - counterAttackDirection = 1; attackDir = Direction.Right; counterAttackDir = Direction.Left; unit.setCurrentFrame(7); @@ -473,8 +469,6 @@ namespace Controller } else if (unit.Position.Item1 > unit2.Position.Item1) //attack left { - attackDirection = 1; - counterAttackDirection = 0; attackDir = Direction.Left; counterAttackDir = Direction.Right; unit.setCurrentFrame(4); @@ -482,8 +476,6 @@ namespace Controller } else if (unit.Position.Item2 < unit2.Position.Item2) //attack down { - attackDirection = 2; - counterAttackDirection = 3; attackDir = Direction.Down; counterAttackDir = Direction.Up; unit.setCurrentFrame(1); @@ -491,15 +483,12 @@ namespace Controller } else if (unit.Position.Item2 > unit2.Position.Item2) //attack up { - attackDirection = 3; - counterAttackDirection = 2; attackDir = Direction.Up; counterAttackDir = Direction.Down; unit.setCurrentFrame(10); unit2.setCurrentFrame(1); } #endregion - attackAnimation(attackDir, unit); bool attackType = false; @@ -507,15 +496,22 @@ namespace Controller attackType = findAttackType(unit); int damageDealt = DamageCalculations.finalDamage(unit, unit2, attackType); //gets damage dealt + GameState.lastAttackingUnit = unit; + GameState.lastDefendingUnit = unit2; + GameState.CurrentPlayerDamageDealt = damageDealt.ToString(); unit2.Hp = unit2.Hp - damageDealt; //updates hp + GameState.currentPlayerDamagePopup = true; + attackAnimation(attackDir, unit); if (unit2.Alive && (GameFunction.isEnemyUnitInRange(graph, unit2, unit))) //if unit 2 is still alive, perform a counter attack { Thread.Sleep(750); - attackAnimation(counterAttackDir, unit2); attackType = findAttackType(unit2); //gets attack type int damageTaken = DamageCalculations.finalDamage(unit2, unit, attackType); //damage dealt + GameState.EnemyPlayerDamageDealt = damageTaken.ToString(); unit.Hp = unit.Hp - damageTaken; //update hp + GameState.enemyPlayerDamagePopup = true; + attackAnimation(counterAttackDir, unit2); } GameState.attackConfirmOpen = false; setSelectedUnit(null, false); -- GitLab