/// <summary>
 /// Used to queue a Character Trigger to be automatically executed during key phases of combat. If you need to ensure that your trigger is executed at other times, please use QueueAndRunTrigger with a coroutine.
 /// </summary>
 /// <param name="charTrigger">CharacterTrigger to be queued</param>
 /// <param name="character">Character to Queue the Trigger On</param>
 /// <param name="canAttackOrHeal">Whether the Character being triggered can Attack or be Healed</param>
 /// <param name="canFireTriggers">Whether the trigger can currently be fired</param>
 /// <param name="fireTriggersData">Additional Parameters for controlling how the trigger is fired</param>
 /// <param name="triggerCount">Number of Times to Trigger</param>
 /// <returns>Returns Whether it succeeded at Queuing a trigger internally</returns>
 public static void QueueTrigger(CharacterTrigger charTrigger, CharacterState character, bool canAttackOrHeal = true, bool canFireTriggers = true, CharacterState.FireTriggersData fireTriggersData = null, int triggerCount = 1)
 {
     if (ProviderManager.TryGetProvider <CombatManager>(out CombatManager combatManager))
     {
         combatManager.QueueTrigger(
             character,
             charTrigger.GetEnum(),
             canAttackOrHeal,
             canFireTriggers,
             fireTriggersData,
             triggerCount
             );
     }
 }
 /// <summary>
 /// Used to queue a Character Trigger to be automatically executed during key phases of combat. If you need to ensure that your trigger is executed at other times, please use QueueAndRunTrigger with a coroutine.
 /// </summary>
 /// <typeparam name="Manager">Type of Manager to Queue and Run Triggers to</typeparam>
 /// <param name="charTrigger">CharacterTrigger to be queued</param>
 /// <param name="canAttackOrHeal">Whether the Character being triggered can Attack or be Healed</param>
 /// <param name="canFireTriggers">Whether the trigger can currently be fired</param>
 /// <param name="fireTriggersData">Additional Parameters for controlling how the trigger is fired</param>
 /// <param name="triggerCount">Number of Times to Trigger</param>
 /// <returns></returns>
 public static void QueueTrigger <Manager>(CharacterTrigger charTrigger, bool canAttackOrHeal = true, bool canFireTriggers = true, CharacterState.FireTriggersData fireTriggersData = null, int triggerCount = 1) where Manager : ICharacterManager, IProvider
 {
     if (ProviderManager.TryGetProvider <CombatManager>(out CombatManager combatManager) && ProviderManager.TryGetProvider <Manager>(out Manager characterManager))
     {
         for (int i = 0; i < characterManager.GetNumCharacters(); i++)
         {
             combatManager.QueueTrigger(
                 characterManager.GetCharacter(i),
                 charTrigger.GetEnum(),
                 canAttackOrHeal,
                 canFireTriggers,
                 fireTriggersData,
                 triggerCount
                 );
         }
     }
 }
 /// <summary>
 /// Associates two triggers with eachother allowing MT to cast from one trigger to another
 /// </summary>
 /// <param name="cardTrigger">CardTrigger to be Associated</param>
 /// <param name="characterTrigger">CharacterTrigger to be Associated</param>
 public static void AssociateTriggers(CardTrigger cardTrigger, CharacterTrigger characterTrigger)
 {
     CharToCardTriggerDict[characterTrigger.GetEnum()] = cardTrigger.GetEnum();
     CardToCharTriggerDict[cardTrigger.GetEnum()]      = characterTrigger.GetEnum();
 }