Beispiel #1
0
        public virtual decimal GetAttackScore(ICombatObject attacker, ICombatObject target, uint round)
        {
            decimal attackBonus = attacker.AttackBonus(target);
            decimal modifier    = (decimal)GetDmgModifier(attacker, target, round);

            return(modifier * (1 + attackBonus));
        }
Beispiel #2
0
        public virtual decimal GetAttackerDmgToDefender(ICombatObject attacker, ICombatObject target, uint round)
        {
            decimal atk          = attacker.Stats.Atk;
            decimal rawDmg       = (atk * attacker.Count);
            decimal attackBonus  = attacker.AttackBonus(target);
            decimal defenseBonus = target.DefenseBonus(attacker);
            decimal modifier     = (decimal)GetDmgModifier(attacker, target, round);

            rawDmg = modifier * rawDmg * (1 + attackBonus) / (1 + defenseBonus);

            return(rawDmg > ushort.MaxValue ? ushort.MaxValue : rawDmg);
        }
Beispiel #3
0
        public void GetAttackScore_ShouldCalculateCorrectScore(
            [FrozenMock] UnitModFactory unitModFactory,
            ICombatObject attacker,
            ICombatObject target,
            BattleFormulas battleFormulas)
        {
            attacker.AttackBonus(target).Returns(0.2m);
            attacker.Stats.Base.Weapon.Returns(WeaponType.Bow);
            target.Stats.Base.Armor.Returns(ArmorType.Machine);
            attacker.Type.Returns <ushort>(1);
            target.Type.Returns <ushort>(2);
            unitModFactory.GetModifier(1, 2).Returns(1.25);

            var score = battleFormulas.GetAttackScore(attacker, target, 1);

            score.Should().Be(1.5m);
        }