public void setText(MyLabel label, EffectType type, Rune r, bool verbose)
    {
        if (verbose_label.text != null)
        {
            verbose_label.text.text = (type == EffectType.Null) ? "" : type.ToString();
        }

        setVerboseImageLabels(verbose_label, type);

        //   Debug.Log("Setting label for " + type + "\n");

        MyText current_desc = label.getText(LabelName.CurrentLvlSkillDesc);
        //  MyText next_desc = label.getText(LabelName.NextLvlSkillDesc);
        MyText generic_desc = label.getText(LabelName.Null);

        if (r == null || type == EffectType.Null || selected_button == null)
        {
            if (current_desc != null)
            {
                current_desc.gameObject.SetActive(false);
            }
            //    if (next_desc != null) next_desc.gameObject.SetActive(false);
        }
        else
        {
            StatBit stat = r.getStat(type);
            if (stat == null)
            {
                return;
            }

            if (current_desc != null)
            {
                current_desc.gameObject.SetActive(true);

                if (r.getLevel(type) > 0 || type == EffectType.Range)
                {
                    /*
                     * if (verbose)
                     *   current_desc.setText(stat.getCompactDescription(LabelName.CurrentLvlSkillDesc));
                     * else
                     * {*/
                    if (r.CanUpgrade(type, r.runetype, true) == StateType.No || !r.haveUpgrade(type))
                    {
                        current_desc.setText(stat.getCompactDescription(LabelName.CurrentLvlSkillDesc));
                    }
                    else
                    {
                        current_desc.setText(stat.getCompactDescription(LabelName.CurrentLvlSkillDesc, 1));
                    }
                    //}
                }
                else
                {
                    current_desc.setText(stat.getCompactDescription(LabelName.NextLvlSkillDesc, 1));
                }


                if (generic_desc != null)
                {
                    generic_desc.gameObject.SetActive(true);

                    if (!verbose)
                    {
                        generic_desc.setText(stat.getCompactDescription(LabelName.Null));
                    }
                }
            }
        }
    }
    public void CheckUpgrades()
    {
        bool special_skills_mode = (this is LevelList_Toy_Button_Driver);


        foreach (KeyValuePair <Toy_Button, Button> kvp in drivers[current_driver].button_map)
        {
            Toy_Button button = kvp.Key;
            if (parent == null && !special_skills_mode)
            {
                return;
            }
            Rune check_rune = getCheckRune(button);

            RuneType check_me_instead = RuneType.Sensible; // instead of parent.rune.runetype

            if (check_rune != null && UpgradeButton(button.type))

            {
//specialskillmode has a separate upgrade button
                //StateType status = (special_skills_mode) ? StateType.Yes : check_rune.CanUpgrade(button.effect_type, check_me_instead);
                StateType status     = check_rune.CanUpgrade(button.effect_type, check_me_instead);
                StateType have_skill = (check_rune.haveUpgrade(button.effect_type)) ? StateType.Yes : status;

                button.setState(status);
                button.setButtonImage(have_skill);
            }
            else if (!UpgradeButton(button.type))
            {
                if (check_rune == null)
                {
                    continue;
                }

                if (button.type.Equals("sell"))
                {
                    kvp.Value.gameObject.SetActive(!(check_rune.toy_type == ToyType.Hero ||
                                                     check_rune.runetype == RuneType.Castle));
                }
                else if (button.type.Equals("move_confirm"))
                {
                    kvp.Value.gameObject.SetActive(check_rune.toy_type == ToyType.Hero);
                }
                else if (button.type.Equals("reset_special_skills") || button.type.Equals("reset_skills"))
                {
                    kvp.Value.gameObject.SetActive(check_rune.toy_type == ToyType.Hero);
                }
            }
            else
            {
                button.setState(StateType.No);
                button.setButtonImage(StateType.No);
            }
        }
        StatSum statsum = null;

        if (!special_skills_mode)
        {
            statsum = parent.rune.GetStats(false);
        }
        List <MyLabel> labels = drivers[current_driver].labels;

        for (int i = 0; i < labels.Count; i++)
        {
            MyLabel label      = labels[i];
            Rune    check_rune = null;

            if (special_skills_mode)
            {
                check_rune = Central.Instance.getHeroRune(label.runetype);
            }
            else
            {
                check_rune = parent.rune;
            }

            statsum = (check_rune != null) ? check_rune.GetStats(special_skills_mode) : null;

            if (label.type.Equals("current_score"))
            {
                labels[i].text.text = Get.Round(ScoreKeeper.Instance.getTotalScore(), 0).ToString();
            }
        }
    }