示例#1
0
        // NOTE: PLAYER ITEM COLLISION IS IN THE ITEM MANAGER - instantiated as mainIM in Game1 class.



        // MAIN FUNCTIONS


        public void Update(GameTime gameTime, GamePadState state, AreaInterface areaPoly, InformationDisplay mainID)
        {
            int playerSpeed = 4;             // player speed set

            if (_hasAnimationReset == true)
            {
                timeSinceLastFrame = 0;                 // resets animation
            }


            // CHECK MOVE MANAGER FUNCTIONS RETURN WHETHER THE PLAYER CAN MOVE IN THE DIRECTION THEY ARE FACING
            bool checkMove = false;


            checkMove = areaPoly.checkMoveManager(Rect());             // check whether the move is valid



            // CHECK EXIT MANAGER FUNCTIONS RETURN WHETHER THE PLAYER WILL MOVE INTO ANOTHER SECTION OF THE OVERWORLD OR DUNGEON
            string checkExit = "";

            if (mainID.EnergyBarrierStatus == false)             // CHANGE THIS TO JUST FALSE
            {
                if (_inOverworld == true)
                {
                    checkExit = areaPoly.checkExitManager(Rect(), CurrentOWSec);                     // checks to see if the player is near an exit
                }
                else
                {
                    checkExit = areaPoly.checkExitManager(Rect(), CurrentDUNSec);                     // checks to see if the player is near an exit
                }
            }


            // COLLISION WITH ENEMY ENTITIES
            bool checkEnemyCollision = false;

            if (areaPoly.EnemyList != null)
            {
                if (areaPoly.EnemyList.Count > 0)
                {
                    checkEnemyCollision = PlayerEnemyCollision(areaPoly);

                    PlayerEnemyWeaponCollision(areaPoly);                     // collisions with enemy weapons
                }
            }



            if (checkMove == false && checkEnemyCollision == false)
            {
                _drawPos = _entityPos;
            }                                                                                              // set draw coordaintes to equal the entity coordinates as they are valid.
            if ((checkMove == true || checkEnemyCollision == true) && _allowEntityDirChange == true)
            {
                _entityPos = _drawPos;
            }                                                                                                                               // Opposite to previous comment as they are not valid.


            // If statements and logic for the player traveling between areas

            if (_inOverworld == true)                                                                                             // if the player is in the overworld
            {
                bool checkDunEntrance = areaPoly.checkDunEntranceManager(_entityPos, _Height, _Width, ref _currentDungeonNumber); // check if the player has gone through dungeon entrance

                if (checkDunEntrance == true)
                {
                    if (areaPoly.EnemyList != null)
                    {
                        areaPoly.EnemyList.Clear();                         // clear the enemy list
                    }

                    _inDungeon      = true;                // enter the dungeon
                    _inOverworld    = false;
                    _inBossLevel    = false;
                    _hasChangedArea = true;

                    // default perameters/values for dungeons

                    _currentDUNSec  = new Vector2(2, 3);
                    _previousDUNSec = new Vector2(2, 3);

                    if (_currentDungeonNumber == 1)
                    {
                        _entityPos = new Vector2(288 - _Width, 650);
                        _drawPos   = _entityPos;
                    }

                    if (_currentDungeonNumber == 2)
                    {
                        _entityPos = new Vector2(288 - _Width, 650);
                        _drawPos   = _entityPos;
                    }

                    if (_currentDungeonNumber == 3)
                    {
                        _entityPos = new Vector2(288 - _Width, 650);
                        _drawPos   = _entityPos;
                    }
                }
            }


            if (_inDungeon == true)                                       // if the player is in a dungeon
            {
                bool checkDunExit = areaPoly.checkDunExitManager(Rect()); // check to see if player has collided with dungeon exit

                if (checkDunExit == true)
                {
                    if (areaPoly.EnemyList != null)
                    {
                        areaPoly.EnemyList.Clear();                         // clear the enemy list
                    }

                    // change area to overworld
                    _inDungeon      = false;
                    _inOverworld    = true;
                    _inBossLevel    = false;
                    _hasChangedArea = true;


                    // Set default entity position for overworld section to avoid collisions with structure
                    if ((int)_currentOWSec.X == 4 && (int)_currentOWSec.Y == 2)
                    {
                        _entityPos = new Vector2(366, 496);
                    }

                    if ((int)_currentOWSec.X == 1 && (int)_currentOWSec.Y == 0)
                    {
                        _entityPos = new Vector2(366, 496);
                    }

                    if ((int)_currentOWSec.X == 0 && (int)_currentOWSec.Y == 4)
                    {
                        _entityPos = new Vector2(510, 544);
                    }

                    _drawPos = _entityPos;
                }


                bool checkBossLevelEntrance = areaPoly.checkBossLevelEntranceManager(Rect());                 // check if player rectangle collides with BossLevel entrance

                if (checkBossLevelEntrance == true && mainID.EnergyBarrierStatus == false)
                {
                    // Change area to BossLevel
                    _inDungeon      = false;
                    _inOverworld    = false;
                    _inBossLevel    = true;
                    _hasChangedArea = true;

                    _entityPos = new Vector2(((720 / 2) - _Width), 520);                     // Default position when entering a boss level
                }
            }

            if (_inBossLevel == true)                         // player is located in BosLevel
            {
                if (areaPoly.CheckCompletedDungeon() == true) // check to see if dungeon has been completed
                {
                    _completedDungeons[areaPoly.GetBossLevelNumber() - 1] = true;
                    _justCompletedDungeon = true;

                    if (areaPoly.EnemyList != null)
                    {
                        areaPoly.EnemyList.Clear();                         // clear the enemy list
                    }

                    // Change location to the Overworld
                    _inDungeon      = false;
                    _inOverworld    = true;
                    _inBossLevel    = false;
                    _hasChangedArea = true;


                    // Default values when exiting BossLevel
                    if ((int)_currentOWSec.X == 4 && (int)_currentOWSec.Y == 2)
                    {
                        _entityPos = new Vector2(366, 496);
                    }

                    if ((int)_currentOWSec.X == 1 && (int)_currentOWSec.Y == 0)
                    {
                        _entityPos = new Vector2(366, 496);
                    }

                    if ((int)_currentOWSec.X == 0 && (int)_currentOWSec.Y == 4)
                    {
                        _entityPos = new Vector2(510, 544);
                    }

                    _drawPos = _entityPos;
                }
            }


            // Player weapon hit detection
            if (_playerHit == true)
            {
                if (_hitTime < 1)
                {
                    _Health -= 10;                     // deduct 10 health from the player

                    if (_Health <= 0)
                    {
                        _Health         = 0;
                        mainID.GameOver = true;                         // health is 0 so GameOver.
                    }
                }

                // Animation for player hit
                _hitTime           += gameTime.ElapsedGameTime.Milliseconds; // add time to variable
                timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds; // add time to variable
                Animation(gameTime, ref timeSinceLastFrame);                 // animate through the sprite sheet when moving

                // Check recovery
                if (_hitTime >= _recoveryTime)
                {
                    _playerHit = false;
                    _hitTime   = 0;
                }
            }



            // Switch Player Weapons
            if (_allowEntityMovement == true && mainID.RegisterSelectPress == true && _playerWeaponFiring == false)
            {
                if (state.Buttons.LeftStick == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.S) == true)
                {
                    WeaponOptNum++;                     // increase weapon option by 1

                    while (true)
                    {
                        if (WeaponOptNum > 4 || WeaponOptNum < 1)
                        {
                            WeaponOptNum = 1;                             // Reset Weapon Option Number to 1
                        }

                        // Change player weapon based on Weapon Option Number (Changed when player uses S key or SELECT button)
                        if (WeaponOptNum == 1)                         // Default weapon, accessible by all players
                        {
                            _currentWeapon = "Sword";
                            break;
                        }
                        // For the next weapons, they are only avaliable on the condition that a specific dungeon has been completed.
                        if (WeaponOptNum == 2 && CompletedDungeons[0] == true)
                        {
                            _currentWeapon = "Seed";
                            break;
                        }
                        if (WeaponOptNum == 3 && CompletedDungeons[1] == true)
                        {
                            _currentWeapon = "FireBall";
                            break;
                        }
                        if (WeaponOptNum == 4 && CompletedDungeons[2] == true)
                        {
                            _currentWeapon = "WaterBall";
                            break;
                        }

                        WeaponOptNum++;                         // increment the option by one, go back through loop.
                    }

                    ChangeWeapon();                     // Change the weapon and set objects
                    mainID.RegisterSelectPress = false; // Only allow one press of select or S key/button at a time.
                }
            }



            /// Player Movement and Overworld/Dungeon Section Exits

            if (_allowEntityDirChange == true && _allowEntityMovement == true && _entityPos == _drawPos)
            {             // If movement is allowed and player's coordinates are valid.
                if (state.IsButtonDown(Buttons.LeftThumbstickUp) || Keyboard.GetState().IsKeyDown(Keys.Up) || state.IsButtonDown(Buttons.LeftThumbstickDown) || Keyboard.GetState().IsKeyDown(Keys.Down) ||
                    state.IsButtonDown(Buttons.LeftThumbstickLeft) || Keyboard.GetState().IsKeyDown(Keys.Left) || state.IsButtonDown(Buttons.LeftThumbstickRight) ||
                    Keyboard.GetState().IsKeyDown(Keys.Right))
                {                                                                // If any movement key is currently being pressed
                    timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds; // add time to time since last frame
                    Animation(gameTime, ref timeSinceLastFrame);                 // Call animation function

                    // use information from CheckExit function if a value was returned
                    if (checkExit == "EXIT U" || checkExit == "EXIT D" || checkExit == "EXIT L" || checkExit == "EXIT R")
                    {
                        if (_inOverworld == true)
                        {
                            _previousOWSec     = new Vector2((int)_currentOWSec.X, (int)_currentOWSec.Y); // set previous overworld section
                            areaPoly.ChangeSec = true;                                                    // changing section
                            areaPoly.GeneratePreStructure((int)_previousOWSec.X, (int)_previousOWSec.Y);  // Generate the structure of the previous section
                            _visitedOWSections[(int)_previousOWSec.X, (int)_previousOWSec.Y] = true;      // the player has now visited the section
                        }

                        if (_inDungeon == true)
                        {
                            _previousDUNSec    = new Vector2((int)_currentDUNSec.X, (int)_currentDUNSec.Y); // set previous dungeon section
                            areaPoly.ChangeSec = true;                                                      // changing section
                            areaPoly.GeneratePreStructure((int)_previousDUNSec.X, (int)_previousDUNSec.Y);  // Generate the structure of the previous section
                            // the player has now visited the section, check which dungeon number section is in.
                            if (_currentDungeonNumber == 1)
                            {
                                _visitedDUN1Sections[(int)_previousDUNSec.X, (int)_previousDUNSec.Y] = true;
                            }
                            if (_currentDungeonNumber == 2)
                            {
                                _visitedDUN2Sections[(int)_previousDUNSec.X, (int)_previousDUNSec.Y] = true;
                            }
                            if (_currentDungeonNumber == 3)
                            {
                                _visitedDUN3Sections[(int)_previousDUNSec.X, (int)_previousDUNSec.Y] = true;
                            }
                        }
                    }
                }


                // MOVING BETWEEN SECTIONS OF THE OVERWORLD OR DUNGEONS

                // Direction depending on button pressed.

                if (state.IsButtonDown(Buttons.LeftThumbstickUp) || Keyboard.GetState().IsKeyDown(Keys.Up)) // this is the d-pad on some controllers
                {
                    _orientation = 'U';                                                                     // player is facing upwards

                    if (checkExit == "EXIT U")                                                              // player exits the overworld section up
                    {
                        if (_inOverworld == true)
                        {
                            _currentOWSec = new Vector2((int)_currentOWSec.X, (int)_currentOWSec.Y - 1);                             // move upwards by a section
                        }

                        if (_inDungeon == true)
                        {
                            _currentDUNSec = new Vector2((int)_currentDUNSec.X, (int)_currentDUNSec.Y - 1);                             // move upwards by a section
                        }

                        _entityPos = new Vector2(_entityPos.X, 670 - _Height);  // Set location player will spawn in the new section

                        areaPoly.ChangeDirection = 'U';                         // which direction is the new section in.
                    }

                    if (checkMove == false && checkEnemyCollision == false && mainID.GameOver == false)
                    {
                        _entityPos = new Vector2(_entityPos.X, _entityPos.Y - playerSpeed);                         // allow the player to move upwards 3 pixels at a time for each call of function
                    }
                }


                else if (state.IsButtonDown(Buttons.LeftThumbstickDown) || Keyboard.GetState().IsKeyDown(Keys.Down))
                {
                    _orientation = 'D';

                    if (checkExit == "EXIT D")                     // player exits the overworld section down
                    {
                        if (_inOverworld == true)
                        {
                            _currentOWSec = new Vector2((int)_currentOWSec.X, (int)_currentOWSec.Y + 1);                             // move downwards by a section
                        }

                        if (_inDungeon == true)
                        {
                            _currentDUNSec = new Vector2((int)_currentDUNSec.X, (int)_currentDUNSec.Y + 1);                             // move downwards by a section
                        }

                        _entityPos = new Vector2(_entityPos.X, 126);                         // Set location player will spawn in the new section
                        areaPoly.ChangeDirection = 'D';
                    }

                    if (checkMove == false && checkEnemyCollision == false && mainID.GameOver == false)
                    {
                        _entityPos = new Vector2(_entityPos.X, _entityPos.Y + playerSpeed);
                    }
                }

                else if (state.IsButtonDown(Buttons.LeftThumbstickLeft) || Keyboard.GetState().IsKeyDown(Keys.Left))
                {
                    _orientation = 'L';

                    if (checkExit == "EXIT L")                     // player exits the overworld section left
                    {
                        if (_inOverworld == true)
                        {
                            _currentOWSec = new Vector2((int)_currentOWSec.X - 1, (int)_currentOWSec.Y);                             // move left by a section
                        }

                        if (_inDungeon == true)
                        {
                            _currentDUNSec = new Vector2((int)_currentDUNSec.X - 1, (int)_currentDUNSec.Y);                             // move left by a section
                        }

                        _entityPos = new Vector2(680, _entityPos.Y);                         // Set location player will spawn in the new section
                        areaPoly.ChangeDirection = 'L';
                    }


                    if (checkMove == false && checkEnemyCollision == false && mainID.GameOver == false)
                    {
                        _entityPos = new Vector2(_entityPos.X - playerSpeed, _entityPos.Y);
                    }
                }

                else if (state.IsButtonDown(Buttons.LeftThumbstickRight) || Keyboard.GetState().IsKeyDown(Keys.Right))
                {
                    _orientation = 'R';

                    if (checkExit == "EXIT R")                     // player exits the overworld section right
                    {
                        if (_inOverworld == true)
                        {
                            _currentOWSec = new Vector2((int)_currentOWSec.X + 1, (int)_currentOWSec.Y);                             // move right by a section
                        }

                        if (_inDungeon == true)
                        {
                            _currentDUNSec = new Vector2((int)_currentDUNSec.X + 1, (int)_currentDUNSec.Y);                             // move right by a section
                        }

                        _entityPos = new Vector2(30, _entityPos.Y);                         // Set location player will spawn in the new section
                        areaPoly.ChangeDirection = 'R';
                    }

                    if (checkMove == false && checkEnemyCollision == false && mainID.GameOver == false)
                    {
                        _entityPos = new Vector2(_entityPos.X + playerSpeed, _entityPos.Y);
                    }
                }
            }

            _allowEntityDirChange = true;

            /// END OF PLAYER MOVEMENT AND SECTION EXITS



            // PLAYER WEAPON FIRE

            if (_allowWeaponFire == true && areaPoly.ChangeSec == false && mainID.GameOver == false)
            {
                _timeSincePlayerWeaponFire += gameTime.ElapsedGameTime.TotalMilliseconds;                 // add time to player weapon fire


                if (state.IsButtonDown(Buttons.A) || Keyboard.GetState().IsKeyDown(Keys.B))                 // A button is Keys.B on controller used for development
                {
                    if (_newPlayerWeaponFire == true)
                    {
                        _timeSincePlayerWeaponFire = 0;                         // reset timer
                        _playerWeaponFiring        = true;
                        _drawWeapon = true;
                        if (_currentWeapon == "Sword")
                        {
                            _playerWeapon.SetWeaponCoordinates(_entityPos);                             // set the weapons coordinates to fire from the players location
                            _playerWeapon.SetWeaponOrientation(_orientation);                           // Set the weapon ordientation in the direction the player is facing
                        }

                        if (_currentWeapon == "Seed")
                        {
                            _playerWeapon.SetWeaponCoordinates(_entityPos);                             // set the weapons coordinates to fire from the players location
                            _playerWeapon.SetWeaponOrientation(_orientation);                           // Set the weapon ordientation in the direction the player is facing
                        }

                        if (_currentWeapon == "FireBall")
                        {
                            _playerWeapon.SetWeaponCoordinates(_entityPos);                             // set the weapons coordinates to fire from the players location
                            _playerWeapon.SetWeaponOrientation(_orientation);                           // Set the weapon ordientation in the direction the player is facing
                        }

                        if (_currentWeapon == "WaterBall")
                        {
                            _playerWeapon.SetWeaponCoordinates(_entityPos);                             // set the weapons coordinates to fire from the players location
                            _playerWeapon.SetWeaponOrientation(_orientation);                           // Set the weapon ordientation in the direction the player is facing
                        }
                    }
                }


                // Fire Player Weapon
                if (_timeSincePlayerWeaponFire <= 410 && _playerWeaponFiring == true)
                {
                    _newPlayerWeaponFire = false;

                    _playerWeapon.FireWeapon();                     // Fire the weapon

                    // Set coordinates of player weapon based on direction
                    if (_playerWeapon.GetWeaponOrientation() == 'U')
                    {
                        _playerWeapon.SetWeaponCoordinates(new Vector2(_playerWeapon.GetWeaponCoordinates().X, _playerWeapon.GetWeaponCoordinates().Y - 7));
                    }

                    if (_playerWeapon.GetWeaponOrientation() == 'D')
                    {
                        _playerWeapon.SetWeaponCoordinates(new Vector2(_playerWeapon.GetWeaponCoordinates().X, _playerWeapon.GetWeaponCoordinates().Y + 7));
                    }

                    if (_playerWeapon.GetWeaponOrientation() == 'L')
                    {
                        _playerWeapon.SetWeaponCoordinates(new Vector2(_playerWeapon.GetWeaponCoordinates().X - 7, _playerWeapon.GetWeaponCoordinates().Y));
                    }

                    if (_playerWeapon.GetWeaponOrientation() == 'R')
                    {
                        _playerWeapon.SetWeaponCoordinates(new Vector2(_playerWeapon.GetWeaponCoordinates().X + 7, _playerWeapon.GetWeaponCoordinates().Y));
                    }
                }
                if (_timeSincePlayerWeaponFire > 400 && _timeSincePlayerWeaponFire <= 450 && _playerWeaponFiring == true)                 // stop displaying and firing weapon
                {
                    _playerWeaponFiring = false;
                    _drawWeapon         = false;
                }
                if (_timeSincePlayerWeaponFire > 500 && _playerWeaponFiring == false) // weapon cooldown
                {
                    _timeSincePlayerWeaponFire = 0;                                   // reset
                    _newPlayerWeaponFire       = true;
                }
            }
        }
        public void Update(GameTime gameTime, AreaInterface areaInt, Player mainPlayer, InformationDisplay mainID)
        {
            Random R = new Random();                          // Random generator

            for (int i = 0; i < areaInt.EnemyList.Count; i++) // goes through the EnemyList which has the objects of all the enimies in an area.
            {
                List <EnemyInterface> EnemyList = areaInt.EnemyList;

                Rectangle WeaponRect = EnemyList[i].EnemyWeapon.GetWeaponRect();


                /// Enemy Weapons

                if (EnemyList[i].EnemyWeapon.WeaponFireTimeMax != 0)                                                                           // maximum weapon fire time cannot be 0
                {
                    EnemyList[i].EnemyWeapon.WeaponFireTime = EnemyList[i].EnemyWeapon.WeaponFireTime + gameTime.ElapsedGameTime.Milliseconds; // Increment weapon fire time
                }

                if (areaInt.EnemyList[i].EnemyWeapon.WeaponFireTime > 0 && areaInt.EnemyList[i].EnemyWeapon.WeaponFireTime <= areaInt.EnemyList[i].EnemyWeapon.WeaponFireTimeMax)
                {
                    areaInt.EnemyList[i].DrawWeapon = true;                     // Draw the enemies weapon

                    // Set the weapon coordinates to the position of the enemy depending on direction.
                    if (EnemyList[i].EnemyWeapon.GetWeaponOrientation() == 'U')
                    {
                        EnemyList[i].EnemyWeapon.SetWeaponCoordinates(new Vector2(areaInt.EnemyList[i].EnemyWeapon.GetWeaponCoordinates().X, EnemyList[i].EnemyWeapon.GetWeaponCoordinates().Y - 7));
                    }

                    if (EnemyList[i].EnemyWeapon.GetWeaponOrientation() == 'D')
                    {
                        EnemyList[i].EnemyWeapon.SetWeaponCoordinates(new Vector2(EnemyList[i].EnemyWeapon.GetWeaponCoordinates().X, EnemyList[i].EnemyWeapon.GetWeaponCoordinates().Y + 7));
                    }

                    if (EnemyList[i].EnemyWeapon.GetWeaponOrientation() == 'L')
                    {
                        EnemyList[i].EnemyWeapon.SetWeaponCoordinates(new Vector2(EnemyList[i].EnemyWeapon.GetWeaponCoordinates().X - 7, EnemyList[i].EnemyWeapon.GetWeaponCoordinates().Y));
                    }

                    if (EnemyList[i].EnemyWeapon.GetWeaponOrientation() == 'R')
                    {
                        EnemyList[i].EnemyWeapon.SetWeaponCoordinates(new Vector2(EnemyList[i].EnemyWeapon.GetWeaponCoordinates().X + 7, EnemyList[i].EnemyWeapon.GetWeaponCoordinates().Y));
                    }
                }



                /// Enemy Out of bounds checker

                if (EnemyList[i].DrawCoordinates.X <= 0 && EnemyList[i].DrawCoordinates.X >= 768 && EnemyList[i].DrawCoordinates.Y <= 0 && EnemyList[i].DrawCoordinates.Y >= 720)
                {
                    EnemyList.RemoveAt(i);                     // remove the enemy if it is outside the parameters (coordiante range) of the area
                }


                EnemyList[i].IsMoving = true;                 // Set the enemy to moving status


                // Rectangles drawn around the possible coordinates and the draw coordinates of the enemy
                Rectangle EnemyRectangle     = new Rectangle((int)EnemyList[i].EnemyCoordinates.X, (int)EnemyList[i].EnemyCoordinates.Y, EnemyList[i].Width, EnemyList[i].Height);
                Rectangle EnemyDrawRectangle = new Rectangle((int)EnemyList[i].EnemyCoordinates.X, (int)EnemyList[i].DrawCoordinates.Y, EnemyList[i].Width, EnemyList[i].Height);

                Vector2 TempCoordinates = EnemyList[i].EnemyCoordinates;                 // allows new coordinates to be set in another class

                int eGameTime = EnemyList[i].EnemyHitTime;

                if (EnemyList[i].BeenHit == true)
                {
                    EnemyList[i].EnemyHitTime = (eGameTime + gameTime.ElapsedGameTime.Milliseconds);

                    if (eGameTime > 200)                     // Recovery time over
                    {
                        EnemyList[i].EnemyHitTime = 0;
                        eGameTime            = 0;
                        EnemyList[i].BeenHit = false;
                    }
                }



                /// Enemy Logic and Movement
                bool AllowDirectionChange = EnemyList[i].AllowDirChange;
                bool AllowMovement        = EnemyList[i].AllowMovement;

                // collision checker

                bool checkMove = false;                 // false for no collision


                checkMove = areaInt.checkMoveManager(EnemyRectangle);                 // check if enemy rectangle collides with area structure


                bool checkEnemyAndPlayerCollision = EnemyAndPlayerCollision(i, mainPlayer, areaInt);                 // check collision between enemy and player


                EnemyList[i].EnemyCoordinates = TempCoordinates;                 // Set the preliminary coordinates to the temporary coordinates (possible coordinates to use).

                if (checkMove == false && checkEnemyAndPlayerCollision == false)
                {
                    EnemyList[i].DrawCoordinates = EnemyList[i].EnemyCoordinates;
                }
                if ((checkMove == true || checkEnemyAndPlayerCollision == true) && EnemyList[i].AllowDirChange == true)
                {
                    EnemyList[i].entityReaction(); EnemyList[i].EnemyCoordinates = EnemyList[i].DrawCoordinates;
                }

                EnemyList[i].AllowDirChange = AllowDirectionChange;         // (Dis)Allow the enemy to change direction
                EnemyList[i].AllowMovement  = AllowMovement;                // (Dis)Allow the enemy to move


                EnemyList[i].EnemyGameTime = (EnemyList[i].EnemyGameTime + gameTime.ElapsedGameTime.Milliseconds);


                if (AllowDirectionChange == true)
                {
                    // Change direction at random time interval
                    if (EnemyList[i].EnemyGameTime >= R.Next(1200, 1500))
                    {
                        int orientationNum = R.Next(0, 4);
                        if (orientationNum == 0)
                        {
                            EnemyList[i].Orientation = 'R';
                        }
                        if (orientationNum == 1)
                        {
                            EnemyList[i].Orientation = 'L';
                        }
                        if (orientationNum == 2)
                        {
                            EnemyList[i].Orientation = 'U';
                        }
                        if (orientationNum == 3)
                        {
                            EnemyList[i].Orientation = 'D';
                        }

                        EnemyList[i].EnemyGameTime = 0;
                    }
                }



                EnemyList[i].Update(gameTime, R, checkMove, checkEnemyAndPlayerCollision, mainPlayer, eGameTime); // update each enemy in the list



                EnemyList[i].AllowDirChange = true;

                if (EnemyList[i].Health <= 0)                 // kill enemy if health <= 0
                {
                    mainID.EntityKilled   = true;
                    mainID.KilledLocation = EnemyList[i].DrawCoordinates; // show kill animation
                    EnemyList.RemoveAt(i);                                // remove enemy from list
                }
            }
        }