//Function to handle Attack public static void Attack(float elapsedTime) { if (elapsedShotTime > timeUntilShot) { ProjectilesManager.ShootBossProjectile(isFacingLeft ? bossPoint : (bossPoint - new Vector2(bossWidth - 5, 0)), projectileInitialVelocity * (isFacingLeft ? new Vector2(1, 1) : new Vector2(-1, 1))); elapsedShotTime = 0; SoundEffects.MidbossAttack.Play(); bossState = BossState.idle; } else { elapsedShotTime += elapsedTime; } }
//Function to handle Attack public void Attack(float elapsedTime) { CheckCollisions(); moving = false; if (Enemy2CollisionRect.X + 5 < Player.CollisionRectangle.X) { isFacingLeft = false; } else { isFacingLeft = true; } //If the player goes outside the given range, //The state will be changed acccordingly //Else, the Projectile attack will be delivered if (Math.Abs(currentPoint.X - Player.CollisionRectangle.X) < meleeDistance && Math.Abs(currentPoint.Y - Player.CollisionRectangle.Y) < 5) { enemyState = EnemyState.melee; } else if (Math.Abs(currentPoint.X - Player.CollisionRectangle.X) >= shootDistance) { enemyState = EnemyState.idle; } else { if (elapsedShotTime > timeUntilShot) { SoundEffects.Enemy2Attack.Play(); ProjectilesManager.ShootEnemyProjectile(currentPoint, projectileInitialVelocity * (isFacingLeft ? new Vector2(-1, 1) : new Vector2(1, 1))); elapsedShotTime = 0; } else { elapsedShotTime += elapsedTime; } } }
//check input for shooting static void CheckAttackInput(float elapsedTime) { if (elapsedShotTime > timeBetweenShots) { //Space to Shoot / Controller - X to Shoot if (((Game1.currentKeyboard.IsKeyDown(Keys.Space) && !Game1.previousKeyboard.IsKeyDown(Keys.Space)) || (Game1.currentGamePad.Buttons.X == ButtonState.Pressed && Game1.previousGamePad.Buttons.X == ButtonState.Released)) && !isOnTheWall) { ProjectilesManager.ShootPlayerProjectile(isFacingRight ? (position + new Vector2(width, 0)) : position, ProjectileInitialVelocity); elapsedShotTime = 0; SoundEffects.PlayerAttack.Play(); if (currentAnimation != AnimationTypes.die) { currentAnimation = AnimationTypes.attack; } } } else { elapsedShotTime += elapsedTime; } }
public static void Draw(SpriteBatch spriteBatch) { AnimatedSpritesManager.animatedSpritesRoomManagers[(int)currentRoom].DrawOnTheBack(spriteBatch); TorchManager.Draw(spriteBatch); PlatformsManager.platformsRoomManagers[(int)currentRoom].Draw(spriteBatch); if (currentRoom == Rooms.finalBoss) { FinalBoss.Draw(spriteBatch); } else if (currentRoom == Rooms.midBoss) { MidBoss.Draw(spriteBatch); } EnemyManager.enemyRoomManagers[(int)currentRoom].Draw(spriteBatch); CollectablesManager.collectablesRoomManagers[(int)currentRoom].Draw(spriteBatch); ProjectilesManager.Draw(spriteBatch); Player.Draw(spriteBatch); MapsManager.maps[(int)currentRoom].Draw(spriteBatch); DoorsManager.doorsRoomManagers[(int)currentRoom].Draw(spriteBatch); AnimatedSpritesManager.animatedSpritesRoomManagers[(int)currentRoom].DrawInFront(spriteBatch); FireBallsManager.Draw(spriteBatch); LavaGeyserManager.Draw(spriteBatch); MonologuesManager.monologuesRoomManagers[(int)currentRoom].Draw(spriteBatch); }
//state machine managing the movement between rooms static bool switchRoom() { switch (currentRoom) { case Rooms.tutorial0: if (Player.position.X > MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to tutorial1 currentRoom = Rooms.tutorial1; previousRoom = Rooms.tutorial0; CameraManager.SwitchCamera(Rooms.tutorial1); Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to tutorial4 currentRoom = Rooms.tutorial4; previousRoom = Rooms.tutorial0; CameraManager.SwitchCamera(Rooms.tutorial4); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.tutorial1: if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to tutorial2 currentRoom = Rooms.tutorial2; previousRoom = Rooms.tutorial1; CameraManager.SwitchCamera(Rooms.tutorial2); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X + Player.width < 0) {//move to tutorial0 currentRoom = Rooms.tutorial0; previousRoom = Rooms.tutorial1; CameraManager.SwitchCamera(Rooms.tutorial0); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X > MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to tutorial3 currentRoom = Rooms.tutorial3; previousRoom = Rooms.tutorial1; CameraManager.SwitchCamera(Rooms.tutorial3); Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.tutorial2: if (Player.position.Y+Player.height<0) { if (Player.position.X>= MapsManager.maps[(int)Rooms.tutorial1].RoomWidthtPx) {//move to tutorial3 currentRoom = Rooms.tutorial3; previousRoom = Rooms.tutorial2; CameraManager.SwitchCamera(Rooms.tutorial3); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx-Player.height; Player.position.X -= MapsManager.maps[(int)Rooms.tutorial1].RoomWidthtPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else {//move to tutorial1 currentRoom = Rooms.tutorial1; previousRoom = Rooms.tutorial2; CameraManager.SwitchCamera(Rooms.tutorial1); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } } else if (Player.position.X+Player.width<0) {//moveto tutorial4 currentRoom = Rooms.tutorial4; previousRoom = Rooms.tutorial2; CameraManager.SwitchCamera(Rooms.tutorial4); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.tutorial3: if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to tutorial2 currentRoom = Rooms.tutorial2; previousRoom = Rooms.tutorial3; CameraManager.SwitchCamera(Rooms.tutorial2); Player.position.X += MapsManager.maps[(int)Rooms.tutorial1].RoomWidthtPx; Player.position.Y = -10; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X<0) {//move to tutorial1 currentRoom = Rooms.tutorial1; previousRoom = Rooms.tutorial3; CameraManager.SwitchCamera(Rooms.tutorial1); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx-Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X> MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to churchBellTower0 currentRoom = Rooms.churchBellTower0; previousRoom = Rooms.tutorial3; CameraManager.SwitchCamera(Rooms.churchBellTower0); Player.position.X = 0; Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx- MapsManager.maps[(int)Rooms.tutorial3].RoomHeightPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.tutorial4: if (Player.position.X > MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to tutorial2 currentRoom = Rooms.tutorial2; previousRoom = Rooms.tutorial4; CameraManager.SwitchCamera(Rooms.tutorial2); Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y+Player.height<0) {//move to tutorial0 currentRoom = Rooms.tutorial0; previousRoom = Rooms.tutorial4; CameraManager.SwitchCamera(Rooms.tutorial0); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx-Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to escape2 currentRoom = Rooms.escape2; previousRoom = Rooms.tutorial4; CameraManager.SwitchCamera(Rooms.escape2); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.churchBellTower0: if (Player.position.X+Player.width<0) {//move to tutorial3 currentRoom = Rooms.tutorial3; previousRoom = Rooms.churchBellTower0; CameraManager.SwitchCamera(Rooms.tutorial3); Player.position.X= MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx - MapsManager.maps[(int)Rooms.churchBellTower0].RoomHeightPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y+Player.height<0) {//move up to churchBellTower1 currentRoom = Rooms.churchBellTower1; previousRoom = Rooms.churchBellTower0; CameraManager.SwitchCamera(Rooms.churchBellTower1); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X> MapsManager.maps[(int)currentRoom].RoomWidthtPx) { if (Player.position.Y> 496) {//move to churchGroundFloor0 currentRoom = Rooms.churchGroundFloor0; previousRoom = Rooms.churchBellTower0; CameraManager.SwitchCamera(Rooms.churchGroundFloor0); Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx - MapsManager.maps[(int)Rooms.churchBellTower0].RoomHeightPx; Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y>248) {//church1stFloor0 currentRoom = Rooms.church1stFloor0; previousRoom = Rooms.churchBellTower0; CameraManager.SwitchCamera(Rooms.church1stFloor0); Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx + MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomHeightPx - MapsManager.maps[(int)Rooms.churchBellTower0].RoomHeightPx; Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else {//church2ndFloor0 currentRoom = Rooms.church2ndFloor0; previousRoom = Rooms.churchBellTower0; CameraManager.SwitchCamera(Rooms.church2ndFloor0); Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx + MapsManager.maps[(int)Rooms.church1stFloor0].RoomHeightPx + MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomHeightPx - MapsManager.maps[(int)Rooms.churchBellTower0].RoomHeightPx; Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } } break; case Rooms.churchBellTower1: if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move down to chirchBellTower0 currentRoom = Rooms.churchBellTower0; previousRoom = Rooms.churchBellTower1; CameraManager.SwitchCamera(Rooms.churchBellTower0); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y + Player.height < 0) {//move up to chirchBellTower2 currentRoom = Rooms.churchBellTower2; previousRoom = Rooms.churchBellTower1; CameraManager.SwitchCamera(Rooms.churchBellTower2); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.churchBellTower2: if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move down to chirchBellTower1 currentRoom = Rooms.churchBellTower1; previousRoom = Rooms.churchBellTower2; CameraManager.SwitchCamera(Rooms.churchBellTower1); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y + Player.height < 0) {//move up to midBoss currentRoom = Rooms.midBoss; previousRoom = Rooms.churchBellTower2; CameraManager.SwitchCamera(Rooms.midBoss); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.midBoss: if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move down to chirchBellTower1 currentRoom = Rooms.churchBellTower2; previousRoom = Rooms.midBoss; CameraManager.SwitchCamera(Rooms.churchBellTower2); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.churchGroundFloor0: if (Player.position.X+Player.width<0) {//move to churchBellTower0 currentRoom = Rooms.churchBellTower0; previousRoom = Rooms.churchGroundFloor0; CameraManager.SwitchCamera(Rooms.churchBellTower0); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx - MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomHeightPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X> MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to churchAltarRoom currentRoom = Rooms.churchAltarRoom; previousRoom = Rooms.churchGroundFloor0; CameraManager.SwitchCamera(Rooms.churchAltarRoom); Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.churchAltarRoom: if (Player.position.X+Player.width<0) {//move to churchGroundFloor0 currentRoom = Rooms.churchGroundFloor0; previousRoom = Rooms.churchAltarRoom; CameraManager.SwitchCamera(Rooms.churchGroundFloor0); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y+Player.height<0) {//move to church1stFloor0 currentRoom = Rooms.church1stFloor0; previousRoom = Rooms.churchAltarRoom; CameraManager.SwitchCamera(Rooms.church1stFloor0); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; Player.position.X += MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomWidthtPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to descent currentRoom = Rooms.descent; previousRoom = Rooms.churchAltarRoom; CameraManager.SwitchCamera(Rooms.descent); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.church1stFloor0: if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to churchAltarRoom currentRoom = Rooms.churchAltarRoom; previousRoom = Rooms.church1stFloor0; CameraManager.SwitchCamera(Rooms.churchAltarRoom); Player.position.Y = 0; Player.position.X -= MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomWidthtPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y +Player.height <0) {//move to church2ndFloor0 currentRoom = Rooms.church2ndFloor0; previousRoom = Rooms.church1stFloor0; CameraManager.SwitchCamera(Rooms.church2ndFloor0); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X+Player.width<0) {//move to churchBellTower0 currentRoom = Rooms.churchBellTower0; previousRoom = Rooms.church1stFloor0; CameraManager.SwitchCamera(Rooms.churchBellTower0); Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx - MapsManager.maps[(int)Rooms.church1stFloor0].RoomHeightPx - MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomHeightPx; Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx-Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.church2ndFloor0: if (Player.position.X+Player.width<0) {//move to churchBellTower0 currentRoom = Rooms.churchBellTower0; previousRoom = Rooms.church2ndFloor0; CameraManager.SwitchCamera(Rooms.churchBellTower0); Player.position.Y += MapsManager.maps[(int)currentRoom].RoomHeightPx - MapsManager.maps[(int)Rooms.church1stFloor0].RoomHeightPx - MapsManager.maps[(int)Rooms.churchGroundFloor0].RoomHeightPx -MapsManager.maps[(int)Rooms.church2ndFloor0].RoomHeightPx; Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to church1stFloor0 currentRoom = Rooms.church1stFloor0; previousRoom = Rooms.church2ndFloor0; CameraManager.SwitchCamera(Rooms.church1stFloor0); Player.position.Y = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.descent: if (Player.position.Y+Player.height<0) {//move to churchAltarRoom currentRoom = Rooms.churchAltarRoom; previousRoom = Rooms.descent; CameraManager.SwitchCamera(Rooms.churchAltarRoom); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx-Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) {//move to finalBoss currentRoom = Rooms.finalBoss; previousRoom = Rooms.descent; Game1.Zoom0Dot5(); CameraManager.SwitchCamera(Rooms.finalBoss); Player.position.Y = 0; Player.position.X += MapsManager.maps[(int)currentRoom].RoomWidthtPx - MapsManager.maps[(int)Rooms.descent].RoomWidthtPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } break; case Rooms.finalBoss: if (Player.position.X+Player.width<0) {//move to escape0 currentRoom = Rooms.escape0; previousRoom = Rooms.finalBoss; Game1.Zoom1(); CameraManager.SwitchCamera(Rooms.escape0); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx-Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if(Player.position.Y+Player.height<0) {//move to descent currentRoom = Rooms.descent; previousRoom = Rooms.finalBoss; Game1.Zoom1(); CameraManager.SwitchCamera(Rooms.descent); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx - Player.height; Player.position.X += MapsManager.maps[(int)currentRoom].RoomWidthtPx - MapsManager.maps[(int)Rooms.finalBoss].RoomWidthtPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y> MapsManager.maps[(int)currentRoom].RoomHeightPx) { Player.takeDamage(Player.maxHealthPoints, true); } break; case Rooms.escape0: if (Player.position.X > MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to finalBoss currentRoom = Rooms.finalBoss; previousRoom = Rooms.escape0; Game1.Zoom0Dot5(); CameraManager.SwitchCamera(Rooms.finalBoss); Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X + Player.width<0) {//move to escape1 currentRoom = Rooms.escape1; previousRoom = Rooms.escape0; CameraManager.SwitchCamera(Rooms.escape1); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; Player.position.Y += MapsManager.maps[(int)Rooms.descent].RoomHeightPx - MapsManager.maps[(int)Rooms.tutorial2].RoomHeightPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx + 24) { Player.takeDamage(Player.maxHealthPoints, true); } break; case Rooms.escape1: if (Player.position.X> MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to escape0 currentRoom = Rooms.escape0; previousRoom = Rooms.escape1; CameraManager.SwitchCamera(Rooms.escape0); Player.position.X = 0; Player.position.Y-= MapsManager.maps[(int)Rooms.descent].RoomHeightPx - MapsManager.maps[(int)Rooms.tutorial2].RoomHeightPx; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.X+Player.width<0) {//move to escape2 currentRoom = Rooms.escape2; previousRoom = Rooms.escape1; CameraManager.SwitchCamera(Rooms.escape2); Player.position.X = MapsManager.maps[(int)currentRoom].RoomWidthtPx - Player.width; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx + 24) { Player.takeDamage(Player.maxHealthPoints, true); } break; case Rooms.escape2: if (Player.position.X> MapsManager.maps[(int)currentRoom].RoomWidthtPx) {//move to escape1 currentRoom = Rooms.escape1; previousRoom = Rooms.escape2; CameraManager.SwitchCamera(Rooms.escape1); Player.position.X = 0; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if(Player.position.Y+Player.height<0) {//move to tutorial4 currentRoom = Rooms.tutorial4; previousRoom = Rooms.escape2; CameraManager.SwitchCamera(Rooms.tutorial4); Player.position.Y = MapsManager.maps[(int)currentRoom].RoomHeightPx-Player.height; FireBallsManager.Reset(); LavaGeyserManager.Reset(); ProjectilesManager.Reset(); return true; } else if (Player.position.Y > MapsManager.maps[(int)currentRoom].RoomHeightPx + 24) { Player.takeDamage(Player.maxHealthPoints, true); } break; } return false; }
/// <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 (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } currentKeyboard = Keyboard.GetState(); currentGamePad = GamePad.GetState(PlayerIndex.One); currentMouseState = Mouse.GetState(); float elapsedTime = (float)gameTime.ElapsedGameTime.TotalSeconds; //update logic here #if LEVEL_EDITOR levelEditor.Update(currentMouseState, previousMouseState, tilesPerRow, infoBoxHeightPx); CameraManager.Update(elapsedTime); PlatformsManager.platformsRoomManagers[levelEditor.currentRoomNumber].Update(elapsedTime); #else //update only relevant classes depending on the state of the game switch (currentGameState) { case GameStates.titleScreen: if (!gameInitialized) { LoadContent(); } MenusManager.menus[(int)MenusManager.MenuType.titleScreen].Update(); break; case GameStates.loadGame: if (LoadSaveManager.LoadGame()) { currentGameState = GameStates.playing; } else { currentGameState = GameStates.titleScreen; } break; case GameStates.controls: MenusManager.menus[(int)MenusManager.MenuType.controls].Update(); break; case GameStates.achievements: MenusManager.menus[(int)MenusManager.MenuType.achievements].Update(); break; case GameStates.credits: MenusManager.menus[(int)MenusManager.MenuType.credits].Update(); break; case GameStates.intro: if (CutscenesManager.cutscenes[(int)CutscenesManager.CutsceneType.intro].active) { CutscenesManager.cutscenes[(int)CutscenesManager.CutsceneType.intro].Update(elapsedTime); } else { currentGameState = GameStates.playing; } break; case GameStates.playing: GameStats.Update(elapsedTime); if ((currentKeyboard.IsKeyDown(Keys.P) && !previousKeyboard.IsKeyDown(Keys.P)) || (currentKeyboard.IsKeyDown(Keys.M) && !previousKeyboard.IsKeyDown(Keys.M)) || (currentGamePad.Buttons.Start == ButtonState.Pressed && previousGamePad.Buttons.Start == ButtonState.Released)) { currentGameState = GameStates.pause; break; } RoomsManager.Update(elapsedTime); Player.Update(elapsedTime); ProjectilesManager.Update(elapsedTime); GameEvents.Update(elapsedTime); Collisions.Update(elapsedTime); CollectablesManager.Update(elapsedTime); break; case GameStates.pause: if ((currentKeyboard.IsKeyDown(Keys.P) && !previousKeyboard.IsKeyDown(Keys.P)) || (currentKeyboard.IsKeyDown(Keys.M) && !previousKeyboard.IsKeyDown(Keys.M)) || (currentGamePad.Buttons.Start == ButtonState.Pressed && previousGamePad.Buttons.Start == ButtonState.Released)) { MenusManager.menus[(int)MenusManager.MenuType.pause].Reset(); currentGameState = GameStates.playing; break; } MenusManager.menus[(int)MenusManager.MenuType.pause].Update(); break; case GameStates.confirmQuit: MenusManager.menus[(int)MenusManager.MenuType.confirmQuit].Update(); if (currentGameState == GameStates.titleScreen) { gameInitialized = false; } break; case GameStates.dead: GameStats.Update(elapsedTime); PlayerDeathManager.Update(elapsedTime); break; case GameStates.ending: if (!CutscenesManager.cutscenes[(int)CutscenesManager.CutsceneType.ending].active) { LoadSaveManager.SaveHighScores(new AchievementsSaveData (true, (GameStats.deathsCount == 0) || Achievements.noDeath, (GameStats.hitsCount == 0) || Achievements.noHits, ((GameStats.gameTime < Achievements.bestTime) || (Achievements.bestTime == 0)) ? GameStats.gameTime : Achievements.bestTime ));; LoadSaveManager.DeleteSaveFile(); currentGameState = GameStates.achievements; gameInitialized = false; } CutscenesManager.cutscenes[(int)CutscenesManager.CutsceneType.ending].Update(elapsedTime); break; case GameStates.quit: Exit(); break; case GameStates.doubleJump: MenusManager.menus[(int)MenusManager.MenuType.doubleJump].Update(); break; case GameStates.wallJump: MenusManager.menus[(int)MenusManager.MenuType.wallJump].Update(); break; } #endif previousKeyboard = currentKeyboard; previousGamePad = currentGamePad; previousMouseState = currentMouseState; base.Update(gameTime); }
/// <summary> /// LoadContent will be called once per game and is the place to load /// all of your content. /// </summary> protected override void LoadContent() { // Create a new SpriteBatch, which can be used to draw textures. spriteBatch = new SpriteBatch(GraphicsDevice); #if LEVEL_EDITOR MapsManager.Inizialize(Content.Load <Texture2D>("tiles")); CameraManager.Inizialize ( new Texture2D[(int)RoomsManager.Rooms.total] { Content.Load <Texture2D>(@"backgrounds\tutorial0"), Content.Load <Texture2D>(@"backgrounds\tutorial1"), Content.Load <Texture2D>(@"backgrounds\tutorial2"), Content.Load <Texture2D>(@"backgrounds\tutorial3"), Content.Load <Texture2D>(@"backgrounds\tutorial4"), Content.Load <Texture2D>(@"backgrounds\bellTower0"), Content.Load <Texture2D>(@"backgrounds\bellTower1"), Content.Load <Texture2D>(@"backgrounds\bellTower2"), Content.Load <Texture2D>(@"backgrounds\midBoss"), Content.Load <Texture2D>(@"backgrounds\groundFloor"), Content.Load <Texture2D>(@"backgrounds\altarRoom"), Content.Load <Texture2D>(@"backgrounds\firstFloor"), Content.Load <Texture2D>(@"backgrounds\secondFloor"), Content.Load <Texture2D>(@"backgrounds\descent"), Content.Load <Texture2D>(@"backgrounds\finalBoss"), Content.Load <Texture2D>(@"backgrounds\escape0"), Content.Load <Texture2D>(@"backgrounds\escape1"), Content.Load <Texture2D>(@"backgrounds\escape2"), } ); spriteFont = Content.Load <SpriteFont>(@"fonts\monologue"); PlatformsManager.Inizialize(Content.Load <Texture2D>("platforms")); levelEditor = new LevelEditor(Content.Load <SpriteFont>(@"fonts\arial32"), Content.Load <SpriteFont>(@"fonts\arial14"), Content.Load <Texture2D>("whiteTile")); #else //load the game assets here currentGameState = GameStates.titleScreen; LoadSaveManager.Inizialize(); GameStats.Inizialize(); Achievements.Initialize(Content.Load <SpriteFont>(@"fonts\monologue"), Content.Load <SpriteFont>(@"fonts\LiberationMono12")); MapsManager.Inizialize(Content.Load <Texture2D>("tiles")); CameraManager.Inizialize ( new Texture2D[(int)RoomsManager.Rooms.total] { Content.Load <Texture2D>(@"backgrounds\tutorial0"), Content.Load <Texture2D>(@"backgrounds\tutorial1"), Content.Load <Texture2D>(@"backgrounds\tutorial2"), Content.Load <Texture2D>(@"backgrounds\tutorial3"), Content.Load <Texture2D>(@"backgrounds\tutorial4"), Content.Load <Texture2D>(@"backgrounds\bellTower0"), Content.Load <Texture2D>(@"backgrounds\bellTower1"), Content.Load <Texture2D>(@"backgrounds\bellTower2"), Content.Load <Texture2D>(@"backgrounds\midBoss"), Content.Load <Texture2D>(@"backgrounds\groundFloor"), Content.Load <Texture2D>(@"backgrounds\altarRoom"), Content.Load <Texture2D>(@"backgrounds\firstFloor"), Content.Load <Texture2D>(@"backgrounds\secondFloor"), Content.Load <Texture2D>(@"backgrounds\descent"), Content.Load <Texture2D>(@"backgrounds\finalBoss"), Content.Load <Texture2D>(@"backgrounds\escape0"), Content.Load <Texture2D>(@"backgrounds\escape1"), Content.Load <Texture2D>(@"backgrounds\escape2"), } ); PlatformsManager.Inizialize(Content.Load <Texture2D>("platforms")); ProjectilesManager.Inizialize(Content.Load <Texture2D>("animatedSprites")); Player.Inizialize(Content.Load <Texture2D>(@"characters\player"), new Vector2(16, 185)); RoomsManager.Inizialize(); GameEvents.Inizialize(); FireBallsManager.Inizialize(Content.Load <Texture2D>("animatedSprites")); LavaGeyserManager.Inizialize(Content.Load <Texture2D>("animatedSprites")); EnemyManager.Initialise(Content.Load <Texture2D>(@"characters\enemy1"), Content.Load <Texture2D>(@"characters\enemy2")); MidBoss.Initialise(Content.Load <Texture2D>(@"characters\midboss")); FinalBoss.Inizialize(Content.Load <Texture2D>(@"characters\finalBoss"), new Texture2D[] { Content.Load <Texture2D>(@"characters\stoneWing"), Content.Load <Texture2D>(@"characters\healthyWing"), Content.Load <Texture2D>(@"characters\damagedWing"), Content.Load <Texture2D>(@"characters\deadWing") }); CollectablesManager.Inizialize(Content.Load <Texture2D>("animatedSprites")); MonologuesManager.Inizialize(Content.Load <Texture2D>("animatedSprites"), Content.Load <SpriteFont>(@"fonts\monologue")); DoorsManager.Inizialize(Content.Load <Texture2D>("animatedSprites")); AnimatedSpritesManager.Inizialize(Content.Load <Texture2D>("animatedSprites")); TorchManager.Initialize(Content.Load <Texture2D>("firePot")); PlayerDeathManager.Initialize(Content.Load <Texture2D>(@"menus\deathScreen"), Content.Load <Texture2D>(@"menus\menuOptions")); MenusManager.Initialize(Content.Load <Texture2D>(@"menus\menuOptions"), new Texture2D[] { Content.Load <Texture2D>(@"menus\titleScreen"), Content.Load <Texture2D>(@"menus\controls"), Content.Load <Texture2D>(@"menus\credits"), Content.Load <Texture2D>(@"menus\pause"), Content.Load <Texture2D>(@"menus\quit"), Content.Load <Texture2D>(@"menus\doubleJump"), Content.Load <Texture2D>(@"menus\wallJump"), Content.Load <Texture2D>(@"menus\achievements"), }); CutscenesManager.Initialize(Content.Load <Texture2D>(@"characters\enemy1"), Content.Load <Texture2D>(@"characters\player"), Content.Load <SpriteFont>(@"fonts\monologue")); SoundEffects.Initialise ( //Player Sound Effects Content.Load <SoundEffect>(@"sounds\pJump"), Content.Load <SoundEffect>(@"sounds\pShoot"), Content.Load <SoundEffect>(@"sounds\pHurt"), Content.Load <SoundEffect>(@"sounds\pickup"), //Enemy Sound Effects Content.Load <SoundEffect>(@"sounds\enemyAttack"), Content.Load <SoundEffect>(@"sounds\enemyHurt"), Content.Load <SoundEffect>(@"sounds\e2Attack"), //Midboss Sound Effects Content.Load <SoundEffect>(@"sounds\midMove"), Content.Load <SoundEffect>(@"sounds\midAttack"), Content.Load <SoundEffect>(@"sounds\midHurt"), Content.Load <SoundEffect>(@"sounds\finAttack"), Content.Load <SoundEffect>(@"sounds\finHurt"), Content.Load <SoundEffect>(@"sounds\finAwaken"), Content.Load <SoundEffect>(@"sounds\finRecover"), Content.Load <Song>(@"sounds\finalBossMusic") ); gameInitialized = true; Zoom1(); #endif }
public static void ResetVariables() {//reposition the player and reset some classes to their intial state Player.IsOnMovingPlatform = false; elapsedTimeBeforeResuming = 0; Game1.currentGameState = Game1.GameStates.playing; CameraManager.Reset(); LavaGeyserManager.Reset(); FireBallsManager.Reset(); ProjectilesManager.Reset(); EnemyManager.Reset(); if (!MidBoss.Dead) { MidBoss.Reset(); } CollectablesManager.ResetHearts(); GameEvents.Reset(); switch (RoomsManager.CurrentRoom) { case RoomsManager.Rooms.tutorial0: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.tutorial4) { Player.position = new Vector2(152, 192); } else if (RoomsManager.PreviousRoom == RoomsManager.Rooms.tutorial1) { Player.position = new Vector2(903, 185); } else { Player.position = new Vector2(152, 150); } break; case RoomsManager.Rooms.tutorial1: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.tutorial0) { Player.position = new Vector2(18, 185); } else { Player.position = new Vector2(550, 193); } break; case RoomsManager.Rooms.tutorial2: if (Player.position.Y < 80 && RoomsManager.PreviousRoom == RoomsManager.Rooms.tutorial1 && (Player.position.X < 366 || Player.position.X > 426)) { RoomsManager.CurrentRoom = RoomsManager.Rooms.tutorial1; RoomsManager.PreviousRoom = RoomsManager.Rooms.tutorial0; CameraManager.SwitchCamera(RoomsManager.Rooms.tutorial1); Player.position = new Vector2(18, 185); } else { Player.position = new Vector2(388, 153); } break; case RoomsManager.Rooms.tutorial3: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchBellTower0) { Player.position = new Vector2(776, 193); } else { Player.position = new Vector2(91, 193); } break; case RoomsManager.Rooms.tutorial4: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.escape2) { Player.position = new Vector2(64, 153); } else { Player.position = new Vector2(166, 153); } break; case RoomsManager.Rooms.churchBellTower0: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchBellTower1) { if (Player.position.X < 436 && Player.position.X >= 60) { Player.position = new Vector2(405, 161); } else if (Player.position.X >= 436) { Player.position = new Vector2(456, 961); } else { Player.position = new Vector2(23, 961); } } else if (RoomsManager.PreviousRoom == RoomsManager.Rooms.tutorial3) { Player.position = new Vector2(23, 961); } else { Player.position = new Vector2(456, 961); } break; case RoomsManager.Rooms.churchBellTower1: if (Player.position.X >= 436) { Player.position = new Vector2(458, 1097); } else if (Player.position.X < 60) { Player.position = new Vector2(23, 1097); } else { if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchBellTower0) { Player.position = new Vector2(372, 1097); } else { Player.position = new Vector2(111, 121); } } break; case RoomsManager.Rooms.churchBellTower2: if (Player.position.X >= 436 && Player.position.Y > 110) { Player.position = new Vector2(464, 1177); } else if (Player.position.X >= 60) { if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchBellTower1) { Player.position = new Vector2(119, 1177); } else { Player.position = new Vector2(457, 65); } } else { Player.position = new Vector2(23, 1177); } break; case RoomsManager.Rooms.midBoss: Player.position = new Vector2(452, 25); break; case RoomsManager.Rooms.churchGroundFloor0: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchBellTower0) { Player.position = new Vector2(22, 465); } else { Player.position = new Vector2(1160, 465); } break; case RoomsManager.Rooms.churchAltarRoom: if (Player.position.X < 104) { Player.position = new Vector2(22, 465); } else { Player.position = new Vector2(250, 465); } break; case RoomsManager.Rooms.church1stFloor0: if (Player.position.X < 1288) { if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchAltarRoom) { Player.position = new Vector2(1208, 217); } else { Player.position = new Vector2(18, 217); } } else { Player.position = new Vector2(1320, 217); } break; case RoomsManager.Rooms.church2ndFloor0: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchBellTower0) { Player.position = new Vector2(37, 481); } else { Player.position = new Vector2(1289, 481); } break; case RoomsManager.Rooms.descent: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.churchAltarRoom) { Player.position = new Vector2(339, 121); } else { Player.position = new Vector2(318, 233); } break; case RoomsManager.Rooms.finalBoss: Game1.Zoom0Dot5(); MediaPlayer.Stop(); if (!FinalBoss.Dead) { Player.position = new Vector2(734, 41); } else { Player.position = new Vector2(17, 41); } break; case RoomsManager.Rooms.escape0: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.finalBoss) { Player.position = new Vector2(1726, 129); } else { Player.position = new Vector2(18, 49); } break; case RoomsManager.Rooms.escape1: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.escape0) { Player.position = new Vector2(1320, 89); } else { Player.position = new Vector2(12, 289); } break; case RoomsManager.Rooms.escape2: if (RoomsManager.PreviousRoom == RoomsManager.Rooms.escape1) { Player.position = new Vector2(500, 289); } else { Player.position = new Vector2(21, 129); } break; } }