예제 #1
0
        public void FirstAliveWorks()
        {
            var enemy1 = Build(Characters.Skeleton, 1);

            enemy1.Health.CurrentValue = 0;
            var enemy2     = Build(Characters.Gazer, 2);
            var enemy3     = Build(Characters.Revenant, 3);
            var friendlies = new Actor[] { null };
            var enemies    = new Actor[] { enemy1, enemy2, enemy3 };

            var targeted = Targeters[Targeter.FirstAlive](friendlies, enemies).ToArray();

            Assert.NotNull(targeted);
            Assert.Single(targeted);
            Assert.Equal(enemy2, targeted[0]);
        }
예제 #2
0
        // TODO: Return collection of render commands
        // TODO: Add try/catch statement?
        public RenderQueueEntry[] Execute(Actor source, IEnumerable <Actor> friendlyParty, IEnumerable <Actor> enemyParty)
        {
            var rqes = new List <RenderQueueEntry>();

            var playerReadyEntry = new RenderQueueEntry()
            {
                TargetCardIds = new[] { source.CardId },
                Animation     = "ReadyAttack"
            };

            rqes.Add(playerReadyEntry);

            var targetIds = new List <short>();

            foreach (var effect in Effects)
            {
                var newTargets = Targeters[effect.Targeter](friendlyParty, enemyParty);

                foreach (var newTarget in newTargets)
                {
                    if (newTarget != null)
                    {
                        targetIds.Add(AppliedEffects[effect.AppliedEffect](source, newTarget));
                    }
                }

                var newRQE = new RenderQueueEntry()
                {
                    TargetCardIds = targetIds.ToArray(),
                    Animation     = effect.Animation
                };

                rqes.Add(newRQE);
            }

            return(rqes.ToArray());
        }