/// <summary> /// A general function used to Apply a Card Trigger in different ways, dependant on parameters /// </summary> /// <param name="cardTrigger">CardTrigger to be Applied</param> /// <param name="playedCard">Card to apply triggers to</param> /// <param name="fireAllMonsterTriggersInRoom">Whether Apply Card Triggers should fire on monster's Instead, requires Trigger to have an associated character trigger</param> /// <param name="roomIndex">Room to fire triggers in, -1 defaults to selected room</param> /// <param name="ignoreDeadInTargeting">Whether effects applied by the trigger should ignore dead in targetting</param> /// <param name="triggeredCharacter">Character used to determine how many times Card Trigger should be applied</param> /// <param name="cardTriggerFiredCallback">Action to take after applying trigger</param> /// <returns></returns> public static void ApplyCardTriggers(CardTrigger cardTrigger, CardState playedCard, bool fireAllMonsterTriggersInRoom = false, int roomIndex = -1, bool ignoreDeadInTargeting = true, CharacterState triggeredCharacter = null, Action cardTriggerFiredCallback = null) { Trainworks.Log(BepInEx.Logging.LogLevel.Info, $"Applying {cardTrigger.Name}"); if (ProviderManager.TryGetProvider <CombatManager>(out CombatManager combatManager)) { combatManager.StartCoroutine( combatManager.ApplyCardTriggers( cardTrigger.GetEnum(), playedCard, fireAllMonsterTriggersInRoom, roomIndex, ignoreDeadInTargeting, triggeredCharacter, cardTriggerFiredCallback ) ); } }
/// <summary> /// A function used to fire a card trigger, causing the effects of the corresponding trigger on the playedCard to be fired. /// </summary> /// <param name="cardTrigger">CardTrigger to be Fired</param> /// <param name="playedCard">Card to Fire Trigger on</param> /// <param name="roomIndex">Room to fire trigger in, -1 is current room</param> /// <param name="ignoreDeadInTargeting">Whether effect should ignore dead in targeting</param> /// <param name="triggeredCharacter">Character used for applying effects</param> /// <param name="fireCount">how many times the trigger fires</param> /// <param name="cardTriggerFiredCallback">Action to call after function is called</param> /// <returns></returns> public static void FireCardTriggers(CardTrigger cardTrigger, CardState playedCard, int roomIndex = -1, bool ignoreDeadInTargeting = true, CharacterState triggeredCharacter = null, int fireCount = 1, Action cardTriggerFiredCallback = null) { if (ProviderManager.TryGetProvider <CombatManager>(out CombatManager combatManager)) { combatManager.StartCoroutine( (IEnumerator)AccessTools.Method( typeof(CombatManager), "FireCardTriggers" ) .Invoke(combatManager, new object[7] { cardTrigger.GetEnum(), playedCard, roomIndex, ignoreDeadInTargeting, triggeredCharacter, fireCount, cardTriggerFiredCallback } ) ); } }
/// <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(); }