public void Update(GameTime gameTime, Vector3 playerPosition) { if (enabled) { weapon.Update(gameTime, position, playerPosition); timeToFire = timeToFire.Subtract(gameTime.ElapsedGameTime); if (timeToFire.TotalSeconds <= 0) { timeToFire = TimeSpan.FromSeconds(2); fireMissile(); } Vector3 oldVel = velocity; oldVel.Normalize(); if (Math.Abs(Vector3.DistanceSquared(position, playerPosition) - 1600) < 90) { velocity = Vector3.Zero; } else if (Vector3.DistanceSquared(position, playerPosition) > 1600) { velocity = playerPosition - position; velocity.Normalize(); } else if (Vector3.DistanceSquared(position, playerPosition) < 1600) { velocity = position - playerPosition; velocity.Normalize(); } } position += velocity; Vector3 newDir = playerPosition - position; newDir.Normalize(); double angle = MathHelper.ToRadians(180) - Math.Atan2(newDir.Z, newDir.X); rotate(new Vector3(0, (float)angle - (float)rotation.Y, 0)); sphere = new BoundingSphere(position, 2); worldMat = Matrix.CreateScale(0.4f) * Matrix.CreateRotationY(rotation.Y) * Matrix.CreateTranslation(position); checkBounds(); }
public virtual void Update(GameTime gameTime) { Player p = entities[0] as Player; if (p.SwitchedFromShield) { for (int j = 0; j < entities.Count; j++) { if (entities[j] is Shield) { entities.Remove(entities[j]); j = 0; } } p.SwitchedFromShield = false; } for (int i = 0; i < entities.Count; i++) { if (!entities[i].isDead) { if (entities[i] is ChargeBall) { ChargeBall cb = entities[i] as ChargeBall; cb.Update(gameTime, p.Position, p.Rotation); } if (entities[i] is Laser) { Laser l = entities[i] as Laser; l.Update(gameTime, p.Position, p.Rotation); } if (entities[i] is Boss) { Boss b = entities[i] as Boss; b.Update(gameTime, p.Position); } if (entities[i] is ClotSide) { ClotSide cs = entities[i] as ClotSide; cs.Update(gameTime, velocity); } if (entities[i] is Infector) { Infector inf = entities[i] as Infector; inf.Update(gameTime, p.Position); } if (entities[i] is TokenPickup) { TokenPickup tp = entities[i] as TokenPickup; tp.Update(gameTime); } if (entities[i] is PlayerWeapon) { PlayerWeapon w = entities[i] as PlayerWeapon; w.Update(gameTime, p.Position, p.Rotation); } if (entities[i] is BotWeapon) { BotWeapon bw = entities[i] as BotWeapon; bw.Update(gameTime, p.Position, p.Rotation); } if (entities[i] is Shield) { Shield s = entities[i] as Shield; s.Update(gameTime, p.Velocity, p.controls.isPlayerFiring()); } if (entities[i] is LatchingCell || entities[i] is MeleeBot || entities[i] is MissileBot) { if (entities[i] is LatchingCell) { LatchingCell lc = entities[i] as LatchingCell; lc.Update(gameTime, p.Position); } else if (entities[i] is MeleeBot) { MeleeBot mb = entities[i] as MeleeBot; mb.Update(gameTime, p.Position); } else { MissileBot missBot = entities[i] as MissileBot; missBot.Update(gameTime, p.Position); } } entities[i].Update(gameTime); } else { if (entities[i] is EnemiesAndPlayer) { EnemiesAndPlayer ep = entities[i] as EnemiesAndPlayer; if (ep.killedBy()) { p.addScore(ep.Score); p.AddPowerup(15); if (ep is MeleeBot || ep is MissileBot) { if (random.Next(2) == 0) { Add(new TokenPickup(content, ep.Position)); } } } } entities.Remove(entities[i]); } } }