@Test public void testGetClusterAmmo() { // Test an ammo list with only 1 bin of cluster ammo. List<Mounted> testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoLB10XCluster); FireControl testFireControl = new FireControl(mockPrincess); Assert.assertEquals(mockAmmoLB10XCluster, testFireControl.getClusterAmmo(testAmmoList, mockLB10X, 5)); // Test an ammo list with only 1 bin of slug ammo. testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoLB10XSlug); testFireControl = new FireControl(mockPrincess); Assert.assertNull(testFireControl.getClusterAmmo(testAmmoList, mockLB10X, 5)); // Test with both loaded testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoLB10XCluster); testAmmoList.add(mockAmmoLB10XSlug); Assert.assertEquals(mockAmmoLB10XCluster, testFireControl.getClusterAmmo(testAmmoList, mockLB10X, 5)); }
modifier += calcCommandUtility(firingPlan.getTarget()); modifier += calcStrategicBuildingTargetUtility(firingPlan.getTarget()); modifier += calcPriorityUnitTargetUtility(firingPlan.getTarget()); utility += KILL_UTILITY * firingPlan.getKillProbability(); utility *= calcTargetPotentialDamageMultiplier(firingPlan.getTarget()); utility += TARGET_HP_FRACTION_DEALT_UTILITY * calcDamageAllocationUtility(firingPlan.getTarget(), expectedDamage); utility -= calcCivilianTargetDisutility(firingPlan.getTarget()); utility *= modifier; utility -= (shooterIsAero ? OVERHEAT_DISUTILITY_AERO : OVERHEAT_DISUTILITY) * overheat;
FiringPlan alphaStrike = getFullFiringPlan(shooter, target, ammoConservation, game); FiringPlan betaStrike = getFullFiringPlan(shooter, target, ammoConservation, game); betaStrike.setFlipArms(true); if(betaStrike.getUtility() > alphaStrike.getUtility()) { final FiringPlan[] allPlans = calcFiringPlansUnderHeat(shooter, alphaStrike); return getBestFiringPlanUnderHeat(target, shooter, allPlans);
private FiringPlan getBestFiringPlanUnderHeat(final Targetable target, final Entity shooter, final FiringPlan[] allPlans) { // Determine the best plan taking into account our heat tolerance. FiringPlan bestPlan = new FiringPlan(target); final boolean isAero = shooter.isAero(); final int heatTolerance = calcHeatTolerance(shooter, isAero); calculateUtility(bestPlan, heatTolerance, isAero); for (final FiringPlan firingPlan : allPlans) { calculateUtility(firingPlan, heatTolerance, isAero); if ((bestPlan.getUtility() < firingPlan.getUtility())) { bestPlan = firingPlan; } } return bestPlan; }
return getAtmAmmo(validAmmo, range, new EntityState(target), fireResistant); preferredAmmo = getIncendiaryAmmo(validAmmo, weaponType, range); if (null != preferredAmmo) { msg.append("Burn It Down!"); preferredAmmo = getAntiAirAmmo(validAmmo, weaponType, range); if (null != preferredAmmo) { msg.append("Shoot It Down!"); || (targetEntity instanceof Protomech)) { msg.append("\n\tTarget is BA/Proto/Tank... "); preferredAmmo = getAntiVeeAmmo(validAmmo, weaponType, range, fireResistant); if (null != preferredAmmo) { msg.append("We have ways of dealing with that."); preferredAmmo = getAntiInfantryAmmo(validAmmo, weaponType, range); if (null != preferredAmmo) { msg.append("They squish nicely."); preferredAmmo = getClusterAmmo(validAmmo, weaponType, range); if (null != preferredAmmo) { msg.append("Let's find a soft spot."); preferredAmmo = getHeatAmmo(validAmmo, weaponType, range); if (null != preferredAmmo) { msg.append("Let's heat him up more."); preferredAmmo = getHardTargetAmmo(validAmmo, weaponType, range);
final WeaponFireInfo shoot = buildWeaponFireInfo(shooter, target, weapon, game, false); if ((shoot.getProbabilityToHit() > toHitThreshold)) { myPlan.add(shoot); calculateUtility(myPlan, calcHeatTolerance(shooter, null), shooter.isAero()); final FiringPlan bombingPlan = this.getDiveBombPlan(shooter, null, target, game, shooter.passedOver(target), false); calculateUtility(bombingPlan, DOES_NOT_TRACK_HEAT, true); // bomb drops never cause heat
testFireControl = Mockito.spy(new FireControl(mockPrincess)); Mockito.doReturn(mockShooterMoveMod) .when(testFireControl) .getAttackerMovementModifier(Mockito.any(IGame.class), Mockito.anyInt(), Mockito.nullable(EntityMovementType.class)); Mockito.doReturn(mockTargetMoveMod) .when(testFireControl) .getTargetMovementModifier(Mockito.anyInt(), Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.any(IGame.class)); mockPPCFireInfo = Mockito.mock(WeaponFireInfo.class); Mockito.when(mockPPCFireInfo.getProbabilityToHit()).thenReturn(0.5); Mockito.doReturn(mockPPCFireInfo).when(testFireControl).buildWeaponFireInfo(Mockito.any(Entity.class), Mockito.any(EntityState.class), Mockito.any(Targetable.class), Mockito.any(IGame.class), Mockito.anyBoolean()); Mockito.doReturn(mockPPCFireInfo).when(testFireControl).buildWeaponFireInfo(Mockito.any(Entity.class), Mockito.any(MovePath.class), Mockito.any(Targetable.class), Mockito.anyBoolean(), Mockito.anyBoolean()); Mockito.doReturn(mockPPCFireInfo).when(testFireControl).buildWeaponFireInfo(Mockito.any(Entity.class), Mockito.any(Targetable.class), Mockito.eq(mockPPC), mockMLFireInfo = Mockito.mock(WeaponFireInfo.class);
(e.getHeatCapacity() - e.getHeat()) + 5, null); double damage = fireControl.determineBestFiringPlan(guess) .getExpectedDamage(); if (damage > max_damage) {
@Test public void testGetAntiAirAmmo() { // Test an ammo list with only 1 bin. List<Mounted> testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoAC5Std); final FireControl testFireControl = new FireControl(mockPrincess); Assert.assertNull(testFireControl.getAntiAirAmmo(testAmmoList, mockWeaponTypeAC5, 5)); // Add the flak ammo. testAmmoList.add(mockAmmoAC5Flak); Assert.assertEquals(mockAmmoAC5Flak, testFireControl.getAntiAirAmmo(testAmmoList, mockWeaponTypeAC5, 5)); // Test a list with 2 bins of standard and 0 flak ammo. testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoAC5Std); testAmmoList.add(mockAmmoAC5Std); Assert.assertNull(testFireControl.getAntiAirAmmo(testAmmoList, mockWeaponTypeAC5, 5)); // Test LBX weaponry. testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoLB10XCluster); testAmmoList.add(mockAmmoLB10XSlug); Assert.assertEquals(mockAmmoLB10XCluster, testFireControl.getAntiAirAmmo(testAmmoList, mockLB10X, 5)); }
@Test public void testGetGeneralMmlAmmo() { // Test a list with just SRM ammo. List<Mounted> testAmmoList = new ArrayList<>(1); testAmmoList.add(mockAmmoSRM5); final FireControl testFireControl = new FireControl(mockPrincess); Assert.assertEquals(mockAmmoSRM5, testFireControl.getGeneralMmlAmmo(testAmmoList, 6)); Assert.assertNull(testFireControl.getGeneralMmlAmmo(testAmmoList, 10)); // Test a list with just LRM ammo. testAmmoList = new ArrayList<>(1); testAmmoList.add(mockAmmoLRM5); Assert.assertEquals(mockAmmoLRM5, testFireControl.getGeneralMmlAmmo(testAmmoList, 10)); Assert.assertEquals(mockAmmoLRM5, testFireControl.getGeneralMmlAmmo(testAmmoList, 3)); // Test a list with both types of ammo. testAmmoList = new ArrayList<>(2); testAmmoList.add(mockAmmoLRM5); testAmmoList.add(mockAmmoSRM5); Assert.assertEquals(mockAmmoLRM5, testFireControl.getGeneralMmlAmmo(testAmmoList, 10)); Assert.assertEquals(mockAmmoLRM5, testFireControl.getGeneralMmlAmmo(testAmmoList, 6)); Assert.assertEquals(mockAmmoSRM5, testFireControl.getGeneralMmlAmmo(testAmmoList, 4)); }
final FireControl testFireControl = new FireControl(mockPrincess); Assert.assertEquals(mockAmmoAc5Flechette, testFireControl.getAntiInfantryAmmo(testAmmoList, mockWeaponTypeAC5, 5)); Assert.assertNull(testFireControl.getAntiInfantryAmmo(testAmmoList, mockWeaponTypeAC5, 5)); testAmmoList.add(mockAmmoAC5Flak); testAmmoList.add(mockAmmoAc5Flechette); Assert.assertEquals(mockAmmoAc5Flechette, testFireControl.getAntiInfantryAmmo(testAmmoList, mockWeaponTypeAC5, 5)); testAmmoList.add(mockAmmoLB10XCluster); testAmmoList.add(mockAmmoLB10XSlug); Assert.assertEquals(mockAmmoLB10XCluster, testFireControl.getAntiInfantryAmmo(testAmmoList, mockLB10X, 5)); testAmmoList.add(mockAmmoInfero5); testAmmoList.add(mockAmmoLrm5Frag); Assert.assertEquals(mockAmmoInfero5, testFireControl.getAntiInfantryAmmo(testAmmoList, mockMML5, 4)); Assert.assertEquals(mockAmmoLrm5Frag, testFireControl.getAntiInfantryAmmo(testAmmoList, mockMML5, 8)); Assert.assertEquals(mockAmmoLrm5Frag, testFireControl.getAntiInfantryAmmo(testAmmoList, mockMML5, 10));
FireControl testFireControl = new FireControl(mockPrincess); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockWeaponTypeAC5, 5, false)); testFireControl = new FireControl(mockPrincess); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockWeaponTypeAC5, 5, false)); testAmmoList.add(mockAmmoAc5Incendiary); testAmmoList.add(mockAmmoAC5Flak); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockWeaponTypeAC5, 5, true)); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockWeaponTypeAC5, 5, false)); testAmmoList.add(mockAmmoLB10XCluster); testAmmoList.add(mockAmmoLB10XSlug); Assert.assertEquals(mockAmmoLB10XCluster, testFireControl.getAntiVeeAmmo(testAmmoList, mockLB10X, 5, false)); testAmmoList.add(mockAmmoInfero5); testAmmoList.add(mockAmmoLrm5Frag); Assert.assertEquals(mockAmmoInfero5, testFireControl.getAntiVeeAmmo(testAmmoList, mockMML5, 4, false)); Assert.assertEquals(mockAmmoInfero5, testFireControl.getAntiVeeAmmo(testAmmoList, mockMML5, 8, false)); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockMML5, 4, true)); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockMML5, 8, true)); Assert.assertNull(testFireControl.getAntiVeeAmmo(testAmmoList, mockMML5, 10, false));
final FireControl testFireControl = new FireControl(mockPrincess); Assert.assertEquals(mockAmmoAc5Incendiary, testFireControl.getIncendiaryAmmo(testAmmoList, mockWeaponTypeAC5, 5)); Assert.assertNull(testFireControl.getIncendiaryAmmo(testAmmoList, mockWeaponTypeAC5, 5)); testAmmoList.add(mockAmmoAc5Incendiary); testAmmoList.add(mockAmmoAC5Flak); Assert.assertEquals(mockAmmoAc5Incendiary, testFireControl.getIncendiaryAmmo(testAmmoList, mockWeaponTypeAC5, 5)); testAmmoList.add(mockAmmoLB10XCluster); testAmmoList.add(mockAmmoLB10XSlug); Assert.assertNull(testFireControl.getIncendiaryAmmo(testAmmoList, mockLB10X, 5)); testAmmoList.add(mockAmmoSRM5); testAmmoList.add(mockAmmoInfero5); Assert.assertEquals(mockAmmoInfero5, testFireControl.getIncendiaryAmmo(testAmmoList, mockMML5, 4)); Assert.assertEquals(mockAmmoInfero5, testFireControl.getIncendiaryAmmo(testAmmoList, mockMML5, 8)); Assert.assertNull(testFireControl.getIncendiaryAmmo(testAmmoList, mockMML5, 10));
final FireControl testFireControl = new FireControl(mockPrincess); Assert.assertEquals(mockAmmoAC5Std, testFireControl.getHardTargetAmmo(testAmmoList, mockWeaponTypeAC5, 5)); Assert.assertNull(testFireControl.getHardTargetAmmo(testAmmoList, mockWeaponTypeAC5, 5)); testAmmoList.add(mockAmmoAC5Flak); testAmmoList.add(mockAmmoAC5Std); Assert.assertEquals(mockAmmoAC5Std, testFireControl.getHardTargetAmmo(testAmmoList, mockWeaponTypeAC5, 5)); testAmmoList.add(mockAmmoLB10XCluster); testAmmoList.add(mockAmmoLB10XSlug); Assert.assertEquals(mockAmmoLB10XSlug, testFireControl.getHardTargetAmmo(testAmmoList, mockLB10X, 5)); testAmmoList.add(mockAmmoSRM5); testAmmoList.add(mockAmmoInfero5); Assert.assertEquals(mockAmmoSRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 4)); Assert.assertEquals(mockAmmoLRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 8)); Assert.assertEquals(mockAmmoLRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 10)); testAmmoList.add(mockAmmoSRM5); testAmmoList.add(mockAmmoInfero5); Assert.assertEquals(mockAmmoSRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 4)); Assert.assertEquals(mockAmmoSRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 8)); Assert.assertNull(testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 10)); testAmmoList.add(mockAmmoLRM5); testAmmoList.add(mockAmmoInfero5); Assert.assertEquals(mockAmmoLRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 4)); Assert.assertEquals(mockAmmoLRM5, testFireControl.getHardTargetAmmo(testAmmoList, mockMML5, 8));
final FireControl testFireControl = new FireControl(mockPrincess); Assert.assertEquals(mockAmmoAtm5He, testFireControl.getAtmAmmo(testAmmoList, 5, mockTargetState, false)); Assert.assertNull(testFireControl.getAtmAmmo(testAmmoList, 15, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5St, testFireControl.getAtmAmmo(testAmmoList, 5, mockTargetState, false)); Assert.assertNull(testFireControl.getAtmAmmo(testAmmoList, 20, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5Er, testFireControl.getAtmAmmo(testAmmoList, 5, mockTargetState, false)); testAmmoList.add(mockAmmoAtm5Er); testAmmoList.add(mockAmmoAtm5St); Assert.assertEquals(mockAmmoAtm5Er, testFireControl.getAtmAmmo(testAmmoList, 20, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5Er, testFireControl.getAtmAmmo(testAmmoList, 12, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5St, testFireControl.getAtmAmmo(testAmmoList, 8, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5He, testFireControl.getAtmAmmo(testAmmoList, 6, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5St, testFireControl.getAtmAmmo(testAmmoList, 5, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5He, testFireControl.getAtmAmmo(testAmmoList, 3, mockTargetState, false)); testAmmoList.add(mockAmmoAtm5He); testAmmoList.add(mockAmmoAtm5St); Assert.assertNull(testFireControl.getAtmAmmo(testAmmoList, 20, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5St, testFireControl.getAtmAmmo(testAmmoList, 12, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5St, testFireControl.getAtmAmmo(testAmmoList, 8, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5He, testFireControl.getAtmAmmo(testAmmoList, 6, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5St, testFireControl.getAtmAmmo(testAmmoList, 5, mockTargetState, false)); Assert.assertEquals(mockAmmoAtm5He, testFireControl.getAtmAmmo(testAmmoList, 3, mockTargetState, false)); testAmmoList.add(mockAmmoAtm5He); testAmmoList.add(mockAmmoAtm5Er);
/** * Test to make sure that Princess will choose a FiringPlan that shots at * a MechWarrior, instead of choosing to do nothing. */ @Test public void testCalcFiringPlansAtMechwarrior() { mockTarget = Mockito.mock(MechWarrior.class); Mockito.when(mockPPCFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockPPCFireInfo.getHeat()).thenReturn(10); Mockito.when(mockPPCFireInfo.getExpectedDamageOnHit()).thenReturn(10.0); Mockito.when(mockMLFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockMLFireInfo.getHeat()).thenReturn(3); Mockito.when(mockMLFireInfo.getExpectedDamageOnHit()).thenReturn(5.0); Mockito.when(mockLRMFireInfo.getProbabilityToHit()).thenReturn(0.6); Mockito.when(mockLRMFireInfo.getHeat()).thenReturn(1); Mockito.when(mockLRMFireInfo.getExpectedDamageOnHit()).thenReturn(3.0); Mockito.doReturn(0.0).when(testFireControl).calcDamageAllocationUtility(Mockito.any(Targetable.class), Mockito.anyDouble()); Mockito.when(mockShooter.getPosition()).thenReturn(mockShooterCoords); Mockito.when(mockTarget.getPosition()).thenReturn(mockTargetCoords); Mockito.when(mockShooter.getWeaponList()).thenReturn(shooterWeapons); final FiringPlan plan = testFireControl.getBestFiringPlan(mockShooter, mockTarget, mockGame, testToHitThreshold); Assert.assertFalse("Expected not 0.0. Got " + plan.getUtility(), 0.00001 > Math.abs(0 - plan.getUtility())); } }
Mockito.when(mockBoard.contains(Mockito.eq(mockShooterCoords))).thenReturn(true); Mockito.when(mockBoard.contains(Mockito.eq(mockTargetCoords))).thenReturn(true); Mockito.doNothing().when(testFireControl).calculateUtility(Mockito.any(FiringPlan.class), Mockito.anyInt(), Mockito.anyBoolean()); expected.add(mockPPCFireInfo); expected.add(mockLRMFireInfo); final FiringPlan actual = testFireControl.guessFullFiringPlan(mockShooter, mockShooterState, mockTarget, mockTargetState, mockGame); Assert.assertEquals(new HashSet<>(expected), new HashSet<>(actual)); Assert.assertEquals(expected, testFireControl.guessFullFiringPlan(mockShooter, mockShooterState, mockTarget, mockTargetState, mockGame)); Assert.assertEquals(expected, testFireControl.guessFullFiringPlan(mockShooter, mockShooterState, mockTarget, mockTargetState, mockGame));
Mockito.when(mockBoard.contains(Mockito.eq(mockShooterCoords))).thenReturn(true); Mockito.when(mockBoard.contains(Mockito.eq(mockTargetCoords))).thenReturn(true); Mockito.doNothing().when(testFireControl).calculateUtility(Mockito.any(FiringPlan.class), Mockito.anyInt(), Mockito.anyBoolean()); expected.add(mockPPCFireInfo); expected.add(mockLRMFireInfo); final FiringPlan actual = testFireControl.guessFullAirToGroundPlan(mockShooter, mockTarget, mockTargetState, mockFlightPath, mockGame, true); Assert.assertEquals(new HashSet<>(expected), new HashSet<>(actual)); Assert.assertEquals(expected, testFireControl.guessFullAirToGroundPlan(mockShooter, mockTarget, mockTargetState, mockFlightPath, mockGame, true)); Assert.assertEquals(expected, testFireControl.guessFullAirToGroundPlan(mockShooter, mockTarget, mockTargetState, mockFlightPath, mockGame, true));
FiringPlan alphaStrike = guessFullFiringPlan(shooter, shooterState, target, targetState, game); FiringPlan betaStrike = guessFullFiringPlan(shooter, shooterState, target, targetState, game); betaStrike.setFlipArms(true); final FiringPlan[] heatPlans = calcFiringPlansUnderHeat(shooter, alphaStrike); FiringPlan bestPlan = new FiringPlan(target);
Mockito.when(mockBoard.contains(Mockito.eq(mockShooterCoords))).thenReturn(true); Mockito.when(mockBoard.contains(Mockito.eq(mockTargetCoords))).thenReturn(true); Mockito.doNothing().when(testFireControl).calculateUtility(Mockito.any(FiringPlan.class), Mockito.anyInt(), Mockito.anyBoolean()); expected.add(mockPPCFireInfo); expected.add(mockLRMFireInfo); final FiringPlan actual = testFireControl.getFullFiringPlan(mockShooter, mockTarget, testToHitThreshold, mockGame); Assert.assertEquals(new HashSet<>(expected), new HashSet<>(actual)); Assert.assertEquals(expected, testFireControl.getFullFiringPlan(mockShooter, mockTarget, testToHitThreshold, mockGame)); Mockito.when(mockTarget.getPosition()).thenReturn(mockTargetCoords); Assert.assertEquals(expected, testFireControl.getFullFiringPlan(mockShooter, mockTarget, testToHitThreshold, mockGame)); Mockito.when(mockShooter.getPosition()).thenReturn(mockShooterCoords); expected = new FiringPlan(mockTarget); expected.add(mockPPCFireInfo); Assert.assertEquals(expected, testFireControl.getFullFiringPlan(mockShooter, mockTarget, testToHitThreshold, mockGame)); testToHitThreshold.put(mockLRM5, 0.0);