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); }
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); }