private int LoadArmyData()
    {
#if UNITY_EDITOR
        for (int j = 0; j < TurnManager.Instance.PlayerCount; j++)
        {
            if (TurnManager.Instance.GetPlayer(j).UnitCount > 0)
            {
                Debug.LogError("Player " + j + " has " + TurnManager.Instance.GetPlayer(j).UnitCount
                               + " units at the start of the game!");
            }
        }
#endif
        TextAsset unitDataFile =
            Resources.Load(PathExtensions.CombineForward(CommonPaths.UNIT_DATA_DIR, "Army"), typeof(TextAsset)) as TextAsset;
        if (unitDataFile)
        {
            Dictionary <string, object> rawData = Json.Deserialize(unitDataFile.text) as Dictionary <string, object>;

            for (int i = 0; i < _maxArmySize; i++)
            {
                string unitKey = ARMY_UNITY_KEY + i;
                if (rawData != null && rawData.ContainsKey(unitKey))
                {
                    string unitName = rawData[unitKey] as string;
                    for (int j = 0; j < TurnManager.Instance.PlayerCount; j++)
                    {
                        GameObject newUnit = PoolManager.instance.GetObjectForName(unitName, false);
                        HexUnit    hexUnit = newUnit.GetComponent <HexUnit>();
                        hexUnit.Reset();
                        if (j % 2 == 0)
                        {
                            hexUnit.FaceRight();
                        }
                        else
                        {
                            hexUnit.FaceLeft();
                        }
                        TurnManager.Instance.GetPlayer(j).AddUnit(hexUnit);
                        newUnit.SetActive(false);
                    }
                }
                else
                {
                    return(i);
                }
            }
            return(_maxArmySize);
        }
        return(-1);
    }
    public void SetData(HexUnit unit)
    {
        _selectedUnit = unit;
        //Do not reload resource if it is the same.
        if (unit.UniqueName != _lastLoadedUnitId)
        {
            TextAsset unitDataFile =
                Resources.Load(PathExtensions.CombineForward(CommonPaths.UNIT_DATA_DIR, unit.UniqueName), typeof(TextAsset)) as
                TextAsset;
            if (unitDataFile)
            {
                Dictionary <string, object> rawData = Json.Deserialize(unitDataFile.text) as Dictionary <string, object>;
                if (rawData != null)
                {
                    if (rawData.ContainsKey(UNITY_PORTRAIT_KEY))
                    {
                        string portraitKey = rawData[UNITY_PORTRAIT_KEY] as string;
                        _unitImage.sprite = !string.IsNullOrEmpty(portraitKey)
                            ? Resources.Load <Sprite>(PathExtensions.CombineForward(CommonPaths.TEXTURES, portraitKey))
                            : null;
                    }
                    _lastLoadedUnitId = unit.UniqueName;
                }
            }
        }


        _unitNameText.text = string.Format("{0} (P{1})", unit.UnitName, unit.OwnerId + 1);

        StringBuilder sb = new StringBuilder();

        sb.AppendLine("Armor: " + unit.Armor);
        sb.AppendLine("Dodge Chance: %" + unit.DodgeChance * 100);
        sb.AppendLine(string.Format("HP: {0}/{1}", unit.HealthLeft, unit.MaxHealth));
        if (unit.MaxMana > 0)
        {
            sb.AppendLine(string.Format("Mana: {0}/{1}", unit.ManaLeft, unit.MaxMana));
        }
        _unitInfoText.text = sb.ToString();

        _unitHealthBar.value = unit.HealthLeft == 0 ? 0 : unit.HealthLeft / (float)unit.MaxHealth;
        _unitManaBar.value   = unit.ManaLeft == 0 ? 0 : unit.ManaLeft / (float)unit.MaxMana;

        _unitNameText.color = unit.OwnerId == TurnManager.Instance.GetActivePlayer().Id ? _allyColor : _enemyColor;


        _skillContainer.gameObject.SetActive(_canShowSkills && unit.OwnerId == TurnManager.Instance.GetActivePlayer().Id);
        if (_skillContainer.gameObject.activeSelf)
        {
            foreach (Toggle toggle in _skillContainer.GetComponentsInChildren <Toggle>())
            {
                toggle.onValueChanged.RemoveAllListeners();
                PoolManager.instance.Recycle(toggle.gameObject);
            }

            if (unit.MeleeAttack || unit.RangedAttack)
            {
                AddSkillButton(unit, null, "Attack", -1, true);
            }

            for (int i = 0; i < unit.Skills.Length; i++)
            {
                if (!unit.Skills[i].IsPassive)
                {
                    AddSkillButton(unit, unit.Skills[i], unit.Skills[i].SkillName, i, false);
                }
            }
        }
    }