/// <summary> /// Updates the enemies and checks for destroyed enemies /// </summary> public static void Update(GameTime gt) { foreach (Enemy Enemy in Enemies) { if (Enemy.IsDestroyed) { WaveManager.WaveEnemiesUsed++; if (Enemy.hitPoints <= 0) // check if it was destroyed by means of towers { GameManager.EnemyWasDestroyed(Enemy.EnemyType); // resource acquisition if (Enemy.EnemyType == "Helicopter") { EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.Helicopter.Width / 2, Art.Helicopter.Height / 2), true); } if (Enemy.EnemyType == "Transport") { for (float i = 0; i < 4; i++) { WaveManager.WaveEnemiesUsed--; SpawnEnemy("Soldier", Enemy.enemyVect - new Vector2(Enemy.Direction.X * -i / 4, Enemy.Direction.Y * -i / 4)); EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.Transport.Width / 2, Art.Transport.Height / 2), true); } } else if (Enemy.EnemyType == "Tank") { for (float i = 0; i < 2; i++) { WaveManager.WaveEnemiesUsed--; SpawnEnemy("Soldier", Enemy.enemyVect - new Vector2(Enemy.Direction.X * -i / 4, Enemy.Direction.Y * -i / 4)); EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.TankBottom.Width / 2, Art.TankBottom.Height / 2), true); } } else if (Enemy.EnemyType == "Jeep") { for (float i = 0; i < 1; i++) { WaveManager.WaveEnemiesUsed--; SpawnEnemy("Soldier", Enemy.enemyVect - new Vector2(Enemy.Direction.X * -i / 4, Enemy.Direction.Y * -i / 4)); EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.JeepBottom.Width / 2, Art.JeepBottom.Height / 2), true); } } else if (Enemy.EnemyType == "Soldier") { EffectManager.EffectCall(EffectManager.EffectEnums.Blood, Enemy.ScreenPos, false); } } DestroyEnemy(Enemy.EnemyID, Enemy.EnemyType); break; } else { Enemy.Update(GameManager.grid.gridStatus, gt); //updates the enemy } } foreach (Projectile proj in TankTurret.EnemyProjectiles) //updates the projectiles of enemy { proj.Update(); } }
public void Update(Grid.gridFlags endPoint, GameTime gameTime) { time = (float)gameTime.ElapsedGameTime.TotalSeconds; //check for out of bounds, only really occurs when they are spawned from a destroyed vehicle as the vehicle is turning if (enemyVect.X >= 20) { enemyVect.X = 19; } if (enemyVect.Y >= 15) { enemyVect.Y = 14; } if (enemyVect.X < 0) { enemyVect.X = 0; } if (enemyVect.Y < 0) { enemyVect.Y = 0; } currentCoord = new Coordinates((int)enemyVect.X, (int)enemyVect.Y); if (enemyVect != null) { moving = PathMove(GameManager.grid.gridSquares, GameManager.HEIGHT, GameManager.WIDTH, ref enemyVect, ref ScreenPos, speed, time, Direction, EnemyType); } if (GameManager.ENDPOINT != null) { if (currentCoord.CoordEqual(GameManager.ENDPOINT)) { IsDestroyed = true; GameManager.BaseHealth -= damage; } } if (hitPoints <= 0) { IsDestroyed = true; } // Get screen pixel position from Grid Coordinates (enemyVect). if (moving) { ScreenPos = new Vector2((int)GameManager.grid.gridBorder.X + (enemyVect.X * GameManager.SQUARESIZE) + GameManager.SQUARESIZE / 2, (int)GameManager.grid.gridBorder.Y + (enemyVect.Y * GameManager.SQUARESIZE) + GameManager.SQUARESIZE / 2); } else { enemyVect.X = (float)Math.Round(enemyVect.X); enemyVect.Y = (float)Math.Round(enemyVect.Y); } if (EnemyType == "Tank" || EnemyType == "Jeep") { TurretDirection = TankTurret.Update(this); } Vector2 NextScreenPos = new Vector2((int)GameManager.grid.gridBorder.X + (nextCoord.x * GameManager.SQUARESIZE + 0.1f), (int)GameManager.grid.gridBorder.Y + (nextCoord.y * GameManager.SQUARESIZE)); Direction = Movement; if (!towerInRange) { TurretDirection = Direction; //float nextTurretDirection = Direction.ToAngle(); //// LERPING HERE //turretRotation = Extensions.CurveAngle(turretRotation, nextTurretDirection, 0.3f); //TurretDirection = turretRotation.ToVector(); } if (usingSpriteSheet) { EffectManager.spriteSheetUpdate(ref spriteSheetNo, ref animElasped, targetElasped, sheetFrameTotal, gameTime); if (EnemyType == "Soldier") { SourceRect = new Rectangle(0, spriteSheetNo * Art.Soldier.Height / (sheetFrameTotal + 1), Art.Soldier.Width, Art.Soldier.Height / (sheetFrameTotal + 1)); } else if (EnemyType == "Helicopter") { SourceRect = new Rectangle(spriteSheetNo * Art.Helicopter.Width / (sheetFrameTotal + 1), 0, Art.Helicopter.Width / (sheetFrameTotal + 1), Art.Helicopter.Height); } } }
/// <summary> /// Updates the enemies and checks for destroyed enemies /// </summary> public static void Update(GameTime gt) { if (WaveManager.WaveNumber > 10) { SpawnSoldierString = "SoldierBlue"; } if (WaveManager.WaveNumber > 20) { SpawnSoldierString = "SoldierRed"; } foreach (Enemy Enemy in Enemies) { if (Enemy.IsDestroyed) { if (Enemy.hitPoints <= 0) // check if it was destroyed by means of towers { WaveManager.EnemiesKilled++; GameManager.EnemyWasDestroyed(Enemy.EnemyType); // resource acquisition if (Enemy.EnemyType == "Helicopter") { EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2((Art.Helicopter.Width / 4) / 2, Art.Helicopter.Height / 2), true); Sound.Explosion.Play(GameManager.MASTER_VOL * GameManager.SOUNDFX_VOL * 0.5f, 0f, 0f); } if (Enemy.EnemyType == "Transport") { for (float i = 0; i < 4; i++) { SpawnEnemy(SpawnSoldierString, Enemy.enemyVect - new Vector2(Enemy.Direction.X * -i / 4, Enemy.Direction.Y * -i / 4)); EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.Transport.Width / 2, Art.Transport.Height / 2), true); } Sound.Explosion.Play(GameManager.MASTER_VOL * GameManager.SOUNDFX_VOL * 0.5f, 0f, 0f); } else if (Enemy.EnemyType == "Tank") { for (float i = 0; i < 2; i++) { SpawnEnemy(SpawnSoldierString, Enemy.enemyVect - new Vector2(Enemy.Direction.X * -i / 4, Enemy.Direction.Y * -i / 4)); EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.TankBottom.Width / 2, Art.TankBottom.Height / 2), true); } Sound.Explosion.Play(GameManager.MASTER_VOL * GameManager.SOUNDFX_VOL * 0.5f, 0f, 0f); } else if (Enemy.EnemyType == "Jeep") { for (float i = 0; i < 1; i++) { SpawnEnemy(SpawnSoldierString, Enemy.enemyVect - new Vector2(Enemy.Direction.X * -i / 4, Enemy.Direction.Y * -i / 4)); EffectManager.EffectCall(EffectManager.EffectEnums.Explosion, Enemy.ScreenPos - new Vector2(Art.JeepBottom.Width / 2, Art.JeepBottom.Height / 2), true); } Sound.Explosion.Play(GameManager.MASTER_VOL * GameManager.SOUNDFX_VOL * 0.5f, 0f, 0f); } else if (Enemy.EnemyType == "Soldier") { EffectManager.EffectCall(EffectManager.EffectEnums.Blood, Enemy.ScreenPos + new Vector2(GameManager.rnd.Next(-5, 6), GameManager.rnd.Next(-5, 6)), false); if (GameManager.rnd.Next(1, 100) < 25) { Sound.WilhelmScream.Play(GameManager.MASTER_VOL * GameManager.SOUNDFX_VOL * 0.5f, 0f, 0f); } } } //DestroyEnemy(Enemy, Enemy.EnemyType, Enemy.EnemyID); EnemiesToRemove.Add(Enemy); } if (float.IsNaN(Enemy.enemyVect.X) || float.IsNaN(Enemy.enemyVect.Y)) // This needs testing... { //DestroyEnemy(Enemy, Enemy.EnemyType, Enemy.EnemyID); EnemiesToRemove.Add(Enemy); //WaveManager.WaveEnemiesUsed++; } else { Enemy.Update(GameManager.grid.gridStatus, gt); //updates the enemy } } foreach (Projectile proj in TankTurret.EnemyProjectiles) //updates the projectiles of enemy { proj.Update(); } // Remove Projectiles after lifetime. for (int i = 0; i < TankTurret.EnemyProjectiles.Count(); i++) { if (TankTurret.EnemyProjectiles[i].TimeSinceSpawn > TankTurret.EnemyProjectiles[i].Lifetime) { TankTurret.EnemyProjectiles.RemoveAt(i); } } foreach (Enemy enemy in EnemiesToAdd) { Enemies.Add(enemy); } foreach (Enemy enemy in EnemiesToRemove) { DestroyEnemy(enemy, enemy.EnemyType, enemy.EnemyID); } EnemiesToAdd.Clear(); EnemiesToRemove.Clear(); }
//create a call for an effect public static void EffectCall(EffectManager.EffectEnums Effect, Vector2 Location, bool spritesheet) { Add(new Effect(Effect, Location, spritesheet)); }
float GetEffectLength(EffectManager.EffectEnums Effect) { switch(Effect) { case EffectManager.EffectEnums.Blood: return 5000f; case EffectManager.EffectEnums.Explosion: return 1200f; } return 0f; }
Texture2D GetEffect(EffectManager.EffectEnums Effect) { switch(Effect) { case EffectManager.EffectEnums.Blood: Zlevel = 0; return Art.BloodSplats; case EffectManager.EffectEnums.Explosion: totalframes = 16; frame = 0; elasped = 0; totalTime = 75f; Zlevel = 1; return Art.Explosions; } return null; }
public Effect(EffectManager.EffectEnums Effect, Vector2 Location, bool Spritesheet) { EffectE = Effect; effectTex = GetEffect(Effect); effectLength = GetEffectLength(Effect); location = Location; spriteSheet = Spritesheet; Timer = new UiTimer(effectLength); }