public ShotProposed CalculateShot()
        {
            var distance       = _attacker.CurrentTile.Position.TileDistance(_defender.CurrentTile.Position);
            var attackerWeapon = _attacker.Gear.EquippedWeapon.AsRanged();
            var proposed       = new ShotProposed
            {
                Attacker             = _attacker,
                Defender             = _defender,
                AttackerHitChance    = new HitChanceCalculation(_attacker.Accuracy, _defenderBlockInfo.BlockChance, _defender.Stats.Agility, _defender.State.IsHiding).Get(),
                AttackerBulletDamage = (int)Math.Ceiling((attackerWeapon.DamagePerHit * attackerWeapon.EffectiveRanges[distance]) * (100 - (_defender.Stats.Guts * 5)) / 100),
                AttackerBlockInfo    = _attackerBlockInfo,
                IsAttackerHiding     = _attacker.State.IsHiding
            };

            if (_defender.Gear.EquippedWeapon.IsRanged)
            {
                var defenderWeapon = _defender.Gear.EquippedWeapon.AsRanged();
                proposed.DefenderHitChance = new HitChanceCalculation(_defender.Accuracy, _attackerBlockInfo.BlockChance, _attacker.Stats.Agility, _attacker.State.IsHiding).Get();
                if (defenderWeapon.EffectiveRanges.ContainsKey(distance))
                {
                    proposed.DefenderBulletDamage = (int)Math.Ceiling((defenderWeapon.DamagePerHit * defenderWeapon.EffectiveRanges[distance]) * (100 - (_attacker.Stats.Guts * 5)) / 100);
                }
            }
            proposed.AttackerDamage    = proposed.DefenderHitChance * proposed.DefenderBullets * proposed.DefenderBulletDamage / 100;
            proposed.DefenderDamage    = proposed.AttackerHitChance * proposed.AttackerBullets * proposed.AttackerBulletDamage / 100;
            proposed.DefenderBlockInfo = _defenderBlockInfo;
            proposed.IsDefenderHiding  = _defender.State.IsHiding;
            return(proposed);
        }
Exemplo n.º 2
0
 private void DisplayPreview(ShotProposed e)
 {
     _hidden = false;
     _attackerSummary.Update(
         e.Attacker.FaceImage,
         e.Attacker.Stats.Name,
         e.Attacker.Gear.EquippedWeapon.Image,
         e.Attacker.Gear.EquippedWeapon.Name,
         e.AttackerHitChance.ToString(),
         e.AttackerBullets.ToString(),
         e.AttackerBulletDamage.ToString(),
         e.Attacker.Stats.HP,
         e.Attacker.State.RemainingHealth,
         e.AttackerDamage,
         e.Attacker.Team);
     _defenderSummary.Update(
         e.Defender.FaceImage,
         e.Defender.Stats.Name,
         e.Defender.Gear.EquippedWeapon.Image,
         e.Defender.Gear.EquippedWeapon.Name,
         e.DefenderHitChance.ToString(),
         e.DefenderBullets.ToString(),
         e.DefenderBulletDamage.ToString(),
         e.Defender.Stats.HP,
         e.Defender.State.RemainingHealth,
         e.DefenderDamage,
         e.Attacker.Team);
 }