public void Update(GameTime gameTime, Player player, Camera camera) { ChangeState(player); if (currentStage == Stage.Introduction) { introduction.Update(gameTime); return; } if (currentStage == Stage.MainStage) { ManageItems(gameTime, player); ManageEntitiesCollision(player); ManageNpc(gameTime, player); return; } if (currentStage == Stage.BossFight) { ManageEntitiesCollision(player); boss.Update(gameTime, player); foreach (CollisionTiles tile in collisionTiles) { boss.ManageMapCollision(tile.rect1, width, height); } } if (currentStage == Stage.Finished) { } }
/// <summary> /// Updates all objects in the world, performs collision between them, /// and handles the time limit with scoring. /// </summary> public void Update(GameTime gameTime) { // Pause while the player is dead if (Player.Health <= 0) { // Still want to perform physics on the player. Hud.Update(gameTime); PlayerDied(); Player.Lives--; if (Player.Lives <= 0) { Player.Alive = false; Statics.Gameover = true; MediaPlayer.Stop(); } else { Statics.Realm = Enums.Realm.WorldMap; int temp = 0; if (Statics.WorldPlayer.Direction == Enums.Direction.East) { temp = -100; } else { temp = 100; } Statics.WorldPlayer.Position = new Vector2(Statics.WorldPlayer.Position.X + temp, Statics.WorldPlayer.Position.Y); } } else { Player.Update(gameTime); TileEngine.UpdateHealthPotions(gameTime, Player); UpdateMovableTiles(gameTime); Hud.Update(gameTime); if (Boss != null) { Boss.Update(gameTime); Statics.Collision.PlayerAndEnemy(Player, Boss, gameTime); } UpdateEnemies(gameTime); // The player has reached the exit if they are standing on the ground and // his bounding rectangle contains the center of the exit tile. if (Player.Health > 0 && Player.IsOnGround && Player.BoundingRectangle.Contains(TileEngine.exit) || Player.BoundingRectangle.Contains(TileEngine.exit2)) { OnExitReached(); } } }
internal State EnableBossMode(Boss boss, bool bossHasInstance, GameDatabase db, State gameState, GameTime gameTime) { State state = gameState; boss = Boss.Instance; bossHasInstance = true; if (bossHasInstance) { CollisionHandler.CheckBossBulletsCollisions(db.Bullets.GetAll(), db.Players.GetAll()); CollisionHandler.CheckPlayerBulletsCollisions(new List <IGameObject>() { boss }, db.Bullets.GetAll(), db.Players.GetAll(), db.Explosions.GetAll()); BulletsFactory.BossShoot(db.Bullets, boss); boss.Update(gameTime); if (!boss.IsVisible) { state = State.Winning; } } return(state); }
private void UpdateBoss(GameTime gameTime) { boss.Update(gameTime, tickCount, gameMap.ScrollRows); var playerIsWithinBossShootingRange = gameMap.ScrollRows <= GameSettings.Instance.WindowTilesSize.Y / 2; if (playerIsWithinBossShootingRange && boss.State == CharacterState.Alive && boss.Reloaded) { ShootNewBossBullet(); } }
public void Update(GameTime gameTime) { if (!EndGame() || (GameIsFinished() || TransitioningToEndGame())) { MoverManager.Update(); } if (!_ready) { return; } _cameraZoomTimer.Update(gameTime); _explosionTimer.Update(gameTime); if (_boss != null && (!EndGame() || (GameIsFinished() || TransitioningToEndGame()))) { _boss.Update(gameTime); } if (!EndGame() || (GameIsFinished() || TransitioningToEndGame())) { foreach (var bullet in _bullets) { bullet.Update(gameTime); } _bullets.RemoveAll(b => !b.Used); foreach (var laser in _lasers) { laser.Update(gameTime); } ParticleManager.Update(gameTime); } if (GameIsFinished()) { return; } _playTime += gameTime.ElapsedGameTime; if (_boss != null && _boss.IsReady() && !EndGame()) { _timer += gameTime.ElapsedGameTime; } CollisionWorld.Update(gameTime); _player.Update(gameTime); }
protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } KeyboardState pauseButton = Keyboard.GetState(); if (pauseButton.IsKeyDown(Keys.P)) { _pauseGame = false; } CheckLivingEntityCollision(_player); if (!_pauseGame) { if (gc.CurrentLevel == 1 && gc.LevelFinished) { gc.LevelFinished = false; gc.CurrentLevel = 2; _board = new Board(_spriteBatch, _tileTexture, 59, 25); _board.CreateNewBossBoard(); _player.Position = new Vector2(50, ScreenHeight - (TileHeight * 2)); _geryon.Position = new Vector2(ScreenWidth - (TileWidth * 2), ScreenHeight - (TileHeight * 2)); } base.Update(gameTime); background1.Update(gameTime); _player.Update(gameTime); _vortex.Update(gameTime, _player); _spawn += (float)gameTime.ElapsedGameTime.TotalSeconds; foreach (Enemy demon in _demonHorde) { demon.Update(gameTime, _player); } if (gc.CurrentLevel == 1) { LoadEnemies(); } for (int i = 0; i < gc.MaxScoreCount; i++) { _coins[i].Update(gameTime, _player); } if (gc.CurrentLevel == 2) { _geryon.Update(gameTime, _player); _healthRectangle = new Rectangle(ScreenWidth / 2, ScreenHeight / 10, _geryon.Health, 20); CheckWinCondition(); } } }
public void Update(ref GameTime gameTime) { // Updates all creatures, if health is less than 0, they die. Removed from the creature less for (int i = Creatures.Count - 1; i >= 0; --i) { Creatures[i].Update(ref gameTime); if (Creatures[i].CurrentHealth <= 0) { Creatures[i] = null; Creatures.RemoveAt(i); } } // Updates all the items dropped on the ground for (int i = DroppedItems.Count - 1; i >= 0; --i) { DroppedItems[i].Update(ref gameTime); if (DroppedItems[i].LifeTime >= 300) // Removed after 5 mins { DroppedItems[i] = null; DroppedItems.RemoveAt(i); } } // Updates all the projectiles, if lifetime is less than or equal to 0, they are removed. for (int i = Projectiles.Count - 1; i >= 0; --i) { Projectiles[i].Update(ref gameTime); if (Projectiles[i].LifeTime <= 0) { Projectiles[i] = null; Projectiles.RemoveAt(i); } } // If the boss of the level is up then they are updates, when dead a text appears to press N to continue. Background.Update(gameTime); if (Boss.IsAlive) { Boss.Update(gameTime); } else { TradingManager.Update(gameTime); if (Game1.InputManager.KeyClicked(Microsoft.Xna.Framework.Input.Keys.N)) { Game1.WindowManager.GetGameplayWindow().NewLevel(NextLevel); } } }
private void BulletUpdate(GameTime gameTime) { for (int i = 0; i < Bullets.Count; i++) { Bullet b = Bullets[i]; if (b.BulletLib.IsDead() || b.TouchEnemy() || b.HasTouchedTile()) { Bullets.RemoveAt(i--); } else { b.Update(gameTime); } _boss.Update(gameTime); } }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (Game.Pause) { return; } if (!Game.GameManager.EndGame()) { if (_player.Alive()) { _player.Update(gameTime); } _boss.Update(gameTime); } }
public void Update(GameTime gameTime) { if (boss.player == null) { boss.GetPlayer(player); } sound.PlayBGM("BossBGM"); boss.Update(gameTime); player.Update(gameTime); if (Input.GetKeyTrigger(Keys.Space) || Input.IsButtonDown(PlayerIndex.One, Buttons.Start)) { IsEndFlag = true; } if (boss.IsDead()) { IsEndFlag = true; } }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (InputManager.PressedCancel()) { Game.ScreenManager.GoTo <BossSelectionScreen>(); } _playTime += gameTime.ElapsedGameTime; if (!Game.GameManager.EndGame()) { if (_player.Alive()) { _player.Update(gameTime); } _boss.Update(gameTime); } }
public virtual void Update() { foreach (var background in backgrounds) { background.Update(); } ground.Update(); boss.Update(); player.Update(); foreach (var p in plates) { Platform plate = (Platform)p; plate.Update(); } powerup.Update(); CollisionManager.Update(); }
protected void UpdateBoss(GameTime gameTime) { _boss.Update(gameTime); }
public override void Update(GameTime gameTime) { // Move the background if (_backgroundMainRectangle.Y >= Config.Resolution.Y) { _backgroundMainRectangle.Y = _backgroundTopRectangle.Y - Config.Resolution.Y; } if (_backgroundTopRectangle.Y >= Config.Resolution.Y) { _backgroundTopRectangle.Y = _backgroundMainRectangle.Y - Config.Resolution.Y; } /* * _backgroundMainRectangle.Y += (int)(250 * (float)gameTime.ElapsedGameTime.TotalSeconds); * _backgroundTopRectangle.Y += (int)(250 * (float)gameTime.ElapsedGameTime.TotalSeconds); */ HandleInput(); _timer.Update(gameTime); _playTime += gameTime.ElapsedGameTime; if (InputHandler.PressedCancel()) { UnloadContent(); StateManager.ChangeState(GameRef.TitleScreen); } base.Update(gameTime); foreach (Player p in Players) { if (p.IsAlive) { if (p.BulletTime) { var newGameTime = new GameTime( gameTime.TotalGameTime, new TimeSpan((long)(gameTime.ElapsedGameTime.Ticks / Improvements.BulletTimeDivisorData[PlayerData.BulletTimeDivisorIndex].Key)) ); gameTime = newGameTime; } for (int i = 0; i < p.GetBullets().Count; i++) { p.GetBullets()[i].Update(gameTime); if (_enemy.IsAlive && _enemy.GetBoundingElement().Intersects(p.GetBullets()[i].GetBoundingElement())) { if (_enemy.IsReady()) { _enemy.TakeDamage(p.GetBullets()[i].Power); hit.Play(); p.AddScore(Improvements.ScoreByHitData[PlayerData.ScoreByHitIndex].Key); } p.GetBullets().Remove(p.GetBullets()[i]); } else { if (p.GetBullets()[i].X <0 || p.GetBullets()[i].X> Config.GameArea.X || p.GetBullets()[i].Y <0 || p.GetBullets()[i].Y> Config.GameArea.Y) { p.GetBullets().Remove(p.GetBullets()[i]); } } } if (p.Intersects(_enemy)) { p.Hit(); } foreach (Mover m in _enemy.MoverManager.movers) { if (p.Intersects(m)) { p.Hit(); } } p.Update(gameTime); } } if (_enemy.IsAlive) { _enemy.Update(gameTime); } else { _waveNumber++; _timer.AddTime(Improvements.TimerExtraTimeData[PlayerData.TimerExtraTimeIndex].Key); _enemy.DefeatNumber++; _enemy.Initialize(); } // Game Over if ((!Players[0].IsAlive && (Config.PlayersNumber == 1 || (Config.PlayersNumber == 2 && !Players[1].IsAlive))) || _timer.IsFinished) { UnloadContent(); GameRef.GameOverScreen.Died = !_timer.IsFinished; GameRef.GameOverScreen.Time = _playTime; GameRef.GameOverScreen.WaveNumber = _waveNumber; GameRef.GameOverScreen.Player1Score = Players[0].Score; if (Config.PlayersNumber == 2) { GameRef.GameOverScreen.Player2Score = Players[1].Score; } int totalScore = GameRef.GameOverScreen.Player1Score + GameRef.GameOverScreen.Player2Score + (Improvements.ScoreByEnemyData[PlayerData.ScoreByEnemyIndex].Key * GameRef.GameOverScreen.WaveNumber) + (int)_playTime.TotalSeconds; GameRef.GameOverScreen.TotalScore = totalScore; PlayerData.Credits += totalScore; StateManager.ChangeState(GameRef.GameOverScreen); } if (Config.Debug && InputHandler.KeyPressed(Keys.C)) { Config.DisplayCollisionBoxes = !Config.DisplayCollisionBoxes; } }
public override void Update(GameTime gameTime) { timer += gameTime.ElapsedGameTime.TotalMilliseconds; rSpawnTimer += gameTime.ElapsedGameTime.TotalMilliseconds; spawnTimer += gameTime.ElapsedGameTime.TotalMilliseconds; float dt = (float)gameTime.ElapsedGameTime.TotalMilliseconds; float dv = 0.0004f; water.Update(gameTime); Tile.Update(gameTime); player.Update(gameTime); float bossFightTimer = (float)(timer - (124000 + 4 / dv + 64)); if (player.Health <= 0) { GameManager.GetInstance().ChangeScreen(ScreenState.MENU); } int t = (int)(2 / dv + 16); int rSpawnTimerThresh = (state.Equals(MinigameState.BOSS)) ? 300 : 200; if (timer > 8000 && rSpawnTimer > rSpawnTimerThresh && boss.Health > 0) { rSpawnTimer = 0; if (!state.Equals(MinigameState.BOSS)) { SpawnRandom(350); } Color c = (state.Equals(MinigameState.BOSS)) ? Color.Red : Color.Transparent; RandomProjectile p = GenerateProjectile(game.Width / 5, 0, 10, c); RandomProjectile p2 = GenerateProjectile(game.Width / 5 * 2, 0, 10, c); RandomProjectile p3 = GenerateProjectile(game.Width / 5 * 3, 0, 10, c); RandomProjectile p4 = GenerateProjectile(game.Width / 5 * 4, 0, 10, c); projectiles.Add(p); projectiles.Add(p2); projectiles.Add(p3); projectiles.Add(p4); } int initialCount = projectiles.Count; for (int i = 0; i < projectiles.Count; i++) { projectiles[i].Update(gameTime); i += Math.Max(Math.Min(0, projectiles.Count - initialCount), 0); if (projectiles[Math.Min(i, projectiles.Count - 1)].TTL <= 0) { projectiles.RemoveAt(i--); } i += Math.Max(Math.Min(0, projectiles.Count - initialCount), 0); } if (timer < 8000) { state = MinigameState.BEGIN; } else if (timer > 8000 && timer < 14000) { state = MinigameState.KEYNESIAN_CROSS; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new FortyFiveProjectile(blank, new Rectangle( 0, game.Height, 10, 10), 9000)); projectiles.Add(new KeynesianCross(blank, new Rectangle( 0, game.Height / 3 * 2, 10, 10), 9000)); } } else if (timer > 15000 && timer < 28500) { state = MinigameState.AGGREGATE_DEMAND_SUPPLY; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 32000 && timer < 46500) { state = MinigameState.BUSINESS_CYCLE; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new BusinessCycleProjectile(blank, new Rectangle( 0, game.Height / 4 * 3, 10, 10), 10000)); } } else if (timer > 50000 && timer < 62000) { state = MinigameState.PHILLIPS; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new PhillipsProjectile(blank, new Rectangle(50, 0, 10, 10), 18000)); } } else if (timer > 64000 && timer < 78000) { state = MinigameState.SUPPLY_DEMAND; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 82000 && timer < 88500) { state = MinigameState.RECESSION_DEPRESSION; if (spawnTimer > 200) { spawnTimer = 0; // recession/depression projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width - 300, game.Height * 3 / 4 + 300, 10, 10), 10000)); } } else if (timer >= 88500 && timer < 96000) { state = MinigameState.INFLATION; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width + 200, game.Height * 3 / 4 - 100, 10, 10), 10000)); } } else if (timer >= 96000 && timer < 103000) { state = MinigameState.STAGFLATION; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ASProjectile(blank, new Rectangle( -200, game.Height * 3 / 4 - 200, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 103000 && timer < 112000) { state = MinigameState.ECONOMIC_BOOM; if (spawnTimer > 200) { spawnTimer = 0; projectiles.Add(new LRASProjectile(blank, new Rectangle( game.Width / 2, 0, 10, 10), 5000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 0, game.Height * 3 / 4, 10, 10), 10000)); projectiles.Add(new ASProjectile(blank, new Rectangle( 200, game.Height * 3 / 4 + 200, 10, 10), 10000)); projectiles.Add(new ADProjectile(blank, new Rectangle( game.Width, game.Height * 3 / 4, 10, 10), 10000)); } } else if (timer > 114000 && timer < 124000) { if (spawnTimer > 70) { spawnTimer = 0; projectiles.Add(new LafferProjectile(blank, new Rectangle(0, game.Height, 10, 10), 10000)); } state = MinigameState.LAFFERS_CURVE; } else if (timer > 124000 && timer < 124000 + t) { state = MinigameState.NONE; MediaPlayer.Volume = Math.Max(MediaPlayer.Volume - dv * dt, 0); //GameManager.GetInstance().ChangeScreen(ScreenState.MENU); } else if (timer > 124000 + t && timer < 124000 + 2 * t) { if (!isPlayFlag) { isPlayFlag = true; MediaPlayer.Play(background2); } MediaPlayer.Volume = Math.Min(MediaPlayer.Volume + dv * dt, 1); } else if (timer > 124000 + 4 / dv + 64 && boss.Health > 0) { state = MinigameState.BOSS; boss.Update(gameTime); songName = "Spear of Justice! - Undertale"; } else { state = MinigameState.NONE; } if (boss.Health <= 0) { endTimer += (float)gameTime.ElapsedGameTime.TotalMilliseconds; state = MinigameState.END; if (endTimer > 10000) { GameManager.GetInstance().ChangeScreen(ScreenState.MENU); } } }
void Update() { GameDeltaTime = Paused ? 0.0f : Time.deltaTime; if (mGameStatus == State.Level) { mDistanceTravelled += ScenerySpeed * GameDeltaTime; if (mDistanceTravelled != 0f) { UpdateText(string.Format("Distance: {0:0.0} m", mDistanceTravelled)); } mLevelTimeLeft -= GameDeltaTime; if (!GameFrozen) { if (mLevelTimeLeft > 0f) { //Get a bit pattern and spawn enemies according to it int enemies = mCurrentDifficulty.SpawnPattern(); for (int ColumnCount = 0; ColumnCount < 3; ColumnCount++) { if ((enemies & (1 << ColumnCount)) != 0) { EnemyFactory.Dispatch((EnemyFactory.Column)ColumnCount); } } PowerupFactory.DetectCollisions(mPlayerCharacter.transform.position); } else if (mActiveEnemies.Count == 0) { switch (SlowDownStage) { case 0: //We are just now starting to slow down mCurrentDifficulty.SlowDown(); break; //For case 1 - slowing down in progress - nothing is to be done case 2: //Slowing down has finished; switch to boss state mGameStatus = State.Boss; boss = new Boss(GameplayCamera, EnemyMaterial); mCurrentDifficulty.TriggerTutorial(11); break; } //At this point, we know there are no enemies to check, so it is OK to skip the loop below return; } } /* Traverse the list descendingly so that removals of already visited elements does not affect the * elements yet to be visited. */ for (int count = mActiveEnemies.Count - 1; count >= 0; count--) { Vector3 ThisPosition = mActiveEnemies[count].transform.position; //Update each enemy's position according to the game speed ThisPosition.y -= GameDeltaTime * EnemySpeed; mActiveEnemies[count].transform.position = ThisPosition; //Check if the enemy has flown off screen. If so, return it to the factory and count it as missed. if (ThisPosition.y < ScreenHeight * -0.5f) { EnemyFactory.Return(mActiveEnemies[count]); mMissedEnemies++; } //Check if the enemy is too close to the player. If so, end the game. else if ((mPlayerCharacter.transform.position - ThisPosition).sqrMagnitude < PlayerKillDistance) { GameOver("You died!"); } //Check if the enemy has been hit by a bullet else { for (int bullet = 0; bullet < mPlayerCharacter.Weapon.ActiveBullets.Count; bullet++) { if (mPlayerCharacter.Weapon.ActiveBullets[bullet].CheckHit(ThisPosition, BulletKillDistance, false)) { EnemyFactory.Return(mActiveEnemies[count]); break; } } } } //Check if the player has been "invaded" (too many enemies were missed if (mMissedEnemies >= MaxMissedEnemies) { GameOver("You have been invaded!"); } } else if (mGameStatus == State.Boss) { if (boss != null) { //Only if the boss is allowed to move if (!GameFrozen) { //Move and rotate boss to point to player's position boss.Update(mPlayerCharacter.transform.position); //Check if boss has eaten the player and if so end the game if (boss.HasEaten(mPlayerCharacter.transform.position)) { GameOver("You have been eaten!"); } } //Check wether boss was hit by a bullet foreach (Bullet bullet in mPlayerCharacter.Weapon.ActiveBullets) { if (bullet.CheckHit(boss.Position(), BossHitDistance, true)) { if (boss.Hit(bullet.DamageValue)) { boss = null; mCurrentDifficulty.TriggerTutorial(13); } break; } } } //No more boss, transitioning to normal else { mDistanceTravelled += ScenerySpeed * GameDeltaTime; UpdateText(string.Format("Distance: {0:0.0} m", mDistanceTravelled)); if (mCurrentDifficulty.LevelUp()) { mGameStatus = State.Level; mMissedEnemies = 0; mLevelTimeLeft = DifficultyCurve.LevelDuration; } } } else if (mGameStatus == State.TapToStart) { mCurrentDifficulty.TriggerTutorial(1); if (mCurrentDifficulty.TutorialStage != 0) { mGameStatus = State.Level; } else { GameText.text = "Tap the screen or press W to start"; } } }
/// <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) { // MONO: Add your update logic here //In every State you are able to quit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) { Exit(); } lastGameState = currentGameState; //MUSIC Updating Timer audioManager.UpdateAudioManagerTimer(gameTime); //Update Timer float animationFrameTime = 0.02f; float gameFrameTime = (float)gameTime.ElapsedGameTime.TotalSeconds; timeUntilNextFrame1 -= gameFrameTime; timeUntilNextFrame2 -= gameFrameTime; switch (currentGameState) { case GameState.SPLASHSCREEN: splashScreen.ClickedButton(); break; case GameState.MAINMENU: if (MediaPlayer.State != 0) { MediaPlayer.Stop(); turnOnMusic = true; } mainMenu.Update(this); this.IsMouseVisible = true; break; case GameState.LEVELEDITOR: levelEditor.HandleLevelEditorEvents(); levelEditor.moveOrDeletePlatforms(ref allGameObjectList, transformationMatrix); this.IsMouseVisible = true; levelEditor.moveCamera(ref cameraOffset); // Makes player movable in the leveleditor //Enemies are alive but not visible gameObjectsToRender = camera.GameObjectsToRender(wormPlayer.gameObjectPosition, allGameObjectList, ref interactiveObject); wormPlayer.Update(gameTime, gameObjectsToRender, ref viewableEnemies, interactiveObject, ref allGameObjectList, loadAndSave, ingameMenus, levelManager, ref allGameObjectList, shopKeeper, itemUIManager, ref hakume); break; case GameState.GAMELOOP: this.IsMouseVisible = false; //MUSIC if (turnOnMusic) { audioManager.Play("IngameMusic"); turnOnMusic = false; } //switch to LevelEditor levelManager.ManageLevels(wormPlayer.gameObjectPosition); itemUIManager.ManageItems(ref wormPlayer, ref levelObjectList); if (currentGameState == GameState.GAMELOOP) { //cameraOffset = new Vector2(0, 0); if (Keyboard.GetState().IsKeyDown(Keys.L) && !previousState.IsKeyDown(Keys.L)) { currentGameState = GameState.LEVELEDITOR; } //previousState = Keyboard.GetState(); if (Keyboard.GetState().IsKeyDown(Keys.M) && !previousState.IsKeyDown(Keys.M) && levelManager.currentLevel != Enums.Level.TUTORIAL) { currentGameState = GameState.MINIMAP; } if ((Keyboard.GetState().IsKeyDown(Keys.P) && !previousState.IsKeyDown(Keys.P)) || (GamePad.GetState(0).IsButtonDown(Buttons.Start) && !previousGamePadState.IsButtonDown(Buttons.Start))) { currentGameState = GameState.GAMEMENU; } previousState = Keyboard.GetState(); previousGamePadState = GamePad.GetState(0); } if (shopKeeper.shopOpen == true) { shopKeeper.handleShopKeeperEvents(); } if (timeUntilNextFrame1 <= 0) { gameObjectsToRender = camera.GameObjectsToRender(wormPlayer.gameObjectPosition, levelObjectList, ref interactiveObject); timeUntilNextFrame1 += animationFrameTime; } camera.SpawnEnemyOffScreen(wormPlayer, enemySpawnList, ref enemyList, enemySpriteSheets, levelManager.PlayerLevelLocation()); if (!camera.spawnBoss) { viewableEnemies = camera.RenderedEnemies(wormPlayer.gameObjectPosition, enemyList); } wormPlayer.Update(gameTime, gameObjectsToRender, ref viewableEnemies, interactiveObject, ref levelObjectList, loadAndSave, ingameMenus, levelManager, ref allGameObjectList, shopKeeper, itemUIManager, ref hakume); if (timeUntilNextFrame2 <= 0) { if (levelManager.PlayerLevelLocation() != Enums.Level.CROWN) { foreach (var enemy in viewableEnemies.ToList()) { enemy.Update(gameTime, gameObjectsToRender); if (enemy.EnemyAliveState() == false || enemy.fallOutOfMap) { viewableEnemies.RemoveAt(viewableEnemies.IndexOf(enemy)); } } } if (levelManager.PlayerLevelLocation() == Enums.Level.CROWN) { if (hakume != null) { hakume.Update(gameTime, gameObjectsToRender); } if (hakume.EnemyAliveState() == false) { hakume = null; } } timeUntilNextFrame2 += animationFrameTime; } break; case GameState.MINIMAP: if (Keyboard.GetState().IsKeyDown(Keys.M) && !previousState.IsKeyDown(Keys.M)) { currentGameState = GameState.GAMELOOP; } previousState = Keyboard.GetState(); break; case GameState.GAMEMENU: gameMenu.Update(this, loadAndSave); break; case GameState.CREDITS: credits.UpdateCredits(); break; } }
public override void Update(GameTime gameTime) { base.Update(gameTime); if (InputHandler.PressedCancel()) { UnloadContent(); StateManager.ChangeState(GameRef.TitleScreen); } else if (InputHandler.KeyPressed(Keys.P)) { GameRef.Pause = !GameRef.Pause; } if (GameRef.Pause) { return; } HandleInput(); foreach (var p in Players) { if (p.IsAlive) { if (p.BulletTime) { var newGameTime = new GameTime( gameTime.TotalGameTime, new TimeSpan((long)(gameTime.ElapsedGameTime.Ticks / Improvements.BulletTimeDivisorData[PlayerData.BulletTimeDivisorIndex].Key)) ); gameTime = newGameTime; } for (var i = 0; i < p.GetBullets().Count; i++) { var currentPlayerBullet = p.GetBullets()[i]; currentPlayerBullet.Update(gameTime); if (_boss.Intersects(currentPlayerBullet)) { //_boss.TakeDamage(currentPlayerBullet.Power); for (var j = 0; j < 30; j++) { GameRef.ParticleManager.CreateParticle(GameRef.LineParticle, currentPlayerBullet.Position, Color.LightBlue, 50, 1, new ParticleState() { Velocity = GameRef.Rand.NextVector2(0, 9), Type = ParticleType.Bullet, LengthMultiplier = 1 }); } p.GetBullets().Remove(currentPlayerBullet); continue; } if (currentPlayerBullet.X < 0 || currentPlayerBullet.X > Config.GameArea.X || currentPlayerBullet.Y < 0 || currentPlayerBullet.Y > Config.GameArea.Y) { for (var j = 0; j < 30; j++) { GameRef.ParticleManager.CreateParticle(GameRef.LineParticle, currentPlayerBullet.Position, Color.LightBlue, 50, 1, new ParticleState() { Velocity = GameRef.Rand.NextVector2(0, 9), Type = ParticleType.Bullet, LengthMultiplier = 1 }); } p.GetBullets().Remove(currentPlayerBullet); } /* * // Collision with turrets * for (int j = 0; j < _boss.Turrets.Count; j++) * { * if (_boss.Turrets[j].Intersects(p.GetBullets()[i])) * { * _boss.Turrets[j].Color = Color.Blue; * _boss.DestroyTurret(_boss.Turrets[j], p.GetBullets()[i]); * p.GetBullets().Remove(p.GetBullets()[i]); * break; * } * } */ } p.Update(gameTime); } } _boss.Update(gameTime); GameRef.ParticleManager.Update(); }
/// <summary> /// 1フレームぶんの処理を行う。 /// </summary> public void Update() { // スクリプト実行 runner.Step(); // 自機 OwnChar.Update(key); // 敵 Enemies.ForEach(enemy => enemy.Update()); // 自機の弾 OwnBullets.ForEach(bullet => bullet.Update()); // 敵の弾 EnemyBullets.ForEach(bullet => bullet.Update()); // ボス if (Boss != null) { Boss.Update(); } // 画面外の弾を削除 OwnBullets.RemoveAll(bullet => bullet.Position.X < -bullet.Radius || bullet.Position.Y < -bullet.Radius || bullet.Position.X > 640 + bullet.Radius || bullet.Position.Y > 480 + bullet.Radius); EnemyBullets.RemoveAll(bullet => bullet.Position.X < -bullet.Radius || bullet.Position.Y < -bullet.Radius || bullet.Position.X > 640 + bullet.Radius || bullet.Position.Y > 480 + bullet.Radius); // 敵と弾の当たり判定 for (var bi = OwnBullets.Count - 1; bi >= 0; --bi) { var bullet = OwnBullets[bi]; for (var ei = Enemies.Count - 1; ei >= 0; --ei) { var enemy = Enemies[ei]; if (collidesCircleCircle( bullet.Position.X, bullet.Position.Y, bullet.Radius, enemy.Position.X, enemy.Position.Y, enemy.Radius)) { enemy.OnDamaged(bullet.Power); OwnBullets.RemoveAt(bi); break; } } } Enemies.RemoveAll(enemy => enemy.Dead); // ボスと弾の当たり判定 if (Boss != null) { for (var bi = OwnBullets.Count - 1; bi >= 0; --bi) { var bullet = OwnBullets[bi]; if (collidesCircleCircle( bullet.Position.X, bullet.Position.Y, bullet.Radius, Boss.Position.X, Boss.Position.Y, Boss.Radius)) { Boss.OnDamaged(bullet.Power); OwnBullets.RemoveAt(bi); } } } // 自機と敵の当たり判定 foreach (var enemy in Enemies) { if (collidesCircleCircle( OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius, enemy.Position.X, enemy.Position.Y, enemy.Radius)) { failed = !DebugMode; } } // 自機とボスの当たり判定 if (Boss != null) { if (collidesCircleCircle( OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius, Boss.Position.X, Boss.Position.Y, Boss.Radius)) { failed = !DebugMode; } } // 自機と敵の弾の当たり判定 foreach (var bullet in EnemyBullets) { if (collidesCircleCircle( OwnChar.Position.X, OwnChar.Position.Y, OwnChar.Radius, bullet.Position.X, bullet.Position.Y, bullet.Radius)) { failed = !DebugMode; } } // R キーで自滅 if (key.IsPressed(DX.KEY_INPUT_R)) { failed = true; } }
public override void Update(GameTime gametime) { manager.Update(); sm.Update(); bg.Update(); if (i > 3 * 60) { console.wipe(); i = 0; } else { if (console.log.Count > 0) { i++; } } if (!manager.paused) { player.Update(); camera.Update(); foreach (GameObject t in tiles) { t.Update(); } foreach (GameObject t in deco) { t.Update(); } List <Destroyable> staticPickups = new List <Destroyable>(); staticPickups = pickups.ToList(); foreach (GameObject t in staticPickups) { t.Update(); } List <Enemy> staticEnemies = new List <Enemy>(); staticEnemies = enemies.ToList(); foreach (Enemy g in staticEnemies) { g.Update(); } List <Danmaku> staticProjectiles = new List <Danmaku>(); staticProjectiles = projectiles.ToList(); foreach (Danmaku d in staticProjectiles) { d.Update(); } foreach (Trigger t in triggers) { t.Update(); } boss.Update(); attackoverlay.Update(); } base.Update(gametime); }