Пример #1
0
        public void Trigger(GameEvent gameEvent)
        {
            CurrentTurn.CurrentStep.GameEvents.Enqueue(gameEvent);
            var abilities = GetAbilitiesThatTriggerFromPermanents(gameEvent).ToList();
            List <DelayedTriggeredAbility> toBeRemoved = new List <DelayedTriggeredAbility>();

            foreach (var ability in DelayedTriggeredAbilities.Where(x => x.TriggeredAbility.CanTrigger(gameEvent, this)))
            {
                abilities.Add(ability.TriggeredAbility.Copy() as TriggeredAbility);
                if (ability.Duration is Once)
                {
                    toBeRemoved.Add(ability);
                }
            }
            _ = DelayedTriggeredAbilities.RemoveAll(x => toBeRemoved.Contains(x));
            CurrentTurn.CurrentStep.PendingAbilities.AddRange(abilities);
            foreach (var ability in abilities)
            {
                CurrentTurn.CurrentStep.GameEvents.Enqueue(new AbilityTriggeredEvent(ability));
            }
        }
Пример #2
0
 protected virtual void Dispose(bool disposing)
 {
     if (disposing)
     {
         foreach (var x in ExtraTurns)
         {
             x.Dispose();
         }
         ExtraTurns = null;
         foreach (var x in Players)
         {
             x.Dispose();
         }
         Players.Clear();
         foreach (var x in DelayedTriggeredAbilities)
         {
             x.Dispose();
         }
         DelayedTriggeredAbilities.Clear();
         ResolvingSpellAbilities = null;
         foreach (var x in ResolvingSpells)
         {
             x.Dispose();
         }
         ResolvingSpells = null;
         foreach (var x in Turns)
         {
             x.Dispose();
         }
         Turns.Clear();
         foreach (var x in ContinuousEffects)
         {
             x.Dispose();
         }
         ContinuousEffects.Clear();
     }
 }