public override void Update() { if(!dead) Input(); if (gunType == Globals.LaserShot) MaxFireRate = 128; Position += new Vector2(0, velocityY); velocityY *= FRICTION; if (Position.Y >= 480 - Orgin.Y) { velocityY = 0; } if (!hasSetupKeys) { Globals.SetupKeys(); hasSetupKeys = true; } if (dead) { respawnCount += 1; if (respawnCount % 2 == 0) { for (int i = 0; i < 10; i++ ) GameObjectManager.Add(new Explosion(Position + new Vector2(Globals.Randomizer.Next((int)-Orgin.X*2, (int)Orgin.X*2), Globals.Randomizer.Next((int)-Orgin.Y*2, (int)Orgin.Y*2)))); } Position = new Vector2(Position.X, Globals.Lerp(Position.Y, 620, 0.04f)); if (respawnCount >= MAX_RESPAWN_COUNT && Lives > 0) { dead = false; gunType = () => Globals.SimpelShot(this, this.Speed + 4, -(float)Math.PI / 2, SimpleProjectile.Pattern.Straight); MaxFireRate = 16; respawnCount = 0; InvisibleCount = 128*4; if (Lives == 1) DeActivate(LifeKey.NumLock); if (Lives == 2) DeActivate(LifeKey.CapsLock); if (Lives == 3) DeActivate(LifeKey.ScrollLock); Lives -= 1; Position = new Vector2(400, 240); } } Globals.gameOver = (Lives <= 0); foreach (Enemy e in GameObjectManager.gameObjects.Where(item => item is Enemy)) { if (e.Hitbox.Intersects(Hitbox)) { e.Health = 0; if(InvisibleCount <= 0) dead = true; } } foreach(Projectile p in GameObjectManager.gameObjects.Where(item => item is Projectile)) { if (p.Hitbox.Intersects(Hitbox) && p.enemy) { GameObjectManager.Remove(p); if (InvisibleCount <= 0) dead = true; } } if(laser != null) laser.Update(); fireRate = (fireRate >= MaxFireRate) ? 0 : fireRate; fireRate = (fireRate >= 1) ? fireRate + 1 : fireRate; if (fireRate >= 1 && fireRate <= MaxFireRate / 4 && gunType == Globals.LaserShot) { laser = new Laser(Position, Position + new Vector2(0, -500), new Color(Globals.Randomizer.Next(0, 255), Globals.Randomizer.Next(0, 255), Globals.Randomizer.Next(0, 255), Globals.Randomizer.Next(0, 255)), true); } else { laser = null; } if (InvisibleCount >= 1) { InvisibleCount += 1; if (InvisibleCount >= 128*5) InvisibleCount = 0; } //TurnOffLight(); base.Update(); }
public override void Update() { base.Update(); //gunType = Globals.LaserShot; if (gunType == Globals.LaserShot) MaxFireRate = 128; fireRate = (fireRate >= 1) ? fireRate + 1 : 0; fireRate = (fireRate >= MaxFireRate) ? 0 : fireRate; if(invsibileCount <= MAX_INSIVSIBLECOUNT) invsibileCount += 1; foreach (Enemy e in GameObjectManager.gameObjects.Where(item => item is Enemy)) { if (e.Hitbox.Intersects(Hitbox)) { e.Health = 0; if (invsibileCount > MAX_INSIVSIBLECOUNT) dead = true; } } foreach (Projectile p in GameObjectManager.gameObjects.Where(item => item is Projectile)) { if (p.Hitbox.Intersects(Hitbox) && p.enemy) { GameObjectManager.Remove(p); if (invsibileCount > MAX_INSIVSIBLECOUNT) dead = true; } } foreach(Player p in GameObjectManager.gameObjects.Where(item => item is Player)) { if (p.dead) dead = p.dead; Position = new Vector2(Globals.Lerp(Position.X, p.Position.X + MAX_DISTANCE * Tag, Speed), Globals.Lerp(Position.Y, p.Position.Y, Speed)); } if (dead) { GameObjectManager.Add(new Explosion(Position)); GameObjectManager.Remove(this); } if (laser != null) laser.Update(); if (fireRate >= 1 && fireRate <= 128 / 4 && gunType == Globals.LaserShot) { laser = new Laser(Position, Position + new Vector2((float)Math.Cos(ShootAngle) * 800, (float)Math.Sin(ShootAngle) * 800), new Color(Globals.Randomizer.Next(0, 255), Globals.Randomizer.Next(0, 255), Globals.Randomizer.Next(0, 255), Globals.Randomizer.Next(0, 255)), true); } else { laser = null; } }