public void SetHotbarSlotSkill(int hotbar, string slotName, GameObject skill)
    {
        Hotbar hb = null;

        switch (hotbar)
        {
        case 1:
            hb = Hotbar1;
            break;

        case 2:
            hb = Hotbar2;
            break;

        case 3:
            hb = Hotbar3;
            break;

        default:
            Debug.LogError("Attempt to slot invalid hotbar (" + hotbar + ")");
            throw new ArgumentException("invalid hotbar number", "hotbar");
        }

        foreach (var slot in hb.GetHotbarSlots())
        {
            if (slot.gameObject.name == slotName)
            {
                slot.SetAction(skill);
                break;
            }
        }
    }
    void Update()
    {
        _timeSinceGcdStart += Time.deltaTime;

        foreach (var slot in Hotbar1.GetHotbarSlots())
        {
            if (!slot.HasAction())
            {
                continue;
            }

            var kb = slot.GetKeybind();
            if (Input.GetKeyDown(kb.KeyCode))
            {
                if ((!kb.Modifier.HasFlag(KeyModifier.Alt) && !kb.Modifier.HasFlag(KeyModifier.Control) && !kb.Modifier.HasFlag(KeyModifier.Shift) &&
                     !Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.RightAlt) && !Input.GetKey(KeyCode.LeftShift) &&
                     !Input.GetKey(KeyCode.RightShift) && !Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.RightControl)) ||
                    (kb.Modifier.HasFlag(KeyModifier.Alt) && (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))) ||
                    (kb.Modifier.HasFlag(KeyModifier.Shift) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) ||
                    (kb.Modifier.HasFlag(KeyModifier.Control) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))))
                {
                    //DoHotbarSlot(slot.GetAction(), kb.Name, slot.GetCurrentImage());
                    switch (slot.GetAction().SkillType)
                    {
                    case SkillType.Ability:
                        slot.GetComponentInChildren <AbilitySkill>().TriggerSkill();
                        break;

                    case SkillType.Weaponskill:
                        slot.GetComponentInChildren <WeaponSkill>().TriggerSkill();
                        break;

                    case SkillType.Spell:
                        slot.GetComponentInChildren <SpellSkill>().TriggerSkill();
                        break;
                    }
                    break;
                }
            }
        }
        foreach (var slot in Hotbar2.GetHotbarSlots())
        {
            if (!slot.HasAction())
            {
                continue;
            }

            var kb = slot.GetKeybind();
            if (Input.GetKeyDown(kb.KeyCode))
            {
                if ((!kb.Modifier.HasFlag(KeyModifier.Alt) && !kb.Modifier.HasFlag(KeyModifier.Control) && !kb.Modifier.HasFlag(KeyModifier.Shift) &&
                     !Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.RightAlt) && !Input.GetKey(KeyCode.LeftShift) &&
                     !Input.GetKey(KeyCode.RightShift) && !Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.RightControl)) ||
                    (kb.Modifier.HasFlag(KeyModifier.Alt) && (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))) ||
                    (kb.Modifier.HasFlag(KeyModifier.Shift) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) ||
                    (kb.Modifier.HasFlag(KeyModifier.Control) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))))
                {
                    //DoHotbarSlot(slot.GetAction(), kb.Name, slot.GetCurrentImage());
                    switch (slot.GetAction().SkillType)
                    {
                    case SkillType.Ability:
                        slot.GetComponentInChildren <AbilitySkill>().TriggerSkill();
                        break;

                    case SkillType.Weaponskill:
                        slot.GetComponentInChildren <WeaponSkill>().TriggerSkill();
                        break;

                    case SkillType.Spell:
                        slot.GetComponentInChildren <SpellSkill>().TriggerSkill();
                        break;
                    }
                    break;
                }
            }
        }
        foreach (var slot in Hotbar3.GetHotbarSlots())
        {
            if (!slot.HasAction())
            {
                continue;
            }

            var kb = slot.GetKeybind();
            if (Input.GetKeyDown(kb.KeyCode))
            {
                if ((!kb.Modifier.HasFlag(KeyModifier.Alt) && !kb.Modifier.HasFlag(KeyModifier.Control) && !kb.Modifier.HasFlag(KeyModifier.Shift) &&
                     !Input.GetKey(KeyCode.LeftAlt) && !Input.GetKey(KeyCode.RightAlt) && !Input.GetKey(KeyCode.LeftShift) &&
                     !Input.GetKey(KeyCode.RightShift) && !Input.GetKey(KeyCode.LeftControl) && !Input.GetKey(KeyCode.RightControl)) ||
                    (kb.Modifier.HasFlag(KeyModifier.Alt) && (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))) ||
                    (kb.Modifier.HasFlag(KeyModifier.Shift) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) ||
                    (kb.Modifier.HasFlag(KeyModifier.Control) && (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))))
                {
                    //DoHotbarSlot(slot.GetAction(), kb.Name, slot.GetCurrentImage());
                    switch (slot.GetAction().SkillType)
                    {
                    case SkillType.Ability:
                        slot.GetComponentInChildren <AbilitySkill>().TriggerSkill();
                        break;

                    case SkillType.Weaponskill:
                        slot.GetComponentInChildren <WeaponSkill>().TriggerSkill();
                        break;

                    case SkillType.Spell:
                        slot.GetComponentInChildren <SpellSkill>().TriggerSkill();
                        break;
                    }
                    break;
                }
            }
        }
    }