/// <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) { KeyboardState kb = Keyboard.GetState(); level.Update(gameTime, kb, gameState); hud.Update(gameTime, kb, gameState); if (gameState == 1) { if (!level.playerAlive) { ChangeState(4); } } if (kb.IsKeyDown(Keys.Enter) && !(kbOld.IsKeyDown(Keys.Enter))) { if (gameState == 0 || gameState == 3 || gameState == 4) { ChangeState(hud.GetSelectedState(gameState)); menuSelect.Play(); } else if (gameState == 2) { ChangeState(0); menuSelect.Play(); } } if (kb.IsKeyDown(Keys.Escape) && !(kbOld.IsKeyDown(Keys.Escape))) { if (gameState == 0) { this.Exit(); } else if (gameState == 1) { ChangeState(3); } else if (gameState == 2) { ChangeState(0); } else if (gameState == 3) { ChangeState(1); } } if (level.height > 20200000) { ChangeState(5); } kbOld = kb; base.Update(gameTime); }
public void Update(GameTime gt, KeyboardState kb, int gs) { //Title menu infinite scrolling if (gs == 0 || gs == 2) { height += 1f; if (oldHeight % 100 > height % 100) { AddRandomBg("sky"); } oldHeight = height; } //Actual gameplay if (gs == 1) { if (playerAlive) { height += player.speed * gameSpeed; if (oldHeight % 100 > height % 100 && height < 12000) { AddRandomBg("sky"); } else if (oldHeight % 100 > height % 100 && height >= 12000 && height < 15000 && transitionNum < 8) { TransitionBg("evening"); } else if (oldHeight % 500 > height % 500 && height >= 12800 && height < 100000) { if (height > 16000) { transitionNum = 0; } //The new transition stuff is REALLY hack, thanks LD48 with 4 hours left! AddRandomBg("evening"); } else if (oldHeight % 100000 > height % 100000 && height >= 100000 && height < 800000 && transitionNum < 8) { TransitionBg("space"); } else if (oldHeight % 100000 > height % 100000 && height >= 100800) { transitionNum = 0; AddRandomBg("space"); } if (height < 17000000) { if (oldHeight % (gameSpeed * player.speed * 80) > height % (gameSpeed * player.speed * 80)) { Random r = new Random(); int rNum = r.Next(2); if (rNum % 2 == 1) { collidablesList.Add(CreateRandomCollidable()); } } if (oldHeight % (gameSpeed * player.speed * 800) > height % (gameSpeed * player.speed * 800)) { Random r = new Random(); int rNum = r.Next(100); if (rNum > 75) { collectiblesList.Add(resources.ReturnCollectibleFromType(0, r.Next(20, 440))); } else { collectiblesList.Add(resources.ReturnCollectibleFromType(1, r.Next(20, 440))); } } } player.Update(gt, kb); for (int i = 0; i < collidablesList.Count; i++) { try { if (height < 12000) { collidablesList[i].Update(gt, 8 * gameSpeed); } else if (height < 100000) { collidablesList[i].UpdateVertical(gt, 8 * gameSpeed); } else { collidablesList[i].UpdateOscillate(gt, 6 * gameSpeed); } if (collidablesList[i].position.X > 1800 || collidablesList[i].position.X < -1300) { collidablesList.Remove(collidablesList[i]); } if (player.boundingBox.Intersects(collidablesList[i].boundingBox)) { if (Utility.CheckPerPixel(player.spriteMask, collidablesList[i].spriteMask, player.position, collidablesList[i].position)) { if (player.playerState == 0) { player.Damage(); } } } } catch (ArgumentOutOfRangeException) { //Sometimes it tries to access a plane that's been destroyed. //A hacky fix, but that's what LD48 is about. } } for (int i = 0; i < collectiblesList.Count; i++) { try { //Same as above, crappy fixes collectiblesList[i].Update(gt, 8 * gameSpeed); if (collectiblesList[i].position.Y > 900) { collectiblesList.Remove(collectiblesList[i]); } if (player.boundingBox.Intersects(collectiblesList[i].boundingBox)) { player.PickupCollectible(collectiblesList[i].type); collectiblesList[i].pickupSound.Play(); collectiblesList.Remove(collectiblesList[i]); } } catch (ArgumentOutOfRangeException) { } } if (player.health < 1) { KillPlayer(); } oldHeight = height; } else { hud.Update(gt, kb, gs); } } base.Update(gt); }