//Updating enemies
        internal void Update(float a_elapsedTime)
        {
            m_enemyProjectiles.RemoveAll(x => x.Active == false);

            foreach (Enemy enemy in m_enemies)
            {
                if (!m_player.IsAlive)
                {
                    enemy.IsAlive = true;
                }

                //Fall & jump mechanics
                //Needs to be updated before Vertical collision
                if (!enemy.IsOnGround && !enemy.IsJumping)
                {
                    enemy.Obj.Bounds.Y += Convert.ToInt32(a_elapsedTime * enemy.Speed.X);
                }

                if ((enemy.EnemyType == Enemy.Type.Jumper || enemy.EnemyType == Enemy.Type.Shooter) && enemy.IsAlive)
                {
                    if (enemy.IsJumping)
                    {
                        enemy.IsOnGround    = false;
                        enemy.Obj.Bounds.Y -= (int)enemy.Speed.Y;
                        enemy.SpeedY       -= a_elapsedTime / 0.10f;
                    }
                    //Updating jump mechanics within the enemy object
                    enemy.Update(a_elapsedTime);
                }

                //Collision handeling; Vertical
                m_level.CheckVerticalCollision(enemy);

                if (enemy.IsAlive)
                {
                    enemy.Visibility = 1;

                    //Updating logic for enemy type; Shooter
                    if (enemy.EnemyType == Enemy.Type.Shooter)
                    {
                        #region Shooter
                        bool leftDirection = m_player.Rectangle.Center.X < enemy.Rectangle.Center.X;

                        if (enemy.ProjectileCoolDown <= 0)
                        {
                            int shotSpawn;
                            if (leftDirection)
                            {
                                shotSpawn = enemy.Rectangle.Left;
                            }
                            else
                            {
                                shotSpawn = enemy.Rectangle.Right;
                            }

                            m_enemyProjectiles.Add(new Projectile(shotSpawn, enemy.Rectangle.Center.Y - 5, leftDirection));
                            enemy.ProjectileCoolDown = 2;
                        }
                        else
                        {
                            enemy.ProjectileCoolDown -= a_elapsedTime;
                        }

                        if ((enemy.ProjectileCoolDown < 0.5 || enemy.ProjectileCoolDown > 1.5))
                        {
                            if (leftDirection)
                            {
                                enemy.UnitState = State.ID.JUMPING_LEFT;
                            }
                            else
                            {
                                enemy.UnitState = State.ID.JUMPING_RIGHT;
                            }
                        }
                        else
                        {
                            if (leftDirection)
                            {
                                enemy.UnitState = State.ID.FACING_LEFT;
                            }
                            else
                            {
                                enemy.UnitState = State.ID.FACING_RIGHT;
                            }
                        }
                        #endregion
                    }

                    //Updating logic for enemy type; Crawler and Jumper
                    #region Crawler & Jumper horizontal movments
                    if ((enemy.UnitState != State.ID.MOVING_RIGHT && enemy.UnitState != State.ID.MOVING_LEFT) && enemy.EnemyType != Enemy.Type.Shooter)
                    {
                        enemy.UnitState = State.ID.MOVING_RIGHT;
                    }
                    if (enemy.UnitState == State.ID.MOVING_RIGHT)
                    {
                        enemy.Obj.Bounds.X += Convert.ToInt32(a_elapsedTime * enemy.Speed.X);
                    }
                    else if (enemy.UnitState == State.ID.MOVING_LEFT)
                    {
                        enemy.Obj.Bounds.X -= Convert.ToInt32(a_elapsedTime * enemy.Speed.X);
                    }
                    #endregion

                    if (m_level.DidReachTurningPoint(enemy))
                    {
                        if (enemy.UnitState == State.ID.MOVING_RIGHT)
                        {
                            enemy.UnitState = State.ID.MOVING_LEFT;
                        }
                        else
                        {
                            enemy.UnitState = State.ID.MOVING_RIGHT;
                        }
                    }
                    CheckPlayerCollision(enemy);
                }
                else
                {
                    enemy.Visibility = enemy.Visibility - 0.01f;
                }
            }

            //Updating all projectiles generated from enemy type; Shooter
            foreach (Projectile projectile in m_enemyProjectiles)
            {
                if (projectile.DirectionLeft)
                {
                    projectile.X -= Convert.ToInt32(a_elapsedTime * projectile.Speed);
                }
                else
                {
                    projectile.X += Convert.ToInt32(a_elapsedTime * projectile.Speed);
                }
                if (projectile.Rec.Intersects(m_player.Rectangle))
                {
                    m_player.LostLife();
                }
            }
        }