示例#1
0
        public override void Draw(SpriteBatch spriteBatch, SpriteFont spriteFont)
        {
            List <Entity> sprites = world.GetEntities(new[] { typeof(RenderComponent), typeof(PositionComponent) });

            foreach (Entity drawable in sprites)
            {
                PositionComponent pc = (PositionComponent)drawable.components[typeof(PositionComponent)];
                RenderComponent   rc = (RenderComponent)drawable.components[typeof(RenderComponent)];
                if (rc.visible)
                {
                    spriteBatch.Draw(rc.CurrentTexture, new Rectangle((int)pc.position.X - (rc.CurrentTexture.Width / 2), (int)pc.position.Y - (rc.CurrentTexture.Height / 2), rc.CurrentTexture.Width, rc.CurrentTexture.Height), Color.White);

                    if (drawable.HasComponent(typeof(PlayerComponent)))
                    {
                        if (drawable.HasComponent(typeof(ShieldedComponent)))
                        {
                            Texture2D shield = Game1.instance.playerShield;
                            spriteBatch.Draw(shield, new Rectangle((int)(pc.position.X - rc.CurrentTexture.Width / 2) - 25, (int)(pc.position.Y - rc.CurrentTexture.Height / 2) - 30, shield.Width, shield.Height), Color.White);
                        }
                    }
                }
            }

            List <Entity> players = world.GetEntities(new[] { typeof(PlayerComponent) });

            if (players.Count > 0)
            {
                Entity               player = players[0];
                PlayerComponent      pc     = (PlayerComponent)player.components[typeof(PlayerComponent)];
                TakesDamageComponent ptdc   = (TakesDamageComponent)player.components[typeof(TakesDamageComponent)];
                for (int i = 0; i < pc.lives; i++)
                {
                    spriteBatch.Draw(Game1.instance.playerLivesGraphic, new Rectangle(40 * i + 10, 10, Game1.instance.playerLivesGraphic.Width, Game1.instance.playerLivesGraphic.Height), Color.White);
                }

                string scoreText = "" + Math.Truncate(Game1.instance.playerScore);
                spriteBatch.DrawString(spriteFont, scoreText, new Vector2(world.screenRect.Width - spriteFont.MeasureString(scoreText).X - 30, 5), Color.White);

                spriteBatch.Draw(Game1.instance.blank, new Rectangle(8, 43, 150, 12), Color.Black);
                spriteBatch.Draw(Game1.instance.blank, new Rectangle(9, 44, 148, 10), Color.White);
                spriteBatch.Draw(Game1.instance.blank, new Rectangle(9, 44, (int)(((double)ptdc.health / ptdc.maxHealth) * 148), 10), Color.Red);

                if (player.HasComponent(typeof(HasShieldComponent)))
                {
                    HasShieldComponent hasShieldComponent = (HasShieldComponent)player.components[typeof(HasShieldComponent)];
                    spriteBatch.Draw(Game1.instance.blank, new Rectangle(8, 60, 150, 12), Color.Black);
                    spriteBatch.Draw(Game1.instance.blank, new Rectangle(9, 61, 148, 10), Color.White);
                    spriteBatch.Draw(Game1.instance.blank, new Rectangle(9, 61, (int)((hasShieldComponent.shieldPower / hasShieldComponent.maxShieldPower) * 148), 10), Color.Blue);

                    if (hasShieldComponent.shieldCooldown)
                    {
                        spriteBatch.Draw(Game1.instance.blank, new Rectangle(9, 61, (int)(Math.Min((hasShieldComponent.shieldPower / hasShieldComponent.maxShieldPower), 1) * 148), 10), Color.Purple);
                    }
                }
            }
        }
