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