public void DrawAbilities(Ability[] abilities, Ability[] multiAbilities, bool isInMultiMode, Ability pendingAllyTargetingAbility)
    {
        Ability[] abilitiesToDraw = isInMultiMode ? multiAbilities : abilities;

        for (int i = 0; i < abilitiesToDraw.Length; i++)
        {
            if (AbilitySlots.Count > i)
            {
                AbilitySlots[i].Image.sprite = abilities[i].icon;

                float cooldownRation = AbilityUtils.GetAbilitySlotCooldownRation(abilities, multiAbilities, i);
                bool  abilityIsWaitingForTargetSelection = abilitiesToDraw[i] &&
                                                           pendingAllyTargetingAbility &&
                                                           pendingAllyTargetingAbility.name == abilitiesToDraw[i].name;

                AbilitySlots[i].Frame.color = new Color(
                    AbilitySlots[i].Frame.color.r,
                    AbilitySlots[i].Frame.color.g,
                    AbilitySlots[i].Frame.color.b,
                    abilityIsWaitingForTargetSelection
                        ? 0.5f
                        : 0
                    );

                AbilitySlots[i].Name.text       = abilitiesToDraw[i].abilityName;
                AbilitySlots[i].Name.enabled    = false;
                AbilitySlots[i].Shade.sizeDelta = new Vector2(
                    -(cooldownRation) * SLOT_WIDTH,
                    AbilitySlots[i].Shade.sizeDelta.y
                    );
                AbilitySlots[i].Shade.anchoredPosition = new Vector2(
                    -SLOT_WIDTH / 2 + (1 - cooldownRation) * SLOT_WIDTH / 2,
                    AbilitySlots[i].Shade.anchoredPosition.y
                    );
            }
        }

        HideEmptySlots(abilitiesToDraw);
    }