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); } } } }
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; }