public void DebugAttackArmorTest()
        {
            var DM     = DungeonMaster.GetDebugDM(data);
            var attack = DebugData.GetDebugAttackAction();

            var robby = DM.Characters[0];
            var zach  = DM.Characters[1];

            zach.Conditions.Add(new Condition("Dodging", 3));

            var outcome = new Outcome();

            DM.Activate(robby);
            attack.ResolveAction(DM, robby, null, zach, "", outcome);
            //not adjacent so nothing happens
            Assert.IsTrue(zach.Vitality.Value == zach.Vitality.Max);

            zach.Pos = robby.Pos + Map.DirectionToPosition[Map.Direction.E];
            Deck.SetFate(new List <string>()
            {
                "Glancing Blow"
            });
            attack.ResolveAction(DM, robby, null, zach, "", outcome);
            Assert.IsTrue(zach.Vitality.Value < zach.Vitality.Max);
            Assert.AreEqual(zach.Vitality.Max - robby.Strength.Value - robby.WeaponDamage + zach.ArmorProtection, zach.Vitality.Value);
        }
        public void DebugAttackDeckTest()
        {
            var DM     = DungeonMaster.GetDebugDM(data);
            var attack = DebugData.GetDebugAttackAction();

            var robby = DM.Characters[0];
            var zach  = DM.Characters[1];


            var deck = attack.GetDeckFor(DM, robby, null, zach);

            Assert.AreEqual(robby.Profeciency.Value + robby.WeaponAdvantage - zach.ArmorCoverage, deck.Cards.Count(c => c.TypeOfCard == Card.CardType.Hit));
            Assert.AreEqual(zach.ArmorCoverage, deck.Cards.Count(c => c.TypeOfCard == Card.CardType.Armor));
            Assert.AreEqual(2, deck.Cards.Count(c => c.TypeOfCard == Card.CardType.Miss));

            int dodgeCards = 3;

            zach.Conditions.Add(new Condition("Dodging", dodgeCards));

            deck = attack.GetDeckFor(DM, robby, null, zach);

            Assert.AreEqual(robby.Profeciency.Value + robby.WeaponAdvantage - zach.ArmorCoverage, deck.Cards.Count(c => c.TypeOfCard == Card.CardType.Hit));
            Assert.AreEqual(zach.ArmorCoverage, deck.Cards.Count(c => c.TypeOfCard == Card.CardType.Armor));
            Assert.AreEqual(2 + dodgeCards, deck.Cards.Count(c => c.TypeOfCard == Card.CardType.Miss));
        }
        public void ActionSerializationTest()
        {
            var    action  = DebugData.GetDebugAttackAction();
            string json    = JsonConvert.SerializeObject(action);
            var    action2 = JsonConvert.DeserializeObject <Action>(json);

            Assert.AreEqual(action.Name, action2.Name);
            Assert.AreEqual(action.Cost.Count, action2.Cost.Count);
            Assert.AreEqual(action.DeckRecipe.Count, action2.DeckRecipe.Count);
        }
        public void DebugAttackDodgeTest()
        {
            var DM     = DungeonMaster.GetDebugDM(data);
            var attack = DebugData.GetDebugAttackAction();

            var robby      = DM.Characters[0];
            var zach       = DM.Characters[1];
            int dodgeCards = 3;

            zach.Conditions.Add(new Condition("Dodging", dodgeCards));
            DM.Activate(robby);
            zach.Pos = robby.Pos + Map.DirectionToPosition[Map.Direction.E];

            Deck.SetFate(new List <string>()
            {
                "Dodge"
            });
            var outcome = new Outcome();

            attack.ResolveAction(DM, robby, null, zach, "", outcome);
            Assert.IsTrue(zach.Vitality.Value == zach.Vitality.Max);
            Assert.AreEqual(dodgeCards - 1, zach.Conditions.First(c => c.Name == "Dodging").Value);
        }