public override void Trigger(IGame game, IEffectHandle handle) { var defeatedState = new EnemyDefeated(game, enemy, attackers); foreach (var card in game.GetCardsInPlayWithEffect <ICardInPlay, IBeforeEnemyDefeated>()) { foreach (var effect in card.BaseCard.Text.Effects.OfType <IBeforeEnemyDefeated>()) { effect.BeforeEnemyDefeated(defeatedState); } } foreach (var card in game.GetCardsInPlayWithEffect <ICardInPlay, IDuringEnemyDefeated>()) { foreach (var effect in card.BaseCard.Text.Effects.OfType <IDuringEnemyDefeated>()) { effect.DuringEnemyDefeated(defeatedState); } } if (!defeatedState.IsEnemyDefeated) { handle.Cancel(GetCancelledString()); return; } foreach (var card in game.GetCardsInPlayWithEffect <ICardInPlay, IAfterEnemyDefeated>()) { foreach (var effect in card.BaseCard.Text.Effects.OfType <IAfterEnemyDefeated>()) { effect.AfterEnemyDefeated(defeatedState); } } var leavingPlayEffect = new CardLeavesPlayEffect(game, enemy); game.AddEffect(leavingPlayEffect); var leavingPlayHandle = leavingPlayEffect.GetHandle(game); game.TriggerEffect(leavingPlayHandle); handle.Resolve(GetCompletedStatus()); }
public override void Trigger(IGame game, IEffectHandle handle) { var defeatedState = new EnemyDefeated(game, enemy, attackers); foreach (var card in game.GetCardsInPlayWithEffect<ICardInPlay, IBeforeEnemyDefeated>()) { foreach (var effect in card.BaseCard.Text.Effects.OfType<IBeforeEnemyDefeated>()) { effect.BeforeEnemyDefeated(defeatedState); } } foreach (var card in game.GetCardsInPlayWithEffect<ICardInPlay, IDuringEnemyDefeated>()) { foreach (var effect in card.BaseCard.Text.Effects.OfType<IDuringEnemyDefeated>()) { effect.DuringEnemyDefeated(defeatedState); } } if (!defeatedState.IsEnemyDefeated) { handle.Cancel(GetCancelledString()); return; } foreach (var card in game.GetCardsInPlayWithEffect<ICardInPlay, IAfterEnemyDefeated>()) { foreach (var effect in card.BaseCard.Text.Effects.OfType<IAfterEnemyDefeated>()) { effect.AfterEnemyDefeated(defeatedState); } } var leavingPlayEffect = new CardLeavesPlayEffect(game, enemy); game.AddEffect(leavingPlayEffect); var leavingPlayHandle = leavingPlayEffect.GetHandle(game); game.TriggerEffect(leavingPlayHandle); handle.Resolve(GetCompletedStatus()); }
public void RemoveCardInPlay(ICardInPlay card) { if (card == null) throw new ArgumentNullException("card"); if (!cardsInPlay.Contains(card)) return; cardsInPlay.Remove(card); var leavesPlayEffect = new CardLeavesPlayEffect(Game, card); var leavesPlayHandle = leavesPlayEffect.GetHandle(Game); Game.AddEffect(leavesPlayEffect); Game.TriggerEffect(leavesPlayHandle); foreach (var callback in cardRemovedFromPlayCallbacks) callback(card); }