private IEnumerator UpdateCoolingDown(ManaSlot slot)
    {
        float cd = 0;
        float rev = 360f * slot.GetCooldownTime(); // one revolution for each second of cooldown

        while (true)
        {
            cd = Mathf.Pow(1 - slot.GetCooldownPercent(), 2);
            transform.rotation = Quaternion.Euler(0, 0, cd * rev);

            if (!slot.IsOnCooldown()) break;
            yield return null;
        }
        SetSpellIcon(empty_slot);
    }
 private void OnSlotFilled(ManaSlot slot)
 {
     SpellSlotIcon icon = slot_icons[slot];
     icon.SetSpellIcon(slot.GetOriginSpell().icon_sprite);
 }
 private void OnSlotEmptied(ManaSlot slot)
 {
     SpellSlotIcon icon = slot_icons[slot];
     icon.SetCooldown(slot, sprite_slot_cd);
 }
 public void SetManaSlot(ManaSlot slot)
 {
     this.slot = slot;
 }
 public void SetCooldown(ManaSlot slot, Sprite cd_sprite)
 {
     icon.sprite = cd_sprite;
     StopAllCoroutines();
     StartCoroutine(UpdateCoolingDown(slot));
 }