public void AddAbility(AbilityID abID, bool requiresInput, string description)
    {
        string[] ab     = abID.ToString().Split('_');
        string   abName = string.Empty;

        for (int i = 0; i < ab.Length; i++)
        {
            abName += ab[i] + " ";
        }
        if (abilities == null)
        {
            abilities = new Ability[] { new Ability(abID, requiresInput, description) };

            // add input
            playerInputSystem.AddDynamicKeys(() => abilitySystem.CallAbility(abilities[0], thisEntity), "1");

            UI_Manager.instance.AddButtonAction(() => abilitySystem.CallAbility(abilities[0], thisEntity), abName + description);
            return;
        }
        if (abilities.Length >= 10)
        {
            // ABILITIES FULL!
            return;
        }
        // Extend array of abilities
        Ability[] origAbilities = abilities;
        abilities = new Ability[origAbilities.Length + 1];
        for (int i = 0; i < origAbilities.Length; i++)
        {
            abilities[i] = origAbilities[i];
        }
        abilities[abilities.Length - 1] = new Ability(abID, requiresInput, description);
        // add input only for new last one added
        string keyName = (abilities.Length).ToString();

        if (abilities.Length >= 10)
        {
            keyName = "0";
        }
        playerInputSystem.AddDynamicKeys(() => abilitySystem.CallAbility(abilities[abilities.Length - 1], thisEntity), keyName);
        UI_Manager.instance.AddButtonAction(() => abilitySystem.CallAbility(abilities[abilities.Length - 1], thisEntity), abName + description);
    }