示例#2
0
        public override void Update(GameTime gameTime)
        {
            keyboardState = Keyboard.GetState();

            Entity        player;
            List <Entity> playerEntities = world.GetEntities(new[] { typeof(PlayerComponent) });

            if (playerEntities.Count == 0)
            {
                player = new Entity();
                PlayerComponent ppc = new PlayerComponent();
                player.AddComponent(ppc);
                player.AddComponent(new HasShieldComponent());
                player.AddComponent(new SpeedComponent(Vector2.Zero));
                player.AddComponent(new TakesDamageComponent(50, DamageSystem.ENEMY ^ DamageSystem.ENEMY_LASER ^ DamageSystem.METEOR));
                world.AddEntity(player);

                ppc.lives = ppc.maxLives;
            }
            else
            {
                player = playerEntities[0];
            }

            if (!player.HasComponent(typeof(RenderComponent)))
            {
                Game1.instance.kills = 0;

                PlayerComponent ppc = (PlayerComponent)player.components[typeof(PlayerComponent)];

                ppc.timeSinceRespawn = 0;
                ppc.laserLevel       = 0;

                //Remove shield upgrade on respawn
                //player.RemoveComponent(typeof(HasShieldComponent));

                TakesDamageComponent ptdc = (TakesDamageComponent)player.components[typeof(TakesDamageComponent)];
                ptdc.health = ptdc.maxHealth;

                RenderComponent prc = new RenderComponent(Game1.instance.shipTextures.ToArray());
                player.AddComponent(prc);
                if (!player.HasComponent(typeof(PositionComponent)))
                {
                    player.AddComponent(new PositionComponent(new Vector2(
                                                                  (world.screenRect.Width / 2) - (prc.CurrentTexture.Width / 2),
                                                                  (world.screenRect.Height / 3) * 2 + (prc.CurrentTexture.Height / 2)
                                                                  )));
                }
                else
                {
                    PositionComponent playerPositionComp = (PositionComponent)player.components[typeof(PositionComponent)];
                    playerPositionComp.position = new Vector2(
                        (world.screenRect.Width / 2) - (prc.CurrentTexture.Width / 2),
                        (world.screenRect.Height / 3) * 2 + (prc.CurrentTexture.Height / 2)
                        );
                }
            }

            PlayerComponent pc = (PlayerComponent)player.components[typeof(PlayerComponent)];
            SpeedComponent  sc = (SpeedComponent)player.components[typeof(SpeedComponent)];
            RenderComponent rc = (RenderComponent)player.components[typeof(RenderComponent)];

            if (pc.lives == 0)
            {
                Game1.instance.PopScreen();
                Game1.instance.PushScreen(new GameOverScreen());
                return;
            }

            sc.motion        = Vector2.Zero;
            pc.lastFireTime += gameTime.ElapsedGameTime.Milliseconds;

            if (player.HasComponent(typeof(HasShieldComponent)))
            {
                HasShieldComponent hasShieldComp = (HasShieldComponent)player.components[typeof(HasShieldComponent)];

                if (!player.HasComponent(typeof(ShieldedComponent)) && hasShieldComp.shieldPower < hasShieldComp.maxShieldPower)
                {
                    hasShieldComp.shieldPower += hasShieldComp.shieldRegenRate * gameTime.ElapsedGameTime.Milliseconds;
                }

                if (hasShieldComp.shieldPower >= hasShieldComp.maxShieldPower)
                {
                    hasShieldComp.shieldPower    = hasShieldComp.maxShieldPower;
                    hasShieldComp.shieldCooldown = false;
                }
                if (player.HasComponent(typeof(ShieldedComponent)))
                {
                    hasShieldComp.shieldPower -= hasShieldComp.shieldDepleteRate * gameTime.ElapsedGameTime.Milliseconds;

                    if (hasShieldComp.shieldPower <= 0)
                    {
                        player.RemoveComponent(typeof(ShieldedComponent));
                        hasShieldComp.shieldCooldown = true;
                        hasShieldComp.shieldPower    = 0;
                    }
                }

                if (!hasShieldComp.shieldCooldown)
                {
                    if (keyboardState.IsKeyDown(Keys.LeftShift) && hasShieldComp.shieldPower >= 0)
                    {
                        if (!player.HasComponent(typeof(ShieldedComponent)))
                        {
                            player.AddComponent(new ShieldedComponent());
                        }
                    }
                    else
                    {
                        player.RemoveComponent(typeof(ShieldedComponent));
                    }
                }
            }

            bool upgradedLasers = false;

            if (Game1.instance.kills > 10 && pc.laserLevel == 0)
            {
                pc.laserLevel  = 1;
                upgradedLasers = true;
            }
            if (Game1.instance.kills > 20 && pc.laserLevel == 1)
            {
                pc.laserLevel  = 2;
                upgradedLasers = true;
            }
            if (Game1.instance.kills > 40 && pc.laserLevel == 2)
            {
                pc.laserLevel  = 3;
                upgradedLasers = true;
            }

            if (upgradedLasers)
            {
                Entity e = new Entity();
                e.AddComponent(new NotificationComponent("Lasers Improved", 2000, true));
                world.AddEntity(e);
            }

            if (keyboardState.IsKeyDown(Keys.Space) && !player.HasComponent(typeof(ShieldedComponent)))
            {
                Shoot(player);
            }

            if (keyboardState.IsKeyDown(Keys.Left))
            {
                rc.currentTexture = 1;
                sc.motion.X       = -1;
            }
            if (keyboardState.IsKeyDown(Keys.Right))
            {
                rc.currentTexture = 2;
                sc.motion.X       = 1;
            }
            if (keyboardState.IsKeyDown(Keys.Up))
            {
                if (keyboardState.IsKeyUp(Keys.Left) && keyboardState.IsKeyUp(Keys.Right))
                {
                    rc.currentTexture = 0;
                }
                sc.motion.Y = -1;
            }
            if (keyboardState.IsKeyDown(Keys.Down))
            {
                if (keyboardState.IsKeyUp(Keys.Left) && keyboardState.IsKeyUp(Keys.Right))
                {
                    rc.currentTexture = 0;
                }
                sc.motion.Y = 1;
            }
            if (keyboardState.IsKeyUp(Keys.Left) && keyboardState.IsKeyUp(Keys.Right))
            {
                rc.currentTexture = 0;
            }

            sc.motion *= 5;
        }