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