public static bool AddEffect(AbilityInput effect)
        {
            for (int i = 0; i < activeEffects.Count; i++)
            {
                if (effect.selectedSpell.name == activeEffects[i].selectedSpell.name)
                {
                    if (((effect.selectedSpell.isLocationBased && effect.fireLocation == activeEffects[i].fireLocation) ||
                         (!effect.selectedSpell.isLocationBased && effect.targetedDice == activeEffects[i].targetedDice)) &&
                        !((effect.selectedSpell as Effect).isStackable))
                    {
                        if (spellPlayList.IndexOf(activeEffects[i]) > spellPlayingIndex)
                        {
                            spellPlayList.Remove(activeEffects[i]);
                        }
                        if (!effect.selectedSpell.isLocationBased)
                        {
                            activeEffects[i].targetedDice.activeEffects.Remove(activeEffects[i].selectedSpell as Effect);
                        }
                        activeEffects.RemoveAt(i);
                        break;
                    }
                }
            }
            activeEffects.Add(effect);
            if (!effect.selectedSpell.isLocationBased)
            {
                effect.targetedDice.activeEffects.Add(effect.selectedSpell as Effect);
            }
            int x = spellPlayingIndex + 1;

            while (x < spellPlayList.Count && GetAbilitySpeed(effect) < GetAbilitySpeed(spellPlayList[x]))
            {
                x++;
            }
            spellPlayList.Insert(x, effect);
            return(true);
        }
 private static int CompareAbilitySpeeds(AbilityInput x, AbilityInput y)
 {
     if (x == null)
     {
         if (y == null)
         {
             return(0);
         }
         else
         {
             return(+1);
         }
     }
     else
     {
         if (y == null)
         {
             return(-1);
         }
         else
         {
             if (GetAbilitySpeed(x) < GetAbilitySpeed(y))
             {
                 return(+1);
             }
             else if (GetAbilitySpeed(x) > GetAbilitySpeed(y))
             {
                 return(-1);
             }
             else
             {
                 return(0);
             }
         }
     }
 }
 private static float GetAbilitySpeed(AbilityInput ability)
 {
     return(ability.selectedDice.speed * ability.selectedSpell.speed);
 }