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);
 }