/// <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
                 );
         }
     }
 }
 public static void QueueAndRunTrigger <Manager>(CharacterTrigger charTrigger, bool canAttackOrHeal = true, bool canFireTriggers = true, CharacterState.FireTriggersData fireTriggersData = null, int triggerCount = 1) where Manager : IProvider, ICharacterManager
 {
     QueueTrigger <Manager>(charTrigger, canAttackOrHeal, canFireTriggers, fireTriggersData, triggerCount);
     RunTriggerQueueRemote();
 }
 /// <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="characters">Characters to Queue 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>
 public static void QueueTrigger(CharacterTrigger charTrigger, CharacterState[] characters, bool canAttackOrHeal = true, bool canFireTriggers = true, CharacterState.FireTriggersData fireTriggersData = null, int triggerCount = 1)
 {
     if (ProviderManager.TryGetProvider <CombatManager>(out CombatManager combatManager))
     {
         foreach (CharacterState character in characters)
         {
             combatManager.QueueTrigger(
                 character,
                 charTrigger.GetEnum(),
                 canAttackOrHeal,
                 canFireTriggers,
                 fireTriggersData,
                 triggerCount
                 );
         }
     }
 }
 public static void QueueAndRunTrigger(CharacterTrigger charTrigger, CharacterState[] characters, bool canAttackOrHeal = true, bool canFireTriggers = true, CharacterState.FireTriggersData fireTriggersData = null, int triggerCount = 1)
 {
     QueueTrigger(charTrigger, characters, canAttackOrHeal, canFireTriggers, fireTriggersData, triggerCount);
     RunTriggerQueueRemote();
 }