public void updateGoldCost()
    {
        if (PlayerFinder.getPlayer())
        {
            CharacterDataTracker dataTracker = PlayerFinder.getPlayer().GetComponent <CharacterDataTracker>();

            if (dataTracker && dataTracker.charData != null)
            {
                goldCost = 100 + dataTracker.charData.respecs * 100;

                GoldTracker goldTracker = PlayerFinder.getPlayer().GetComponent <GoldTracker>();

                if (dataTracker.charData.characterTreeNodeProgression.Count <= 0)
                {
                    foreach (Transform child in transform)
                    {
                        if (child.name == "gold cost message")
                        {
                            child.GetComponent <TextMeshProUGUI>().text = "You do not have any points allocated on your passive grid";
                        }
                        else if (child.name == "Yes")
                        {
                            child.gameObject.SetActive(false);
                        }
                    }
                }
                else if (goldTracker.value < goldCost)
                {
                    foreach (Transform child in transform)
                    {
                        if (child.name == "gold cost message")
                        {
                            child.GetComponent <TextMeshProUGUI>().text = "You do not have the <color=#DAA520FF>" + goldCost + "</color> gold required to respec.";
                        }
                        else if (child.name == "Yes")
                        {
                            child.gameObject.SetActive(false);
                        }
                    }
                }
                else
                {
                    foreach (Transform child in transform)
                    {
                        if (child.name == "gold cost message")
                        {
                            child.GetComponent <TextMeshProUGUI>().text = "This will undo your latest allocation to your passive grid at the cost of <color=#DAA520FF>" + goldCost + "</color> gold.\n\nIt will also make subsequent respecs cost 100 more gold.";
                        }
                        else if (child.name == "Yes")
                        {
                            child.gameObject.SetActive(true);
                        }
                    }
                }
            }
        }
    }
    public void RespecLatestPassive()
    {
        bool open = UIBase.instance.passiveTreeOpen;

        if (!open)
        {
            UIBase.instance.openPassiveTree(true);
        }

        if (PlayerFinder.getPlayer())
        {
            CharacterDataTracker dataTracker = PlayerFinder.getPlayer().GetComponent <CharacterDataTracker>();
            GoldTracker          goldTracker = PlayerFinder.getPlayer().GetComponent <GoldTracker>();

            if (dataTracker && goldTracker && goldTracker.value >= goldCost)
            {
                if (dataTracker.charData != null && dataTracker.charData.characterTreeNodeProgression != null && dataTracker.charData.characterTreeNodeProgression.Count > 0)
                {
                    string nodeID = dataTracker.charData.characterTreeNodeProgression[dataTracker.charData.characterTreeNodeProgression.Count - 1];
                    foreach (CharacterTree tree in CharacterTree.all)
                    {
                        if (tree.characterClass == dataTracker.charData.characterClass)
                        {
                            foreach (SkillTreeNode node in tree.nodeList)
                            {
                                if (node.nodeID == nodeID)
                                {
                                    dataTracker.charData.respecs++;
                                    goldTracker.modifyGold(-goldCost);
                                    node.respecOnePoint(true);
                                }
                            }
                        }
                    }
                }
            }
        }

        if (!open)
        {
            UIBase.instance.closePassiveTree();
        }

        UIBase.instance.closePassiveRespecConfirmation();
    }
    public static void loadAbilityBar()
    {
        CharacterDataTracker tracker        = PlayerFinder.getPlayer().GetComponent <CharacterDataTracker>();
        AbilityList          abilityList    = PlayerFinder.getPlayer().GetComponent <AbilityList>();
        List <string>        savedAbilities = tracker.charData.abilityBar;

        for (int i = 0; i < savedAbilities.Count; i++)
        {
            Ability ability = AbilityIDList.getPlayerAbility(savedAbilities[i]);
            if (ability == null)
            {
                abilityList.abilities[i] = AbilityIDList.getAbility(AbilityID.nullAbility);
            }
            else
            {
                abilityList.abilities[i] = ability;
            }
        }
    }
    public static void selectionChange(int abilityNumber1to5, string newPlayerAbilityID)
    {
        CharacterDataTracker tracker = PlayerFinder.getPlayer().GetComponent <CharacterDataTracker>();

        if (tracker.charData.abilityBar == null)
        {
            tracker.charData.abilityBar = new List <string>();
        }
        while (tracker.charData.abilityBar.Count < abilityNumber1to5)
        {
            tracker.charData.abilityBar.Add("");
        }
        tracker.charData.abilityBar[abilityNumber1to5 - 1] = newPlayerAbilityID;

        if (tracker.charData.characterName != "")
        {
            tracker.SaveCharacterData();
        }
    }