private void AddTriggerSpy(PhaseChangeTrigger trigger) { if (!_surveilledTriggers.Contains(trigger)) { //the CardSource check lets us examine whether the card would react to the *current* phase change without an infinite loop Func <PhaseChangeAction, bool> spy = (PhaseChangeAction pca) => (pca.CardSource != null && pca.CardSource.Card == this.Card) || UpdateActed(trigger, pca); trigger.AddAdditionalCriteria(spy); _surveilledTriggers.Add(trigger); _spies[trigger] = spy; } }
private bool UpdateActed(PhaseChangeTrigger trigger, PhaseChangeAction pca) { if (GameController.RealMode && IsFirstOrOnlyCopyOfThisCardInPlay() && !trigger.Types.Any((TriggerType t) => t == TriggerType.Hidden || t == TriggerType.HiddenLast)) { var TestPhaseChange = new PhaseChangeAction(GetCardSource(), pca.FromPhase, pca.ToPhase, true); if (trigger.DoesMatchTypeAndCriteria(TestPhaseChange)) { _justActivatedTrigger = trigger; } else { _justActivatedTrigger = null; } } return(true); }