private void NextCombatant()
 {
     battleStatus = EBattleStatus.ActiveTurn;
     if (combatant < orderList.Count - 1)
     {
         combatant++;
     }
     else
     {
         combatant    = 0;
         battleStatus = EBattleStatus.EndTurn;
     }
 }
    // Update is called once per frame
    void Update()
    {
        switch (BattleHasEnded())
        {
        case EEndBattleStatus.Ongoing:
            switch (battleStatus)
            {
            case EBattleStatus.PreparingTurn:
                PrepareTurn();
                break;

            case EBattleStatus.ActiveTurn:
                DoBattle(playerTeamTurn, enemyTeamTurn);
                break;

            case EBattleStatus.NpcAttacking:
                break;

            case EBattleStatus.EndTurn:
                PrintTurn();
                print("End of Turn: " + turn);
                turn++;
                battleStatus = EBattleStatus.PreparingTurn;
                break;
            }
            break;

        case EEndBattleStatus.PlayerWon:
            foreach (NpcBase npc in playerTeam)
            {
                npc.stats.GainExperience(enemyTeam.Count * 5);
            }
            playerDataController.Save();
            sceneLoader.LoadScene(SceneNames.MAIN_SCENE);
            print("Battle has ended!, the player Won, do something!");
            break;

        case EEndBattleStatus.PlayerLost:
            playerDataController.Save();
            sceneLoader.LoadScene(SceneNames.MAIN_SCENE);
            print("Battle has ended!, the player Lost, do something!");
            break;

        default:
            break;
        }
    }
    private void DoBattle(List <NpcBase> playerList, List <NpcBase> enemyList)
    {
        NpcBase defender;
        NpcBase fighter = orderList[combatant];

        if (fighter.stats.GetNpcCurrentHealth() > 0)
        {
            battleStatus = EBattleStatus.NpcAttacking;
            if (fighter.GetPlayerTeam())
            {
                int position = UnityEngine.Random.Range(0, enemyList.Count);
                defender = enemyList[position];
                fighter.AttackEnemy(defender, () =>
                {
                    if (defender.stats.GetNpcCurrentHealth() <= 0)
                    {
                        enemyList.Remove(defender);
                    }
                    NextCombatant();
                });
                print(fighter.stats.npcName + " has attacked " + defender.stats.npcName);
            }
            else
            {
                int position = UnityEngine.Random.Range(0, playerList.Count);
                defender = playerList[position];
                fighter.AttackEnemy(defender, () =>
                {
                    if (defender.GetNpcCurrentHealth() <= 0)
                    {
                        defender.GetAnimator().SetBool("isDead", true);
                        playerList.Remove(defender);
                    }
                    NextCombatant();
                });
                print(fighter.stats.npcName + " has attacked " + defender.stats.npcName);
            }
        }
        else
        {
            NextCombatant();
        }
    }
    private void PrepareBattle()
    {
        orderList.AddRange(goodBois);
        orderList.AddRange(badBois);
        orderList.Sort(SetBattleOrder);
        //PrintOrderList();

        foreach (NpcBase npc in orderList)
        {
            if (npc.GetPlayerTeam())
            {
                playerTeam.Add(npc);
            }
            else
            {
                enemyTeam.Add(npc);
            }
        }

        battleStatus = EBattleStatus.PreparingTurn;
    }
 private void PrepareTurn()
 {
     //Limpiamos lista de npcs del turno anterior
     playerTeamTurn.Clear();
     enemyTeamTurn.Clear();
     //Solo lucharan aquellos que sigan vivos dentro del equipo
     for (int i = 0; i < playerTeam.Count; i++)
     {
         if (playerTeam[i].stats.GetNpcCurrentHealth() > 0)
         {
             playerTeamTurn.Add(playerTeam[i]);
         }
     }
     for (int i = 0; i < enemyTeam.Count; i++)
     {
         if (enemyTeam[i].stats.GetNpcCurrentHealth() > 0)
         {
             enemyTeamTurn.Add(enemyTeam[i]);
         }
     }
     battleStatus = EBattleStatus.ActiveTurn;
 }