Keep implementing attack resolution

This commit is contained in:
Loic Prieto 2025-06-15 23:24:57 +02:00
parent d93a5c50d1
commit c2a19499c9
2 changed files with 7 additions and 3 deletions

View file

@ -109,10 +109,11 @@ public class AttackScenario {
private double calculatePassingHits(Weapon weapon, int amountOfWeapons, int hitRollGoal) { private double calculatePassingHits(Weapon weapon, int amountOfWeapons, int hitRollGoal) {
int hitSuccessProbabilityNumerator = calculateProbabilityNumeratorFrom(hitRollGoal); int hitSuccessProbabilityNumerator = calculateProbabilityNumeratorFrom(hitRollGoal);
int hitFailureProbabilityNumerator = 6 - hitSuccessProbabilityNumerator; int hitFailureProbabilityNumerator = 6 - hitSuccessProbabilityNumerator;
double weaponAttacks = calculateWeaponAttacks(weapon); double weaponAttacks = calculateWeaponAttacks(weapon, amountOfWeapons);
// Base passing hits without rerolls // Base passing hits without rerolls
double passingHits = (weaponAttacks*amountOfWeapons) * ((double) hitSuccessProbabilityNumerator / PROBABILITY_DENOMINATOR_D6); double passingHits = (weaponAttacks*amountOfWeapons) * ((double) hitSuccessProbabilityNumerator / PROBABILITY_DENOMINATOR_D6);
results.setWeaponStat(weapon, WeaponStat.HITS_COUNT_WITHOUT_REROLL, passingHits);
// Add hits from rerolls // Add hits from rerolls
var hitRerolls = prepareHitRerolls(hitRollGoal); var hitRerolls = prepareHitRerolls(hitRollGoal);
@ -120,6 +121,7 @@ public class AttackScenario {
var rerolls = hitRerolls.get(); var rerolls = hitRerolls.get();
passingHits += rerolls.getProbabilityNumerator() * ((double) hitSuccessProbabilityNumerator / PROBABILITY_DENOMINATOR_D6); passingHits += rerolls.getProbabilityNumerator() * ((double) hitSuccessProbabilityNumerator / PROBABILITY_DENOMINATOR_D6);
} }
results.setWeaponStat(weapon, WeaponStat.HITS_TOTAL_COUNT, passingHits);
return passingHits; return passingHits;
} }
@ -135,11 +137,12 @@ public class AttackScenario {
return Optional.empty(); return Optional.empty();
} }
private double calculateWeaponAttacks(Weapon weapon) { private double calculateWeaponAttacks(Weapon weapon, int amountOfWeapons) {
double weaponAttacks = weapon.getAttacks(); double weaponAttacks = weapon.getAttacks();
if(weapon.getRapidFire().isPresent() && attackerInRapidFireRange) { if(weapon.getRapidFire().isPresent() && attackerInRapidFireRange) {
weaponAttacks += weapon.getRapidFire().get(); weaponAttacks += weapon.getRapidFire().get();
} }
weaponAttacks *= amountOfWeapons;
results.setWeaponStat(weapon, WeaponStat.POTENTIAL_HITS_COUNT, weaponAttacks); results.setWeaponStat(weapon, WeaponStat.POTENTIAL_HITS_COUNT, weaponAttacks);
// Add sustained hits // Add sustained hits

View file

@ -4,7 +4,8 @@ import lombok.Getter;
@Getter @Getter
public enum WeaponStat { public enum WeaponStat {
HITS_COUNT(Double.class), HITS_COUNT_WITHOUT_REROLL(Double.class),
HITS_TOTAL_COUNT(Double.class),
POTENTIAL_HITS_COUNT(Double.class), POTENTIAL_HITS_COUNT(Double.class),
WOUNDS_COUNT(Double.class), WOUNDS_COUNT(Double.class),
MORTAL_WOUNDS_COUNT(Double.class), MORTAL_WOUNDS_COUNT(Double.class),