public void SetStageVariables() { CurrentStage.Restart(); notesMissed = 0; piggyBankSpawner.Stop(); if (CurrentStage.HasFlag(Stage.StageFlags.PigsEnabled)) { piggyBankSpawner.Start(); } vacuumSpawner.Stop(); if (CurrentStage.HasFlag(Stage.StageFlags.VacuumsEnabled)) { vacuumSpawner.Interval = CurrentStage.VacuumSpawnTime; vacuumSpawner.Start(); } noteSpawner.Stop(); if (CurrentStage.HasFlag(Stage.StageFlags.NotesEnabled)) { noteSpawner.Interval = CurrentStage.NoteSpawnTime; noteSpawner.Start(); } if (!CurrentStage.HasFlag(Stage.StageFlags.LaserPlayerEnabled)) { laserPlayer.FiringLaser = false; SoundController.StopAllLoops(); } }
public void UpdatePlay(GameTime gameTime) { #region Create objects if (ReadyToSpawnPiggyBank) { SpawnPiggyBank(); ReadyToSpawnPiggyBank = false; } if (ReadyToSpawnVacuum) { SpawnVacuum(); ReadyToSpawnVacuum = false; } if (ReadyToSpawnNote) { SpawnNote(); ReadyToSpawnNote = false; } #endregion #region Update objects if (CurrentStage.HasFlag(Stage.StageFlags.LaserPlayerEnabled)) { laserPlayer.Update(gameTime); laserPlayer.FixedUpdate(); } if (CurrentStage.HasFlag(Stage.StageFlags.PaddlePlayerEnabled)) { paddlePlayer.Update(gameTime); } coinBackgroundController.Update(gameTime); // Update enemies. for (int i = 0; i < enemies.Count; i++) { enemies[i].Update(gameTime); if (enemies[i] is VacuumEnemy) { var vEnemy = enemies[i] as VacuumEnemy; for (int j = notes.Count - 1; j >= 0; j--) { var note = notes[j]; vEnemy.TryCollect(note); } } } for (int i = 0; i < notes.Count; i++) { notes[i].Update(gameTime); } foreach (var c in corpses) { c.Update(gameTime); } foreach (var c in notesOnFire) { c.Update(gameTime); } CurrentStage.Update(gameTime); #endregion #region Remove objects // Remove destroyed enemies. for (int i = 0; i < enemies.Count; i++) { // A "killed" enemy. Show the death sequence. if (enemies[i].IsDead) { AddCoins(enemies[i].CoinsOnDeath); var newCorpse = new EnemyCorpse(enemies[i]); corpses.Add(newCorpse); enemies[i].OnDeath(); DestroyEnemy(enemies[i]); } else if (enemies[i].ReadyToRemove) { if (enemies[i] is VacuumEnemy) { // Only play sound once. if (((VacuumEnemy)enemies[i]).totalNotesHeld > 0) { SoundController.Play(Sound.FireFlare); } for (int j = ((VacuumEnemy)enemies[i]).totalNotesHeld - 1; j >= 0; j--) { var note = ((VacuumEnemy)enemies[i]).NotesHeld[j]; notes.Remove(note); notesMissed++; } } DestroyEnemy(enemies[i]); } } for (int i = corpses.Count - 1; i >= 0; i--) { if (corpses[i].ReadyToRemove) { corpses.RemoveAt(i); } } for (int i = notes.Count - 1; i >= 0; i--) { // Set on fire. No money earnt. if (notes[i].IsDead) { var newOnFire = new NoteOnFire(notes[i]); notesOnFire.Add(newOnFire); if (notes[i].CaughtByVacuum != null) { notes[i].CaughtByVacuum.RemoveNoteFromVacuum(notes[i]); } SoundController.Play(Sound.FireFlare); notes.RemoveAt(i); notesMissed++; } // Otherwise, if caught, give money. else if (CurrentStage.HasFlag(Stage.StageFlags.PaddlePlayerEnabled) && notes[i].InRangeForCatching && !notes[i].CaughtByPlayer && BoxCollisionTest.IntersectAABB(paddlePlayer.CollisionRect, notes[i].CollisionRect)) { notes[i].CaughtByPlayer = true; } // Otherwise, check if ready to remove else if (notes[i].ReadyToRemove) { if (notes[i].CaughtByPlayer) { AddCoins(Note.noteWorths[notes[i].Type]); SoundController.Play(Sound.Ding); } else { notesMissed++; SoundController.Play(Sound.FireFlare); } notes.RemoveAt(i); } } for (int i = notesOnFire.Count - 1; i >= 0; i--) { if (notesOnFire[i].ReadyToRemove) { notesOnFire.RemoveAt(i); } } #endregion // If run out of health, game over. if (CurrentStage.HasFlag(Stage.StageFlags.NotesEnabled) && notesMissed >= CurrentStage.MaxNotesMissed) { SetState(GameState.GameOver); } // Move on to the next stage. if (CurrentState == GameState.Playing && CurrentStage.IsComplete()) { ToNextStage(); } if (Control.Return.IsJustPressed) { SetState(GameState.GameOver); } }