public void OnShieldBroken_Attacked_TriggersCorrectly(int startingShields, bool triggered) { var target = TestMembers.Create(x => x.With(StatType.MaxHP, 10).With(StatType.Toughness, 1)); var attacker = TestMembers.Create(s => s.With(StatType.Attack, 1)); target.State.GainShield(startingShields); var reactionCardType = TestCards.Reaction( ReactiveMember.Possessor, ReactiveTargetScope.Self, new EffectData { EffectType = EffectType.AdjustStatAdditively, FloatAmount = new FloatReference(1), EffectScope = new StringReference("Armor"), NumberOfTurns = new IntReference(-1) }); AllEffects.Apply(new EffectData { EffectType = EffectType.OnShieldBroken, NumberOfTurns = new IntReference(3), ReactionSequence = reactionCardType }, target, target); ReactiveTestUtilities.ApplyEffectAndReactions(new EffectData { EffectType = EffectType.Attack, FloatAmount = new FloatReference(1), EffectScope = new StringReference(ReactiveTargetScope.Self.ToString()) }, attacker, target); Assert.AreEqual(triggered ? 1 : 0, target.State.Armor()); }
public void ReactiveTrigger_OnAttacked_GainedOneArmor() { var target = TestMembers.Create(s => s.With(StatType.MaxHP, 10)); var attacker = TestMembers.Create(s => s.With(StatType.Attack, 1)); var reactionCardType = TestCards.Reaction( ReactiveMember.Possessor, ReactiveTargetScope.Self, new EffectData { EffectType = EffectType.AdjustStatAdditively, FloatAmount = new FloatReference(1), EffectScope = new StringReference("Armor"), NumberOfTurns = new IntReference(-1) }); AllEffects.Apply(new EffectData { EffectType = EffectType.OnAttacked, NumberOfTurns = new IntReference(3), ReactionSequence = reactionCardType }, target, target); ReactiveTestUtilities.ApplyEffectAndReactions(new EffectData { EffectType = EffectType.Attack, FloatAmount = new FloatReference(1), EffectScope = new StringReference(ReactiveTargetScope.Self.ToString()) }, attacker, target); Assert.AreEqual(1, target.State.Armor()); }
public void OnEvaded_ApplyTwice_OnlyGeneratesOneReaction() { var target = TestMembers.Create(s => s.With(StatType.MaxHP, 10)); var attacker = TestMembers.Create(s => s.With(StatType.Attack, 1)); target.State.AdjustEvade(1); var reactionCardType = TestCards.Reaction( ReactiveMember.Possessor, ReactiveTargetScope.Self, new EffectData { EffectType = EffectType.AdjustStatAdditively, FloatAmount = new FloatReference(1), EffectScope = new StringReference("Armor"), NumberOfTurns = new IntReference(-1) }); AllEffects.Apply(new EffectData { EffectType = EffectType.OnEvaded, NumberOfTurns = new IntReference(3), ReactionSequence = reactionCardType }, new EffectContext(target, new Single(target))); ReactiveTestUtilities.ApplyEffectAndReactions(new EffectData { EffectType = EffectType.Attack, FloatAmount = new FloatReference(1), EffectScope = new StringReference(ReactiveTargetScope.Self.ToString()) }, attacker, target); Assert.AreEqual(10, target.State[TemporalStatType.HP]); Assert.AreEqual(1, target.State.Armor()); }
public void ReactiveTrigger_OnAttacked_AttackerHitForOneDamage() { var target = TestMembers.Create(s => s.With(StatType.MaxHP, 10).With(StatType.Attack, 1)); var attacker = TestMembers.Create(s => s.With(StatType.MaxHP, 10).With(StatType.Attack, 1)); var reactionCardType = TestCards.Reaction( ReactiveMember.Originator, ReactiveTargetScope.Attacker, new EffectData { EffectType = EffectType.Attack, FloatAmount = new FloatReference(1) }); AllEffects.Apply(new EffectData { EffectType = EffectType.OnAttacked, NumberOfTurns = new IntReference(3), ReactionSequence = reactionCardType }, target, target); ReactiveTestUtilities.ApplyEffectAndReactions(new EffectData { EffectType = EffectType.Attack, FloatAmount = new FloatReference(1), EffectScope = new StringReference(ReactiveTargetScope.Self.ToString()) }, attacker, target); Assert.AreEqual(9, attacker.CurrentHp()); }