Esempio n. 1
0
 public static void ShieldBreakerUntilEnd(Card source, int shieldBreaker, Func <Creature[]> args)
 {
     Creature[] allCreatures = args();
     int[]      shieldMemory = new int[allCreatures.Length];
     for (int i = 0; i < allCreatures.Length; i++)
     {
         shieldMemory[i] = allCreatures[i].ShieldBreaker;
         if (shieldBreaker > allCreatures[i].ShieldBreaker)
         {
             allCreatures[i].ShieldBreaker = shieldBreaker;
         }
     }
     Game.DuelistEventHandler a = null;
     a = (game, duelist) => {
         for (int i = 0; i < allCreatures.Length; i++)
         {
             if (shieldMemory[i] > allCreatures[i].ShieldBreaker)
             {
                 allCreatures[i].ShieldBreaker = shieldMemory[i];
             }
         }
         source.Owner.Game.DuelistTurnEnded -= a;
     };
     source.Owner.Game.DuelistTurnEnded += a;
 }
Esempio n. 2
0
        public static void AttackEachTurnIfAble(Creature source)
        {
            Game game     = source.Owner.Game;
            bool attacked = false;

            Duelist.DuelistEventHandler setHasAttackedToFalse = (duelist) => {
                attacked = false;
            };
            Game.AttackEventHandler setHasAttackedToTrue = (g, atking) => {
                if (atking == source)
                {
                    attacked = true;
                }
            };
            Game.DuelistEventHandler attack = (g, d) => {
                foreach (Duelist duelist in game.Duelists)
                {
                    if (attacked)
                    {
                        return;
                    }
                    if (source.Owner != duelist)
                    {
                        game.AttackPlayer(source, duelist);
                    }
                }
                foreach (Creature creature in game.GetAllInBattleZone <Creature>(source.Owner.BattleZone))
                {
                    if (attacked)
                    {
                        return;
                    }
                    game.Battle(source, creature);
                }
            };
            game.BattleZonePut += (g, bz, putCard) => {
                if (putCard == source)
                {
                    source.Owner.TurnStarted  += setHasAttackedToFalse;
                    game.Attacked             += setHasAttackedToTrue;
                    game.DuelistEndAttackStep += attack;
                }
            };
            game.BattleZoneRemoved += (g, bz, removedCard) => {
                if (removedCard == source)
                {
                    source.Owner.TurnStarted  -= setHasAttackedToFalse;
                    game.Attacked             -= setHasAttackedToTrue;
                    game.DuelistEndAttackStep -= attack;
                }
            };
        }
Esempio n. 3
0
        private static void StaticSpellEffectUntilEndMaker <T>(Spell source, Action <T> effect, Action <T> removeEffect, Func <T[]> toApply) where T : Card
        {
            Game game = source.Owner.Game;

            foreach (T card in toApply())
            {
                effect(card);
            }

            Game.BattleZoneEventHandler applyEffectOnPut = (g, bz, putCard) => {
                if (putCard is T)
                {
                    effect((T)putCard);
                }
            };
            game.BattleZonePut += applyEffectOnPut;

            Game.BattleZoneEventHandler removeEffectOnRemove = (g, bz, removedCard) => {
                if (removedCard is T)
                {
                    removeEffect((T)removedCard);
                }
            };
            game.BattleZoneRemoved += removeEffectOnRemove;

            Game.DuelistEventHandler turnEnd = null;
            turnEnd = (g, duelist) => {
                foreach (T card in toApply())
                {
                    removeEffect(card);
                }

                game.BattleZonePut     -= applyEffectOnPut;
                game.BattleZoneRemoved -= removeEffectOnRemove;
                game.DuelistAtTurnEnd  -= turnEnd;
            };
            game.DuelistTurnEnded += turnEnd;
        }