/// <summary> /// Allows the game component to update itself. /// </summary> /// <param name="gameTime">Provides a snapshot of timing values.</param> public override void Update(GameTime gameTime) { // TODO: Add your update code here CheckIfGameOver(); pressTimerPrimary -= gameTime.ElapsedGameTime.Milliseconds * 2; pressTimerSecondary -= gameTime.ElapsedGameTime.Milliseconds; pressTimerSpellBrowse -= gameTime.ElapsedGameTime.Milliseconds; drinkPotionTimer -= gameTime.ElapsedGameTime.Milliseconds; GamePadState playerState = GamePad.GetState(player.PlayerIndexSaved); KeyboardState keyboard = Keyboard.GetState(); cameraZoom += playerState.ThumbSticks.Right.Y / 50.0f; if (cameraZoom <= 0.2f) { cameraZoom = 0.2f; } if (cameraZoom >= 1.76f) { cameraZoom = 1.76f; } camera.Position = new Vector3(0 * cameraZoom, 1688.753f * cameraZoom, -2228.385f); // Browse spells to the right if ((playerState.Buttons.RightShoulder == ButtonState.Pressed || keyboard.IsKeyDown(Keys.D)) && pressTimerSpellBrowse < 0) { int ss = (int)spellHandler.SelectedSpellIndex; if (ss < spellHandler.LearnedSpells.Count - 1) { spellHandler.SelectedSpellIndex++; spellHandler.SelectedSpell = spellHandler.LearnedSpells[spellHandler.SelectedSpellIndex]; } pressTimerSpellBrowse = 100; } // Browse spells to the left if ((playerState.Buttons.LeftShoulder == ButtonState.Pressed || keyboard.IsKeyDown(Keys.A)) && pressTimerSpellBrowse < 0) { int ss = (int)spellHandler.SelectedSpellIndex; if (ss > 0) { spellHandler.SelectedSpellIndex--; spellHandler.SelectedSpell = spellHandler.LearnedSpells[spellHandler.SelectedSpellIndex]; } pressTimerSpellBrowse = 100; } // Shoot primary spell if ((playerState.Buttons.X == ButtonState.Pressed || keyboard.IsKeyDown(Keys.LeftControl)) && pressTimerPrimary < 0) { int manaCost = spellHandler.GetManaCost(GameObjects.SpellHandler.Spells.Fireball); if (player.Mana >= manaCost) { pressTimerPrimary = player.CalculateSpellRecharge(); spellHandler.AddSpell(player.Position, GameObjects.SpellHandler.Spells.Fireball, Vector3.Zero); player.Mana -= manaCost; player.PlayAnimation(3); //shootCue = soundBank.GetCue("shoot"); //if (!shootCue.IsPlaying) //{ // shootCue.Play(); //} } } // Shoot secondary spell if ((playerState.Buttons.A == ButtonState.Pressed || keyboard.IsKeyDown(Keys.LeftAlt)) && pressTimerSecondary < 0) { int manaCost = spellHandler.GetManaCost(spellHandler.SelectedSpell); if (player.Mana >= manaCost) { //shootCue = soundBank.GetCue("shoot"); //if (!shootCue.IsPlaying) //{ // shootCue.Play(); //} pressTimerSecondary = player.CalculateSpellRecharge(); if (enemyHandler.EnemiesList.Count > 0) { Random rndEnemyOnScreen = new Random(); if (spellHandler.SelectedSpell == SpellHandler.Spells.MagicMissileX2 || spellHandler.SelectedSpell == SpellHandler.Spells.MagicMissileX4) { spellHandler.AddSpell(player.Position, SpellHandler.Spells.MagicMissile, enemyHandler.EnemiesList[rndEnemyOnScreen.Next(0, enemyHandler.EnemiesList.Count)].Position); } else { spellHandler.AddSpell(player.Position, spellHandler.SelectedSpell, enemyHandler.EnemiesList[rndEnemyOnScreen.Next(0, enemyHandler.EnemiesList.Count)].Position); } // some special rules regarding some spells are defined under here if (spellHandler.SelectedSpell == SpellHandler.Spells.MagicMissileX2) { spellHandler.AddSpell(player.Position, SpellHandler.Spells.MagicMissile, enemyHandler.EnemiesList[rndEnemyOnScreen.Next(0, enemyHandler.EnemiesList.Count)].Position); } if (spellHandler.SelectedSpell == MageDefenderDeluxe.GameObjects.SpellHandler.Spells.MagicMissileX4) { spellHandler.AddSpell(player.Position, SpellHandler.Spells.MagicMissile, enemyHandler.EnemiesList[rndEnemyOnScreen.Next(0, enemyHandler.EnemiesList.Count)].Position); spellHandler.AddSpell(player.Position, SpellHandler.Spells.MagicMissile, enemyHandler.EnemiesList[rndEnemyOnScreen.Next(0, enemyHandler.EnemiesList.Count)].Position); spellHandler.AddSpell(player.Position, SpellHandler.Spells.MagicMissile, enemyHandler.EnemiesList[rndEnemyOnScreen.Next(0, enemyHandler.EnemiesList.Count)].Position); } } else { spellHandler.AddSpell(player.Position, spellHandler.SelectedSpell, new Vector3(player.Position.X, 300, player.Position.Z)); } player.Mana -= manaCost; player.PlayAnimation(3); } } // Drink a health potion if ((playerState.Buttons.B == ButtonState.Pressed || keyboard.IsKeyDown(Keys.W)) && drinkPotionTimer < 0) { if (player.HealthPotions > 0) { drinkPotionTimer = 1000; player.HealthPotions -= 1; player.Health += 50 + (player.Strength * 5); if (player.Health >= player.MaxHealth) { player.Health = player.MaxHealth; } } } // Drink a mana potion if ((playerState.Buttons.Y == ButtonState.Pressed || keyboard.IsKeyDown(Keys.S)) && drinkPotionTimer < 0) { if (player.ManaPotions > 0) { drinkPotionTimer = 1000; player.ManaPotions -= 1; player.Mana += 50 + (player.Constitution * 5); if (player.Mana >= player.MaxMana) { player.Mana = player.MaxMana; } } } enemyHandler.IsCollidingWithSpell(spellHandler); enemyHandler.IsCollidingWithPlayer(player.Position); scenery.Update(gameTime); player.Update(gameTime); castleHandler.Update(gameTime); camera.Update(gameTime); spellHandler.Update(gameTime, playerState.ThumbSticks.Right.X); enemyHandler.Update(gameTime); // Set proj and view matrix on particles fireBallParticles.SetCamera(camera.ViewMatrix, camera.ProjectionMatrix); slowEnemyParticles.SetCamera(camera.ViewMatrix, camera.ProjectionMatrix); poisonEnemyParticles.SetCamera(camera.ViewMatrix, camera.ProjectionMatrix); magicMissilePartilces.SetCamera(camera.ViewMatrix, camera.ProjectionMatrix); dirtPartilces.SetCamera(camera.ViewMatrix, camera.ProjectionMatrix); if (player.Position.X < -1200) { for (int i = 0; i < 2; i++) { magicMissilePartilces.AddParticle(new Vector3(player.Position.X * 0.008f, player.Position.Y * 0.008f, player.Position.Z * 0.008f), Vector3.Zero); } } else { for (int i = 0; i < 1; i++) { dirtPartilces.AddParticle(new Vector3(player.Position.X * 0.008f, player.Position.Y * 0.008f, player.Position.Z * 0.008f), Vector3.Zero); } } // Update particles poisonEnemyParticles.Update(gameTime); slowEnemyParticles.Update(gameTime); fireBallParticles.Update(gameTime); magicMissilePartilces.Update(gameTime); dirtPartilces.Update(gameTime); if (enemyHandler.AllEnemiesDead && enemyHandler.WaveFinishedTimer < 0) { // Hardcode some storymode // If the level you completed was 6, go to undead mode if (castleHandler.Castle.Level == 6) { castleHandler.Castle.StoryStage = 2; NextState = (int)MageDefenderStates.Story; } // If the level you completed was 12, go to XXX mode else if (castleHandler.Castle.Level == 12) { NextState = (int)MageDefenderStates.Story; } else { NextState = (int)MageDefenderStates.Shop; } ChangeState = true; PrepareNextLevel(); } base.Update(gameTime); }