public void handle(GameEvent e, EventTiming t) { if (t == timing && filter(e)) { action(e); } }
public void handleEvent(GameEvent e) { LinkedList<TriggeredAbility>[] timingLists = { new LinkedList<TriggeredAbility>(), new LinkedList<TriggeredAbility>(), new LinkedList<TriggeredAbility>(), }; //THIS NEEDS TO GO foreach (var l in timingLists) { l.Clear(); } foreach (Card c in game.allCards) { foreach (TriggeredAbility a in c.triggeredAbilities) { if (a.filter(e)) { timingLists[(int)a.timing].AddLast(a); } } } timingListLambda(timingLists[(int)EventTiming.Pre]); int i = (int)e.type; //todo(seba) implement instead of if (baseEventHandlers[i] != null) { baseEventHandlers[i].handle(e, EventTiming.Main); } timingListLambda(timingLists[(int)EventTiming.Post]); }
private void _step(GameEvent gevent) { }
private void _shuffle(GameEvent gevent) { ShuffleDeckEvent e = (ShuffleDeckEvent)gevent; shuffleDeck(e.player); }
private void _movecard(GameEvent gevent) { MoveCardEvent e = (MoveCardEvent)gevent; moveCardTo(e.card, e.to); e.card.moveReset(); e.card.owner.notifyObservers(); }
protected override GameEvent[] resolve(GameInterface ginterface, Target t, Card resolvingCard) { GameEvent[] r = new GameEvent[cards.Length]; Player p = t.player; for (int i = 0; i < cards.Length; i++) { r[i] = new SummonTokenEvent(p, cards[i]); } return r; }
private bool vanillaETB(GameEvent e) { if (e.type != GameEventType.MOVECARD) { return false; } MoveCardEvent moveEvent = (MoveCardEvent)e; return moveEvent.to.pile == LocationPile.FIELD; }
public override GameEvent[] pay(Card c, GameInterface gi, int[] i) { GameEvent[] r = new GameEvent[i.Length]; for (int v = 0; v < r.Length; v++) { r[v] = new ExhaustEvent(gi.getCardById(i[v])); } return r; }
private void _exhaust(GameEvent gevent) { ExhaustEvent e = (ExhaustEvent)gevent; e.card.exhausted = true; }
private void _draw(GameEvent gevent) { DrawEvent e = (DrawEvent)gevent; int i = 0; while (i++ < e.cardCount) { handleEvent(new MoveCardEvent(e.player.deck.peek(), e.player.hand.location)); } e.player.notifyObservers(); }
private void _damageplayer(GameEvent gevent) { DamagePlayerEvent e = (DamagePlayerEvent)gevent; e.player.setLifeRelative(-e.damage); }
private void _damagecreature(GameEvent gevent) { DamageCreatureEvent e = (DamageCreatureEvent)gevent; e.creature.damage(e.damage); }
private void _counterspell(GameEvent gevent) { CounterSpellEvent e = (CounterSpellEvent)gevent; Stack<StackWrapper> xd = new Stack<StackWrapper>(); while (true) { StackWrapper w = stackxd.Pop(); if (w.card == e.card) { break; } xd.Push(w); } while (xd.Count > 0) { stackxd.Push(xd.Pop()); } handleEvent(new MoveCardEvent(e.card, LocationPile.GRAVEYARD)); }
private void _cast(GameEvent gevent) { CastEvent e = (CastEvent)gevent; StackWrapper v = e.getStackWrapper(); //v.card = v.card.createDummy(); Card card = v.card; moveCardTo(card, game.stack); stackxd.Push(v); v.card.stackWrapper = v; v.card.owner?.notifyObservers(); }
private void _summontoken(GameEvent gevent) { SummonTokenEvent e = (SummonTokenEvent)gevent; Card card = game.makeCard(e.player, e.id); handleEvent(new MoveCardEvent(card, LocationPile.FIELD)); }
private void _topcard(GameEvent gevent) { TopEvent e = (TopEvent)gevent; e.card.exhausted = true; }
private void _gainbonusmana(GameEvent gevent) { GainBonusManaEvent e = (GainBonusManaEvent)gevent; e.player.addBonusMana(e.colour, 1); }
private bool friendlyETB(GameEvent e) { if (e.type != GameEventType.MOVECARD) { return false; } MoveCardEvent moveEvent = (MoveCardEvent)e; return moveEvent.to.pile == LocationPile.FIELD && moveEvent.card.controller == this.controller; }
private void _gainlife(GameEvent gevent) { GainLifeEvent e = (GainLifeEvent)gevent; e.player.setLifeRelative(e.life); }
protected override GameEvent[] resolve(GameInterface ginterface, Target t, Card resolvingCard) { GameEvent[] r = new GameEvent[colours.Length]; for (int i = 0; i < r.Length; i++) { r[i] = new GainBonusManaEvent(t.player, colours[i]); } return r; }
private void _gainmanaorb(GameEvent gevent) { GainManaOrbEvent e = (GainManaOrbEvent)gevent; e.player.addMana(e.getColor()); }
private void _modifycard(GameEvent gevent) { ModifyCardEvent e = (ModifyCardEvent)gevent; e.card.modify(e.modifiable, e.value, e.clojure); }
private void _untopplayer(GameEvent gevent) { //todo(seba) make this raise UNTOPCARD events UntopPlayerEvent e = (UntopPlayerEvent)gevent; e.player.untop(); }