}     //Reads if the player killed the enemy and responds accordingly

    public IEnumerator PlayerTurn()
    {
        if (canAttack == true && Input.GetKeyDown(KeyCode.Escape))
        {
            canAttack = false;
            infoBar.SetBool("isOpen", false);
            buttons.SetActive(true);
        }

        for (int k = 0; k <= EnemyHolder.enemyAmount; k++)
        {
            if (EnemyHolder.enemyDowned[k] != null)
            {
                EnemyHolder.enemyDowned[k].GetComponent <UnitStats>().isDowned = false;
            }
        }//Sets all enemy downed bools to false

        Array.Clear(EnemyHolder.enemyDowned, 0, EnemyHolder.enemyDowned.Length); //Clears the enemy downed array

        if (canAttack == true)
        {
            buttons.SetActive(false);
        }
        else
        {
            buttons.SetActive(true);
        }

        if (playerUnit.currentHP <= 0)
        {
            state = BattleStateFossil.LOST;
            StartCoroutine(EndBattle());
        }
        yield return(new WaitForSeconds(.0f));
    } // Basic player turn that holds the state "PlayerTurn" indefinately
    }//Attacks when the player presses a button

    public void OnDefendButton()
    {
        if (state != BattleStateFossil.PLAYERTURN)
        {
            return;
        }

        PlayerStats.defendButton = 1.5f;

        state = BattleStateFossil.ENEMYTURN;
        EnemyTurn();
    }//Sets a devisor so when the enemy attacks, it divides the damage
    }//Does an initial setup of all battle things

    void Update()
    {
        if (SafeMode.safeMode == true)
        {
            if (playerUnit != null)
            {
                playerUnit.currentHP = playerUnit.maxHP;
            }
        }
        else
        {
        }

        if (currentEnemies[0] != null)
        {
            if (currentEnemies[0].gameObject.CompareTag("Boss1") || currentEnemies[0].gameObject.CompareTag("Boss2") || currentEnemies[0].gameObject.CompareTag("Boss3"))
            {
                enemyLightingEffects[0].SetActive(true);
            }
        }

        if (BattleCount.inBattle == true)
        {
            MenuManager.enabled = false;
        }

        if (EnemyHolder.coroutinesRunning == 0 && enemyTurnAttack == false)
        {
            attackButton.enabled = true;
            state = BattleStateFossil.PLAYERTURN;
            PlayerStats.defendButton = 1;
            StartCoroutine(PlayerTurn());
        }//Checks if there are no enemies attacking and re enables attack buttons and player turn

        for (int i = 0; i <= EnemyHolder.enemyAmount; i++)
        {
            if (currentEnemies[i] != null)
            {
                if (enemyUnit[i].isDowned == true)
                {
                    downedIcon = currentEnemies[i].transform.GetChild(2).gameObject;
                    downedIcon.SetActive(true);
                }
                else
                {
                    downedIcon = currentEnemies[i].transform.GetChild(2).gameObject;
                    downedIcon.SetActive(false);
                }
            }
        }
    }
    }//Does an initial setup of the battle

    IEnumerator SetUpBossFight1()
    {
        MusicManager.bossBattleMusic = true;

        MusicManager.normalBattleMusic = false;

        EnemyHolder.enemyAmount = 0;

        GameObject enemyGO = Instantiate(bosses[0], enemyBattleStations[1]); //Instantiates enemy

        enemyGO.name = "boss" + 1;                                           //Gives it a name and number

        currentEnemies[0] = enemyGO;                                         //Assigns Panama to the first space in the enemy array

        enemyUnit[0] = enemyGO.GetComponent <UnitStats>();                   //Grabs the enemy's stats
        bossUnit[0]  = enemyGO.GetComponent <UnitStats>();

        enemyUnit[0].affinity = 1;                                          //Sets Index's affinity to Soma

        enemyColor[0] = enemyGO.GetComponent <Image>();                     // Grabs the color of the enemy so it can be changed

        enemyHUDs[0].SetHUD(enemyUnit[0]);                                  //Sets the hud with the enemy stats

        enemyLightingEffects[0] = enemyGO.transform.GetChild(0).gameObject; //Assigns the lighting effects from Panama

        #region InitialSetup

        playerUnit  = playerPrefab.GetComponent <UnitStats>();
        playerColor = playerPrefab.GetComponent <Image>();

        playerHUD.SetHUD(playerUnit);

        buttons.SetActive(true);

        boss1Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Boss1>();

        #endregion InitialSetup

        yield return(new WaitForSeconds(.5f));

        if (GameObject.FindGameObjectsWithTag("Boss1").Length > 2)
        {
            Destroy(GameObject.Find("boss1"));
        }

        state = BattleStateFossil.PLAYERTURN;
        PlayerTurn();
    }
    } //Basic enemy turn that will look at which enemy the player is fighting, and start seperate scripts depending on the enemy.

    public void Boss3Turn()
    {
        buttons.SetActive(false);

        enemyTurnAttack = true;

        boss3Attack.StartCoroutine("BossTurn3");
        EnemyHolder.coroutinesRunning++;

        if (playerUnit.currentHP <= 0)
        {
            state = BattleStateFossil.LOST;
            StartCoroutine(EndBattle());
        }
        enemyTurnAttack = false;
    } //Basic enemy turn that will look at which enemy the player is fighting, and start seperate scripts depending on the enemy.
    public void BattleStart()
    {
        fossilAttacks = playerPrefab.GetComponent <FossilAttacks>();

        itemDrop = worldPlayer.GetComponent <ItemDrop>();

        BattleCount.inBattle = true;

        BattleCount.battleCount++;

        MenuManager.enabled = false;

        MusicManager.normalBattleMusic = true;

        System.Random rnd = new System.Random();

        EnemyHolder.enemyAmount = rnd.Next(0, 4);
        //finds out the amount of enemies the player will be fighting


        state = BattleStateFossil.START;

        switch (EnemyHolder.bossNumber)
        {
        case 0:
            StartCoroutine(SetupBattle());
            break;

        case 1:
            StartCoroutine(SetUpBossFight1());
            break;

        case 2:
            StartCoroutine(SetUpBossFight2());
            break;

        case 3:
            StartCoroutine(SetUpBossFight3());
            break;
        }
    }//Does an initial setup of all battle things
    }//Selects the enemy to attack

    public void EnemyTurn()
    {
        EnemyHolder.turnCount++;

        buttons.SetActive(false);

        enemyTurnAttack = true;

        #region ResetEnemyAttacks
        bool enemy0Taken = false;
        bool enemy1Taken = false;
        bool enemy2Taken = false;
        bool enemy3Taken = false;

        //Clears the lighting effects and enemies so it can reassign them
        Array.Clear(enemyLightingEffects, 0, enemyLightingEffects.Length);
        Array.Clear(currentEnemies, 0, currentEnemies.Length);
        Array.Clear(enemyParticles, 0, enemyParticles.Length);


        for (int i = 0; i <= EnemyHolder.enemyAmount; i++)
        {
            if (GameObject.Find("enemy0") != null && enemy0Taken == false)
            {
                enemy0Taken       = true;
                currentEnemies[i] = GameObject.Find("enemy0");
                enemyUnit[i]      = currentEnemies[i].GetComponent <UnitStats>();
                enemyColor[i]     = currentEnemies[i].GetComponent <Image>();
                enemyParticles[i] = currentEnemies[i].transform.GetChild(3).GetComponent <ParticleSystem>();
                enemyHUDs[i].SetHUD(enemyUnit[i]);
            }
            else if (GameObject.Find("enemy1") != null && enemy1Taken == false)
            {
                enemy1Taken       = true;
                currentEnemies[i] = GameObject.Find("enemy1");
                enemyUnit[i]      = currentEnemies[i].GetComponent <UnitStats>();
                enemyColor[i]     = currentEnemies[i].GetComponent <Image>();
                enemyParticles[i] = currentEnemies[i].transform.GetChild(3).GetComponent <ParticleSystem>();
                enemyHUDs[i].SetHUD(enemyUnit[i]);
            }
            else if (GameObject.Find("enemy2") != null && enemy2Taken == false)
            {
                enemy2Taken       = true;
                currentEnemies[i] = GameObject.Find("enemy2");
                enemyUnit[i]      = currentEnemies[i].GetComponent <UnitStats>();
                enemyColor[i]     = currentEnemies[i].GetComponent <Image>();
                enemyParticles[i] = currentEnemies[i].transform.GetChild(3).GetComponent <ParticleSystem>();
                enemyHUDs[i].SetHUD(enemyUnit[i]);
            }
            else if (GameObject.Find("enemy3") != null && enemy3Taken == false)
            {
                enemy3Taken       = true;
                currentEnemies[i] = GameObject.Find("enemy3");
                enemyUnit[i]      = currentEnemies[i].GetComponent <UnitStats>();
                enemyColor[i]     = currentEnemies[i].GetComponent <Image>();
                enemyParticles[i] = currentEnemies[i].transform.GetChild(3).GetComponent <ParticleSystem>();
                enemyHUDs[i].SetHUD(enemyUnit[i]);
            }
        }//Reassigns all of the enemies to make sure they are always taking up the first spaces in the array

        for (int j = 0; j <= EnemyHolder.enemyAmount; j++)
        {
            if (currentEnemies[j] != null)
            {
                enemyLightingEffects[j] = currentEnemies[j].transform.GetChild(0).gameObject;
            }
        }//Assigns the lighting effects for all current enemies

        if (GameObject.FindGameObjectsWithTag("Enemy0").Length > 0)
        {
            enemy0Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Enemy0>();
        }
        if (GameObject.FindGameObjectsWithTag("Enemy1").Length > 0)
        {
            enemy1Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Enemy1>();
        }
        if (GameObject.FindGameObjectsWithTag("Enemy2").Length > 0)
        {
            enemy2Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Enemy2>();
        }
        //Resets all the enemy attack scripts to make sure there are still scripts to load attacks from

        #endregion ResetEnemyAttacks

        for (int i = 0; i <= EnemyHolder.enemyAmount; i++)
        {
            if (currentEnemies[i] != null)
            {
                if (currentEnemies[i].CompareTag("Enemy0") && currentEnemies[i] != null && enemy0Attack != null)
                {
                    enemy0Attack.StartCoroutine("EnemyTurn0");
                    EnemyHolder.coroutinesRunning++;
                }
                else if (currentEnemies[i].CompareTag("Enemy1") && currentEnemies[i] != null && enemy1Attack != null)
                {
                    enemy1Attack.StartCoroutine("EnemyTurn1");
                    EnemyHolder.coroutinesRunning++;
                }
                else if (currentEnemies[i].CompareTag("Enemy2") && currentEnemies[i] != null && enemy2Attack != null)
                {
                    enemy2Attack.StartCoroutine("EnemyTurn2");
                    EnemyHolder.coroutinesRunning++;
                }
            }
        }//Runs all enemy coroutines with delays and then sets the coroutines running to 0

        if (playerUnit.currentHP <= 0)
        {
            state = BattleStateFossil.LOST;
            StartCoroutine(EndBattle());
        }
        enemyTurnAttack = false;
    } //Basic enemy turn that will look at which enemy the player is fighting, and start seperate scripts depending on the enemy.
    }//Sets a devisor so when the enemy attacks, it divides the damage

    public IEnumerator PlayerAttack(GameObject enemy)
    {
        state = BattleStateFossil.ENEMYTURN;

        enemyTurnAttack = true;

        float damage;

        // 0 = blessed
        // 1 = soma
        // 2 = cursed

        if (enemy.GetComponent <UnitStats>().isDowned == true)
        {
            damage = playerUnit.damage * 1.35f;
        }
        else
        {
            damage = playerUnit.damage;
        }//Checks if the enemy the player is attacking is downed and multiplies the damage accordingly

        enemy.GetComponent <UnitStats>().TakeDamage(damage);

        for (int i = 0; i < enemyHUDs.Length; i++)
        {
            if (enemyUnit[i] != null)
            {
                enemyHUDs[i].SetHP(enemyUnit[i].currentHP);
            }
        }//Sets the health of all the huds

        if (enemy.tag != "Boss1" && enemy.tag != "Boss2" && enemy.tag != "Boss3")
        {
            enemy.transform.GetChild(0).gameObject.SetActive(false); //Set the lighting to false
        }

        yield return(new WaitForSeconds(.2f));

        if (enemy != null)
        {
            cameraShake.shake      = enemy;
            EnemyHolder.shakeEnemy = true;

            if (enemy.tag != "Boss1" && enemy.tag != "Boss2" && enemy.tag != "Boss3")
            {
                enemy.transform.GetChild(0).gameObject.SetActive(true);
                enemy.GetComponent <Image>().enabled = false;
            }
            enemy.transform.GetChild(0).GetChild(1).gameObject.GetComponent <Image>().color = new Color(1, 0, 0);
        }//Set lighting to active, flash red

        for (int i = 0; i <= EnemyHolder.enemyAmount; i++)
        {
            if (enemyParticles[i] != null)
            {
                if (enemy == currentEnemies[i] || enemy == bosses[i])
                {
                    enemyParticles[i].Play();
                }
            }
        }

        yield return(new WaitForSeconds(.3f));

        if (enemy != null)
        {
            EnemyHolder.shakeEnemy = false;

            enemy.transform.GetChild(0).GetChild(1).gameObject.GetComponent <Image>().color = new Color(1, 1, 1);
            if (enemy.tag != "Boss1" && enemy.tag != "Boss2" && enemy.tag != "Boss3")
            {
                enemy.transform.GetChild(0).gameObject.SetActive(false);
                enemy.GetComponent <Image>().enabled = true;
            }
        }//Turn enemy color normal and disable lighting

        yield return(new WaitForSeconds(.2f));

        if (enemy.GetComponent <UnitStats>().currentHP <= 0)
        {
            Destroy(enemy);

            yield return(new WaitForSeconds(.1f));

            enemiesKilled++;

            state = BattleStateFossil.ENEMYTURN;
            EnemyTurn();

            if (enemiesKilled >= EnemyHolder.enemyAmount + 1)
            {
                state = BattleStateFossil.WON;
                StartCoroutine(EndBattle());
            }
        }//Checks if all enemies are killed and then ends the battle
        else
        {
            if (EnemyHolder.bossNumber == 0)
            {
                state = BattleStateFossil.ENEMYTURN;
                EnemyTurn();
            }
            else if (EnemyHolder.bossNumber == 1)
            {
                state = BattleStateFossil.ENEMYTURN;
                Boss1Turn();
            }
            else if (EnemyHolder.bossNumber == 2)
            {
                state = BattleStateFossil.ENEMYTURN;
                Boss2Turn();
            }
            else if (EnemyHolder.bossNumber == 3)
            {
                state = BattleStateFossil.ENEMYTURN;
                Boss3Turn();
            }
        }
        //Change state based on what happened
    }//The basic player attack
    IEnumerator SetupBattle()
    {
        float animSpeed = .4f;

        System.Random rnd = new System.Random();

        switch (EnemyHolder.enemyAmount)
        {
        case 0:
            enemyBattleStations[0].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(-46, -175);
            break;

        case 1:
            enemyBattleStations[0].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(47, -175);
            enemyBattleStations[1].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(400, -175);
            break;

        case 2:
            enemyBattleStations[0].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(-46, -175);
            enemyBattleStations[1].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(200, -175);
            enemyBattleStations[2].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(446, -175);
            break;

        case 3:
            enemyBattleStations[0].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(-46, -175);
            enemyBattleStations[1].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(137, -175);
            enemyBattleStations[2].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(332, -175);
            enemyBattleStations[3].GetComponent <RectTransform>().anchoredPosition = new UnityEngine.Vector2(551, -175);
            break;
        }//Places the enemies in their respective positions based on the amount of enemies that there are

        for (int i = 0; i <= EnemyHolder.enemyAmount; i++)
        {
            int enemyInSpace = rnd.Next(0, 3);

            if (enemyInSpace == 2 && (i == 1 || i == 2 || i == 3))
            {
                enemyInSpace = rnd.Next(0, 2);
            }
            else if (i == 1 || i == 2 || i == 3)
            {
                enemyInSpace = rnd.Next(0, 2);
            }
            else
            {
                enemyInSpace = 2;
            }//Forces the Ambersaur to spawn only in the first spot every time

            GameObject enemyGO = Instantiate(enemies[enemyInSpace], enemyBattleStations[i]);  //Instantiates enemy

            enemyGO.name = "enemy" + i;                        //Gives it a name and number

            currentEnemies[i] = enemyGO;                       //Assigns the enemy to a place on the array of all current enemies

            enemyUnit[i] = enemyGO.GetComponent <UnitStats>(); //Grabs the enemy's stats

            enemyParticles[i] = enemyGO.transform.GetChild(3).gameObject.GetComponent <ParticleSystem>();

            switch (enemyInSpace)
            {
            case 0:
                enemyUnit[i].affinity = 0;
                break;

            case 1:
                enemyUnit[i].affinity = 1;
                break;

            case 2:
                enemyUnit[i].affinity = 2;
                break;
            }
            //Checks if the enemy is numbered 0, 1, or 2, and sets affinity accordingly
            //affinity 0 = blessed (scarab)
            //affinity 1 = soma (mummy)
            //affinity 2 = cursed (dinosaur)

            animSpeed += .05f;

            enemyColor[i] = enemyGO.GetComponent <Image>();                     // Grabs the color of the enemy so it can be changed

            enemyHUDs[i].SetHUD(enemyUnit[i]);                                  //Sets the hud with the enemy stats

            enemyLightingEffects[i] = enemyGO.transform.GetChild(0).gameObject; //Assigns the lighting effects from the enemy

            enemyLightingEffects[i].SetActive(false);

            currentEnemies[i].GetComponent <Animator>().speed = animSpeed;

            enemyLightingEffects[i].transform.GetChild(1).gameObject.GetComponent <Animator>().speed = animSpeed;
        }//Assigns random enemies in the battle based on how many there are dictated by the randomly generated enemy amount

        #region InitialSetup

        playerUnit  = playerPrefab.GetComponent <UnitStats>();
        playerColor = playerPrefab.GetComponent <Image>();

        playerHUD.SetHUD(playerUnit);

        buttons.SetActive(true);

        if (GameObject.FindGameObjectsWithTag("Enemy0").Length > 0)
        {
            enemy0Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Enemy0>();
        }
        if (GameObject.FindGameObjectsWithTag("Enemy1").Length > 0)
        {
            enemy1Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Enemy1>();
        }
        if (GameObject.FindGameObjectsWithTag("Enemy2").Length > 0)
        {
            enemy2Attack = GameObject.FindGameObjectWithTag("EnemyStuff").GetComponent <Enemy2>();
        }
        //Assigns all the attack scripts to their respective enemies


        #endregion InitialSetup

        yield return(new WaitForSeconds(.5f));

        state = BattleStateFossil.PLAYERTURN;
        PlayerTurn();
    }//Does an initial setup of the battle