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;
         }
     }
 }
Пример #2
0
 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);
     }
 }
Пример #3
0
        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));
                }
            }
        }