コード例 #1
0
        /// <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();
            }
        }
コード例 #2
0
ファイル: Enemy.cs プロジェクト: GameDotRun/DefendTheBase
        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);
                }
            }
        }
コード例 #3
0
        /// <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();
        }
コード例 #4
0
 //create a call for an effect
 public static void EffectCall(EffectManager.EffectEnums Effect, Vector2 Location, bool spritesheet)
 {
     Add(new Effect(Effect, Location, spritesheet));
 }
コード例 #5
0
    float GetEffectLength(EffectManager.EffectEnums Effect)
    {
        switch(Effect)
        {
            case EffectManager.EffectEnums.Blood:
                return 5000f;
            case EffectManager.EffectEnums.Explosion:
                return 1200f;
        }

        return 0f;
    }
コード例 #6
0
    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;
    }
コード例 #7
0
    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);
    }