From 6505c6ea4ca4e318b2f84a0239ee31c2b89075b8 Mon Sep 17 00:00:00 2001 From: trandit <trandit@mcmaster.ca> Date: Sun, 13 Nov 2016 12:15:41 -0500 Subject: [PATCH] Dead units no longer counter attack. Added game over button and overlay. Button event to be implemented --- .../Blaze_Brigade/Blaze_Brigade.csproj | 1 + .../Blaze_Brigade.csproj.Debug.cachefile | 5 ++-- .../Blaze_Brigade/BronzeSword.cs | 2 +- src/Blaze-Brigade/Blaze_Brigade/Game.cs | 26 +++++++++++------- src/Blaze-Brigade/Blaze_Brigade/GameState.cs | 4 +++ .../Blaze_Brigade/MouseHandler.cs | 19 ++++++++++--- .../Blaze_Brigade/Resource1.Designer.cs | 10 +++++++ .../Blaze_Brigade/Resource1.resx | 3 ++ .../Resources/main_menu_button.png | Bin 0 -> 3288 bytes .../Blaze_BrigadeContent.contentproj | 7 +++++ .../Blaze_BrigadeContent/main_menu_button.png | Bin 0 -> 3288 bytes 11 files changed, 60 insertions(+), 17 deletions(-) create mode 100644 src/Blaze-Brigade/Blaze_Brigade/Resources/main_menu_button.png create mode 100644 src/Blaze-Brigade/Blaze_BrigadeContent/main_menu_button.png diff --git a/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj b/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj index 09218cb..285075e 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj +++ b/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj @@ -122,6 +122,7 @@ <Content Include="GameThumbnail.png"> <XnaPlatformSpecific>true</XnaPlatformSpecific> </Content> + <None Include="Resources\main_menu_button.png" /> <None Include="Resources\warrior_stats.png" /> <None Include="Resources\mage_stats.png" /> <None Include="Resources\2warrior_stats.png" /> diff --git a/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj.Debug.cachefile b/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj.Debug.cachefile index 22ddb42..c15abd5 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj.Debug.cachefile +++ b/src/Blaze-Brigade/Blaze_Brigade/Blaze_Brigade.csproj.Debug.cachefile @@ -6,10 +6,10 @@ Content\attack.xnb Content\items.xnb Content\move.xnb Content\wait.xnb -Content\PixelFont.xnb Content\warrior_stats.xnb -Content\PixelFontLarge.xnb Content\warrior.xnb +Content\PixelFont.xnb +Content\PixelFontLarge.xnb Content\instructions1.xnb Content\instructions2.xnb Content\instructions3.xnb @@ -32,3 +32,4 @@ Content\warrior_attack.xnb Content\attack_confirm.xnb Content\confirm_attack.xnb Content\PixelFontLargest.xnb +Content\main_menu_button.xnb diff --git a/src/Blaze-Brigade/Blaze_Brigade/BronzeSword.cs b/src/Blaze-Brigade/Blaze_Brigade/BronzeSword.cs index 5d8e739..fd81671 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/BronzeSword.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/BronzeSword.cs @@ -27,7 +27,7 @@ namespace Model */ public BronzeSword() { - modStr = 5; + modStr = 50; modSkill = 5; modInt = 0; range = new int[2] { 1, 1 }; diff --git a/src/Blaze-Brigade/Blaze_Brigade/Game.cs b/src/Blaze-Brigade/Blaze_Brigade/Game.cs index ebe2c86..e206515 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/Game.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/Game.cs @@ -48,7 +48,7 @@ namespace Controller GraphicsDeviceManager graphics; SpriteBatch spriteBatch; - Texture2D backGround, moveableNode, attackableNode; + Texture2D backGround, moveableNode, attackableNode, gameOver; private SpriteFont font; // custom font private SpriteFont largeFont; // custom font 2 private SpriteFont largestFont; // custom font 3 @@ -94,6 +94,7 @@ namespace Controller backGround = Content.Load<Texture2D>("Game_Map"); // load background moveableNode = Content.Load<Texture2D>("moveableNode"); attackableNode = Content.Load<Texture2D>("attackableNode"); + gameOver = Content.Load<Texture2D>("main_menu_button"); font = Content.Load<SpriteFont>("PixelFont"); //loads font PixelFont largeFont = Content.Load<SpriteFont>("PixelFontLarge"); //loads font PixelFont @@ -151,8 +152,8 @@ namespace Controller mMenu.Show(); // show main menu if (mMenu.start == true) //if New game is selected { - mMenu.Close(); //close Main Menu screen - tut.Close(); //close How To Play Menu + mMenu.Hide(); //close Main Menu screen + tut.Hide(); //close How To Play Menu Form GameForm = (Form)Form.FromHandle(Window.Handle); GameForm.Opacity = 100; // make screen show currentGameState = GameMenuState.Playing; //set game state to Playing @@ -222,8 +223,6 @@ namespace Controller case GameMenuState.Playing: // if true.. load new image... backGround = Content.Load<Texture2D>("Game_Map"); // load background - Debug.WriteLine(player1.getNumOfUnits()); - if (GameFunction.isTurnOver()) @@ -240,8 +239,7 @@ namespace Controller GameFunction.removeDeceasedUnit(graph, player1, unit); if (GameFunction.isGameOver(player1, player2)) { - // TODO: game over screen - Debug.WriteLine("Game is over."); + GameState.gameOver = true; break; } } @@ -252,8 +250,7 @@ namespace Controller GameFunction.removeDeceasedUnit(graph, player2, unit); if (GameFunction.isGameOver(player1, player2)) { - // TODO: game over screen - Debug.WriteLine("Game is over."); + GameState.gameOver = true; break; } } @@ -464,9 +461,18 @@ namespace Controller } #endregion - + if (GameState.gameOver) + { + Debug.WriteLine("game over"); + Vector2 gameOverLocation = new Vector2(-370, -300); + spriteBatch.DrawString(largestFont,"Game Over", new Vector2(350, 200), Color.DarkRed, 0, Vector2.Zero, 1f, SpriteEffects.None, 0f); //draws Game Over Text + spriteBatch.Draw(gameOver, Vector2.Zero, null, Color.White, 0, gameOverLocation, 1f, SpriteEffects.None, 0f); + } + spriteBatch.Draw(backGround, Vector2.Zero, null, Color.White, 0, Vector2.Zero, 1f, SpriteEffects.None, 1); + + break; } diff --git a/src/Blaze-Brigade/Blaze_Brigade/GameState.cs b/src/Blaze-Brigade/Blaze_Brigade/GameState.cs index 64c68a4..028abe1 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/GameState.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/GameState.cs @@ -49,6 +49,10 @@ namespace Model */ public static bool isAnimating { get; set; } /* + Sets and gets whether game is over + */ + public static bool gameOver { 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 b63bfd2..04ce9f3 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/MouseHandler.cs @@ -64,6 +64,14 @@ namespace Controller Vector2 mouseClickCoordinates = new Vector2(currentMouseState.X, currentMouseState.Y); // mouse click coordinates Node nodeClickedOn = graph.getNode(mouseClickCoordinates); + if (GameState.gameOver) + { + if ((mouseClickCoordinates.X > 370 & mouseClickCoordinates.X < 556) & (mouseClickCoordinates.Y>300&mouseClickCoordinates.Y<396)){ + + + } + } + #region Check if a unit is clicked // if player clicks after unit is already selected ... @@ -391,11 +399,14 @@ namespace Controller attackAnimation(attackDirection, unit); int damageDealt = DamageCalculations.finalDamage(unit, unit2, false); - Thread.Sleep(750); - attackAnimation(counterAttackDirection, unit2); - int damageTaken = DamageCalculations.finalDamage(unit2, unit, false); unit2.Hp = unit2.Hp - damageDealt; - unit.Hp = unit.Hp - damageTaken; + if (unit2.Alive) //if unit 2 is still alive, perform a counter attack + { + Thread.Sleep(750); + attackAnimation(counterAttackDirection, unit2); + int damageTaken = DamageCalculations.finalDamage(unit2, unit, false); + unit.Hp = unit.Hp - damageTaken; + } GameState.attackConfirmOpen = false; setSelectedUnit(null, false); turnState = TurnState.Wait; diff --git a/src/Blaze-Brigade/Blaze_Brigade/Resource1.Designer.cs b/src/Blaze-Brigade/Blaze_Brigade/Resource1.Designer.cs index 1b5b60f..b9f0fd3 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/Resource1.Designer.cs +++ b/src/Blaze-Brigade/Blaze_Brigade/Resource1.Designer.cs @@ -300,6 +300,16 @@ namespace Blaze_Brigade { } } + /// <summary> + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// </summary> + internal static System.Drawing.Bitmap main_menu_button { + get { + object obj = ResourceManager.GetObject("main_menu_button", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// <summary> /// Looks up a localized resource of type System.Drawing.Bitmap. /// </summary> diff --git a/src/Blaze-Brigade/Blaze_Brigade/Resource1.resx b/src/Blaze-Brigade/Blaze_Brigade/Resource1.resx index ff76eb1..3915e92 100644 --- a/src/Blaze-Brigade/Blaze_Brigade/Resource1.resx +++ b/src/Blaze-Brigade/Blaze_Brigade/Resource1.resx @@ -211,4 +211,7 @@ <data name="_2warrior_stats" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>Resources\2warrior_stats.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> + <data name="main_menu_button" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>Resources\main_menu_button.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> + </data> </root> \ No newline at end of file diff --git a/src/Blaze-Brigade/Blaze_Brigade/Resources/main_menu_button.png b/src/Blaze-Brigade/Blaze_Brigade/Resources/main_menu_button.png new file mode 100644 index 0000000000000000000000000000000000000000..e86011d4f28cf8b4285a8d291f24f06e1024431f GIT binary patch literal 3288 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 literal 0 HcmV?d00001 diff --git a/src/Blaze-Brigade/Blaze_BrigadeContent/Blaze_BrigadeContent.contentproj b/src/Blaze-Brigade/Blaze_BrigadeContent/Blaze_BrigadeContent.contentproj index 8a09698..cc639a3 100644 --- a/src/Blaze-Brigade/Blaze_BrigadeContent/Blaze_BrigadeContent.contentproj +++ b/src/Blaze-Brigade/Blaze_BrigadeContent/Blaze_BrigadeContent.contentproj @@ -268,6 +268,13 @@ <Processor>FontDescriptionProcessor</Processor> </Compile> </ItemGroup> + <ItemGroup> + <Compile Include="main_menu_button.png"> + <Name>main_menu_button</Name> + <Importer>TextureImporter</Importer> + <Processor>TextureProcessor</Processor> + </Compile> + </ItemGroup> <Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\$(XnaFrameworkVersion)\Microsoft.Xna.GameStudio.ContentPipeline.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. diff --git a/src/Blaze-Brigade/Blaze_BrigadeContent/main_menu_button.png b/src/Blaze-Brigade/Blaze_BrigadeContent/main_menu_button.png new file mode 100644 index 0000000000000000000000000000000000000000..e86011d4f28cf8b4285a8d291f24f06e1024431f GIT binary patch literal 3288 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 literal 0 HcmV?d00001 -- GitLab