public void Update(GameTime gameTime) { if (powerup == null) { if (remaining < 0) { remaining = rand.NextDouble() * 10 + 10; lock (phyWorld) powerup = (Powerup)Activator.CreateInstance( types[rand.Next(0, types.Length)], phyWorld, gameplay, rand); powerup.LoadContent(content); } else remaining -= gameTime.ElapsedGameTime.TotalSeconds; } else { if (powerup.IsActive) powerup.Update(); else { phyWorld.RemoveBody(powerup); powerup = null; } } }
private void HandlePowerups(GameTime gameTime) { _countdownToPowerup -= gameTime.ElapsedGameTime.Milliseconds; if ((gameTimer > 60000 && _minCountdownToPowerup == 10000) || (gameTimer > 120000 && _minCountdownToPowerup == 5000)) { _minCountdownToPowerup /= 2; _maxCountdownToPowerup /= 2; } if (_countdownToPowerup <= 0) { _countdownToPowerup = random.Next(_minCountdownToPowerup, _maxCountdownToPowerup); Tile randTile = null; bool foundTile = false; do { randTile = _currentMap.GetRandomWalkableTile(); if (randTile == null) { break; } foundTile = true; for (int i = 0; i < _powerups.Count; i++) { if (randTile.position == _powerups[i].position) { foundTile = false; break; } } } while (!foundTile); int startRange = GameRules.selectedGameType == GameRules.GameType.CollectToWin ? 0 : 1; Powerup newPower = new Powerup((int)randTile.position.X, (int)randTile.position.Y, (Powerup.PowerupType)random.Next(startRange, 4)); newPower.LoadContent(_contentManager); _powerups.Add(newPower); } }
private void UpdateChildren(Vector2 windowSize, ContentManager Content, GameTime gameTime, Player player) { if (!portalActive) { foreach (Powerup _powerup in powerupList.Reverse <Powerup>()) { if (_powerup.Rect.Intersects(player.Rect)) { player.health += 20; powerupList.Remove(_powerup); } else { powerup.Update(gameTime); } } foreach (Enemy enemy in enemyList.Reverse <Enemy>()) { if (enemy.Rect.X < 32) { enemy.Speed.X = -enemy.Speed.X; } if (enemy.Rect.X > windowSize.X - 32) { enemy.Speed.X = -enemy.Speed.X; } if (enemy.Rect.Y < 32) { enemy.Speed.Y = -enemy.Speed.Y; } if (enemy.Rect.Y > windowSize.Y - 32) { enemy.Speed.Y = -enemy.Speed.Y; } int distance = 120; if (new Rectangle(enemy.Rect.X - distance, enemy.Rect.Y - distance, enemy.Rect.Width + 2 * distance, enemy.Rect.Height + 2 * distance).Intersects(player.Rect)) { enemy.follow = true; } if (enemy.follow) { enemy.Speed = new Vector2((player.Rect.Center.X - enemy.Rect.Center.X) / 20 * randomGenerator.Next(1, 3), (player.Rect.Center.Y - enemy.Rect.Center.Y) / 20 * randomGenerator.Next(1, 3)); int desiredSpeed = 5; int biggerSpeed; float speedMod = 0f; biggerSpeed = Math.Max(Math.Abs((int)enemy.Speed.X), Math.Abs((int)enemy.Speed.Y)); if (!(biggerSpeed > desiredSpeed)) { if (!(biggerSpeed == 0)) { Math.Abs(speedMod = desiredSpeed / biggerSpeed); } else { speedMod = 1; } } if (biggerSpeed == Math.Abs(enemy.Speed.X)) { if (enemy.Speed.X > 0) { enemy.Speed.X = desiredSpeed; enemy.Speed.Y *= speedMod; } else if (enemy.Speed.X < 0) { enemy.Speed.X = -desiredSpeed; enemy.Speed.Y *= speedMod; } } else if (biggerSpeed == Math.Abs(enemy.Speed.Y)) { if (enemy.Speed.Y > 0) { enemy.Speed.Y = desiredSpeed; enemy.Speed.X *= speedMod; } else if (enemy.Speed.Y < 0) { enemy.Speed.Y = -desiredSpeed; enemy.Speed.X *= speedMod; } } } else { if (randomGenerator.Next(0, 51) == 1) { List <int> speedModifier = new List <int>(); speedModifier.AddRange(new int[] { -1, 1 }); enemy.Speed = new Vector2(randomGenerator.Next(101) * 0.01f * 5 * speedModifier[randomGenerator.Next(0, 2)], randomGenerator.Next(101) * 0.01f * 5 * speedModifier[randomGenerator.Next(0, 2)]); } } if (enemy.Rect.Intersects(player.Rect)) { player.health -= 1; if (player.health <= 0) { player.health = 0; gameOver = true; } } foreach (Bullet _bullet in bulletList.Reverse <Bullet>()) { if (_bullet.Rect.Intersects(enemy.Rect)) //&& new Rectangle(player.bgRect.X - 32, player.bgRect.Y - 32, player.bgRect.Width + 64, player.bgRect.Height + 64).Intersects(enemy.Rect)) { bulletList.Remove(_bullet); enemy.Health -= 1; if (randomGenerator.Next(101) == 1) { powerup = new Powerup(); powerup.LoadContent(Content); powerup.Rect.X = enemy.Rect.Center.X; powerup.Rect.Y = enemy.Rect.Center.Y; powerupList.Add(powerup); } } if (enemy.Health <= 0) { kills++; enemyList.Remove(enemy); } if (_bullet.Rect.Intersects(core.Rect) && player.bgRect.Intersects(core.Rect)) { core.health -= 1; bulletList.Remove(_bullet); } if (core.health <= 0) { SoundManager.Audio().StopSong(); SoundManager.Audio().PlaySong(SoundManager.Audio().songs.Count - 1); portalActive = true; player.portalActive = true; player.Rect.X = (int)windowSize.X / 2; player.Rect.Y = (int)windowSize.Y - 40; } if (_bullet.Rect.X < -32) { bulletList.Remove(_bullet); } if (_bullet.Rect.X > windowSize.X) { bulletList.Remove(_bullet); } if (_bullet.Rect.Y < -32) { bulletList.Remove(_bullet); } if (_bullet.Rect.Y > windowSize.Y) { bulletList.Remove(_bullet); } } } foreach (Enemy _enemy in enemyList.Reverse <Enemy>()) { _enemy.Update(gameTime); } foreach (Bullet _bullet in bulletList.Reverse <Bullet>()) { _bullet.Update(); } core.Update(gameTime); } else { portal.Update(gameTime); if (portal.Collides(player, true)) { level += 1; portalActive = false; player.portalActive = false; bulletList.Clear(); enemyList.Clear(); core.LoadContent(Content, "core (2)", windowSize); core.health = core.defaultHealth; SoundManager.Audio().StopSong(); SoundManager.Audio().PlaySong(randomGenerator.Next(0, SoundManager.Audio().songs.Count - 1)); } } }