From 186c9948b36a2381e8df0e6b57ff44da932829a1 Mon Sep 17 00:00:00 2001 From: asvitkine Date: Sun, 21 Apr 2024 13:43:03 -0400 Subject: [PATCH] Remove special handling of battle logic for edit mode. (#12529) This logic was just adding code complexity and some bugs and it's not clear why it's needed. (It was making so no casualties would ever happen during battles when edit mode is on.) Fixes: #12488 (And the duplicate issues.) --- .../battle/StrategicBombingRaidBattle.java | 152 ++++++++---------- .../battle/casualty/AaCasualtySelector.java | 4 +- .../battle/casualty/CasualtySelector.java | 19 --- .../fire/SelectMainBattleCasualties.java | 8 +- .../strategy/triplea/ui/BattleDisplay.java | 21 +-- .../triplea/ui/CasualtySelection.java | 15 +- .../casualty/AaCasualtySelectorTest.java | 34 +--- .../delegate/battle/steps/MockGameData.java | 6 - .../fire/SelectMainBattleCasualtiesTest.java | 50 ------ .../strategy/triplea/ui/BattlePanel.java | 11 +- 10 files changed, 79 insertions(+), 241 deletions(-) diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/StrategicBombingRaidBattle.java b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/StrategicBombingRaidBattle.java index e6accea6f83..a065033904e 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/StrategicBombingRaidBattle.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/StrategicBombingRaidBattle.java @@ -25,7 +25,6 @@ import games.strategy.triplea.delegate.DiceRoll; import games.strategy.triplea.delegate.Die; import games.strategy.triplea.delegate.Die.DieType; -import games.strategy.triplea.delegate.EditDelegate; import games.strategy.triplea.delegate.ExecutionStack; import games.strategy.triplea.delegate.IExecutable; import games.strategy.triplea.delegate.Matches; @@ -454,7 +453,6 @@ class FireAa implements IExecutable { @Override public void execute(final ExecutionStack stack, final IDelegateBridge bridge) { - final boolean isEditMode = EditDelegate.getEditMode(bridge.getData().getProperties()); for (final String currentTypeAa : aaTypes) { final Collection currentPossibleAa = CollectionUtils.getMatches(defendingAa, Matches.unitIsAaOfTypeAa(currentTypeAa)); @@ -565,9 +563,7 @@ public void execute(final ExecutionStack stack, final IDelegateBridge bridge) { stack.push(removeHits); stack.push(notifyCasualties); stack.push(calculateCasualties); - if (!isEditMode) { - stack.push(roll); - } + stack.push(roll); } } } @@ -696,80 +692,29 @@ public void execute(final ExecutionStack stack, final IDelegateBridge bridge) { } private void rollDice(final IDelegateBridge bridge) { - final int rollCount = getSbrRolls(attackingUnits, attacker); if (rollCount == 0) { dice = null; return; } dice = new int[rollCount]; - final boolean isEditMode = EditDelegate.getEditMode(gameData.getProperties()); - if (isEditMode) { - final String annotation = - attacker.getName() - + " fixing dice to allocate cost of strategic bombing raid against " - + defender.getName() - + " in " - + battleSite.getName(); - final Player attacker = bridge.getRemotePlayer(StrategicBombingRaidBattle.this.attacker); - // does not take into account bombers with dice sides higher than getDiceSides - dice = attacker.selectFixedDice(rollCount, 0, annotation, gameData.getDiceSides()); - } else { - final boolean doNotUseBombingBonus = - !Properties.getUseBombingMaxDiceSidesAndBonus(gameData.getProperties()); - final String annotation = - attacker.getName() - + " rolling to allocate cost of strategic bombing raid against " - + defender.getName() - + " in " - + battleSite.getName(); - if (!Properties.getLowLuckDamageOnly(gameData.getProperties())) { - if (doNotUseBombingBonus) { - // no low luck, and no bonus, so just roll based on the map's dice sides - dice = - bridge.getRandom( - gameData.getDiceSides(), rollCount, attacker, DiceType.BOMBING, annotation); - } else { - // we must use bombing bonus - int i = 0; - final int diceSides = gameData.getDiceSides(); - for (final Unit u : attackingUnits) { - final int rolls = getSbrRolls(u, attacker); - if (rolls < 1) { - continue; - } - final UnitAttachment ua = u.getUnitAttachment(); - int maxDice = ua.getBombingMaxDieSides(); - final int bonus = ua.getBombingBonus(); - // both could be -1, meaning they were not set. if they were not set, then we use - // default dice sides for - // the map, and zero for the bonus. - if (maxDice < 0) { - maxDice = diceSides; - } - // now we roll, or don't if there is nothing to roll. - if (maxDice > 0) { - final int[] diceRolls = - bridge.getRandom(maxDice, rolls, attacker, DiceType.BOMBING, annotation); - for (final int die : diceRolls) { - // min value is -1 as we add 1 when setting damage since dice are 0 instead of 1 - // based - dice[i] = Math.max(-1, die + bonus); - i++; - } - } else { - for (int j = 0; j < rolls; j++) { - // min value is -1 as we add 1 when setting damage since dice are 0 instead of 1 - // based - dice[i] = Math.max(-1, bonus); - i++; - } - } - } - } + + final boolean doNotUseBombingBonus = + !Properties.getUseBombingMaxDiceSidesAndBonus(gameData.getProperties()); + final String annotation = + attacker.getName() + + " rolling to allocate cost of strategic bombing raid against " + + defender.getName() + + " in " + + battleSite.getName(); + if (!Properties.getLowLuckDamageOnly(gameData.getProperties())) { + final int diceSides = gameData.getDiceSides(); + if (doNotUseBombingBonus) { + // no low luck, and no bonus, so just roll based on the map's dice sides + dice = bridge.getRandom(diceSides, rollCount, attacker, DiceType.BOMBING, annotation); } else { + // we must use bombing bonus int i = 0; - final int diceSides = gameData.getDiceSides(); for (final Unit u : attackingUnits) { final int rolls = getSbrRolls(u, attacker); if (rolls < 1) { @@ -777,28 +722,17 @@ private void rollDice(final IDelegateBridge bridge) { } final UnitAttachment ua = u.getUnitAttachment(); int maxDice = ua.getBombingMaxDieSides(); - int bonus = ua.getBombingBonus(); + final int bonus = ua.getBombingBonus(); // both could be -1, meaning they were not set. if they were not set, then we use - // default dice sides for the - // map, and zero for the bonus. - if (maxDice < 0 || doNotUseBombingBonus) { + // default dice sides for the map, and zero for the bonus. + if (maxDice < 0) { maxDice = diceSides; } - if (doNotUseBombingBonus) { - bonus = 0; - } - // now, regardless of whether they were set or not, we have to apply "low luck" to them, - // meaning in this - // case that we reduce the luck by 2/3. - if (maxDice >= 5) { - bonus += (maxDice + 1) / 3; - maxDice = (maxDice + 1) / 3; - } // now we roll, or don't if there is nothing to roll. if (maxDice > 0) { - final int[] dicerolls = + final int[] diceRolls = bridge.getRandom(maxDice, rolls, attacker, DiceType.BOMBING, annotation); - for (final int die : dicerolls) { + for (final int die : diceRolls) { // min value is -1 as we add 1 when setting damage since dice are 0 instead of 1 // based dice[i] = Math.max(-1, die + bonus); @@ -814,6 +748,50 @@ private void rollDice(final IDelegateBridge bridge) { } } } + } else { + int i = 0; + final int diceSides = gameData.getDiceSides(); + for (final Unit u : attackingUnits) { + final int rolls = getSbrRolls(u, attacker); + if (rolls < 1) { + continue; + } + final UnitAttachment ua = u.getUnitAttachment(); + int maxDice = ua.getBombingMaxDieSides(); + int bonus = ua.getBombingBonus(); + // both could be -1, meaning they were not set. if they were not set, then we use + // default dice sides for the map, and zero for the bonus. + if (maxDice < 0 || doNotUseBombingBonus) { + maxDice = diceSides; + } + if (doNotUseBombingBonus) { + bonus = 0; + } + // now, regardless of whether they were set or not, we have to apply "low luck" to them, + // meaning in this case that we reduce the luck by 2/3. + if (maxDice >= 5) { + bonus += (maxDice + 1) / 3; + maxDice = (maxDice + 1) / 3; + } + // now we roll, or don't if there is nothing to roll. + if (maxDice > 0) { + final int[] dicerolls = + bridge.getRandom(maxDice, rolls, attacker, DiceType.BOMBING, annotation); + for (final int die : dicerolls) { + // min value is -1 as we add 1 when setting damage since dice are 0 instead of 1 + // based + dice[i] = Math.max(-1, die + bonus); + i++; + } + } else { + for (int j = 0; j < rolls; j++) { + // min value is -1 as we add 1 when setting damage since dice are 0 instead of 1 + // based + dice[i] = Math.max(-1, bonus); + i++; + } + } + } } } diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelector.java b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelector.java index d12f30e86bf..c6717832016 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelector.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelector.java @@ -10,7 +10,6 @@ import games.strategy.triplea.Properties; import games.strategy.triplea.delegate.DiceRoll; import games.strategy.triplea.delegate.Die.DieType; -import games.strategy.triplea.delegate.EditDelegate; import games.strategy.triplea.delegate.Matches; import games.strategy.triplea.delegate.data.CasualtyDetails; import games.strategy.triplea.delegate.power.calculator.AaPowerStrengthAndRolls; @@ -49,8 +48,7 @@ public static CasualtyDetails getAaCasualties( !defendingAa.isEmpty() && defendingAa.stream() .allMatch(Matches.unitAaShotDamageableInsteadOfKillingInstantly()); - if (EditDelegate.getEditMode(data.getProperties()) - || Properties.getChooseAaCasualties(data.getProperties())) { + if (Properties.getChooseAaCasualties(data.getProperties())) { return CasualtySelector.selectCasualties( hitPlayer, planes, diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/CasualtySelector.java b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/CasualtySelector.java index 1dbbd4a193f..711375e6543 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/CasualtySelector.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/casualty/CasualtySelector.java @@ -11,7 +11,6 @@ import games.strategy.triplea.ai.weak.WeakAi; import games.strategy.triplea.attachments.UnitAttachment; import games.strategy.triplea.delegate.DiceRoll; -import games.strategy.triplea.delegate.EditDelegate; import games.strategy.triplea.delegate.Matches; import games.strategy.triplea.delegate.data.CasualtyDetails; import games.strategy.triplea.delegate.data.CasualtyList; @@ -77,24 +76,6 @@ public static CasualtyDetails selectCasualties( ? extraHits : dice.getHits(); - if (EditDelegate.getEditMode(data.getProperties())) { - return tripleaPlayer.selectCasualties( - targetsToPickFrom, - dependents, - hitsRemaining, - text, - dice, - player, - combatValue.getFriendUnits(), - combatValue.getEnemyUnits(), - false, - List.of(), - new CasualtyDetails(), - battleId, - battleSite, - allowMultipleHitsPerUnit); - } - if (dice.getHits() == 0) { return new CasualtyDetails(); } diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualties.java b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualties.java index 5799a707f87..721c00839ec 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualties.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualties.java @@ -7,7 +7,6 @@ import games.strategy.engine.data.Unit; import games.strategy.engine.delegate.IDelegateBridge; import games.strategy.triplea.Properties; -import games.strategy.triplea.delegate.EditDelegate; import games.strategy.triplea.delegate.Matches; import games.strategy.triplea.delegate.battle.casualty.CasualtySelector; import games.strategy.triplea.delegate.data.CasualtyDetails; @@ -46,12 +45,7 @@ public CasualtyDetails apply(final IDelegateBridge bridge, final SelectCasualtie final int hitsLeftForRestrictedTransports = hitCount - totalHitPointsAvailable; final CasualtyDetails casualtyDetails; - if (EditDelegate.getEditMode(step.getBattleState().getGameData().getProperties())) { - final CasualtyDetails message = - selectFunction.apply(bridge, step, step.getFiringGroup().getTargetUnits(), 0); - casualtyDetails = new CasualtyDetails(message, true); - - } else if (totalHitPointsAvailable > hitCount) { + if (totalHitPointsAvailable > hitCount) { // not all units were hit so the player needs to pick which ones are killed casualtyDetails = selectFunction.apply( diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/ui/BattleDisplay.java b/game-app/game-core/src/main/java/games/strategy/triplea/ui/BattleDisplay.java index c375993c770..6b00fa28a74 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/ui/BattleDisplay.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/ui/BattleDisplay.java @@ -12,7 +12,6 @@ import games.strategy.engine.data.Unit; import games.strategy.triplea.delegate.DiceRoll; import games.strategy.triplea.delegate.Die; -import games.strategy.triplea.delegate.EditDelegate; import games.strategy.triplea.delegate.Matches; import games.strategy.triplea.delegate.TerritoryEffectHelper; import games.strategy.triplea.delegate.battle.BattleState; @@ -257,10 +256,7 @@ void casualtyNotification( final Collection damaged, final Map> dependents) { setStep(step); - final boolean isEditMode = (dice == null); - if (!isEditMode) { - dicePanel.setDiceRoll(dice); - } + dicePanel.setDiceRoll(dice); casualties.setNotification(killed, damaged, dependents); killed.addAll(updateKilledUnits(killed, player)); if (player.equals(defender)) { @@ -477,15 +473,11 @@ CasualtyDetails getCasualties( SwingUtilities.invokeLater( () -> { - final boolean isEditMode = EditDelegate.getEditMode(gameData.getProperties()); - if (!isEditMode) { - dicePanel.setDiceRoll(dice); - casualties.setVisible(false); - } - final boolean plural = isEditMode || (count > 1); - final String countStr = isEditMode ? "" : "" + count; + dicePanel.setDiceRoll(dice); + casualties.setVisible(false); + final boolean plural = (count > 1); final String btnText = - hit.getName() + " select " + countStr + (plural ? " casualties" : " casualty"); + hit.getName() + " select " + count + (plural ? " casualties" : " casualty"); final var casualtySelection = new CasualtySelection( selectFrom, @@ -496,8 +488,7 @@ CasualtyDetails getCasualties( defaultCasualties, allowMultipleHitsPerUnit, uiContext, - BattleDisplay.this, - isEditMode); + BattleDisplay.this); actionButton.setAction( new AbstractAction(btnText) { diff --git a/game-app/game-core/src/main/java/games/strategy/triplea/ui/CasualtySelection.java b/game-app/game-core/src/main/java/games/strategy/triplea/ui/CasualtySelection.java index bf0cf6c299b..b64d095d331 100644 --- a/game-app/game-core/src/main/java/games/strategy/triplea/ui/CasualtySelection.java +++ b/game-app/game-core/src/main/java/games/strategy/triplea/ui/CasualtySelection.java @@ -40,7 +40,6 @@ public class CasualtySelection { private final GamePlayer player; private final JDialog dialog; - private final boolean isEditMode; private final JOptionPane optionPane; @@ -53,13 +52,10 @@ public CasualtySelection( final CasualtyList defaultCasualties, final boolean allowMultipleHitsPerUnit, final UiContext uiContext, - final Component dialogParent, - final boolean isEditMode) { + final Component dialogParent) { this.hitsToTake = hitsToTake; this.player = player; - this.isEditMode = isEditMode; - final boolean movementForAirUnitsOnly = playerMayChooseToDistributeHitsToUnitsWithDifferentMovement(selectFrom); @@ -73,12 +69,7 @@ public CasualtySelection( allowMultipleHitsPerUnit, uiContext); chooser.setTitle(title); - - if (isEditMode) { - chooser.disableMax(); - } else { - chooser.setMax(hitsToTake); - } + chooser.setMax(hitsToTake); final JScrollPane chooserScrollPane = new JScrollPane(chooser); chooserScrollPane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1)); @@ -120,7 +111,7 @@ public Optional showModalDialog() { final List killed = chooser.getSelected(false); final List damaged = chooser.getSelectedDamagedMultipleHitPointUnits(); - if (!isEditMode && (killed.size() + damaged.size() != hitsToTake)) { + if (killed.size() + damaged.size() != hitsToTake) { JOptionPane.showMessageDialog( dialog /*.getParent()*/, "Wrong number of casualties selected", diff --git a/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelectorTest.java b/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelectorTest.java index b40be72c781..a03a011d908 100644 --- a/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelectorTest.java +++ b/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/casualty/AaCasualtySelectorTest.java @@ -133,7 +133,6 @@ void initializeGameData() { @Test void hitsEqualToPlanesKillsAll() { - final CasualtyDetails details = AaCasualtySelector.getAaCasualties( planeUnitType.createTemp(1, hitPlayer), @@ -153,7 +152,6 @@ void hitsEqualToPlanesKillsAll() { @Test void hitsMoreThanPlanesKillsAll() { - final CasualtyDetails details = AaCasualtySelector.getAaCasualties( planeUnitType.createTemp(1, hitPlayer), @@ -173,7 +171,6 @@ void hitsMoreThanPlanesKillsAll() { @Test void oneHitAgainstTwoPlanesOnlyKillsOne() { - final UnitType aaNonInfiniteUnitType = new UnitType("aaNonInfiniteUnitType", gameData); final UnitAttachment aaNonInfiniteUnitAttachment = new UnitAttachment("aaNonInfiniteUnitAttachment", aaNonInfiniteUnitType, gameData); @@ -203,7 +200,6 @@ void oneHitAgainstTwoPlanesOnlyKillsOne() { @Test void identicalDieRollsShouldStillKillPlanesEqualToHits() { - final UnitType aaNonInfiniteUnitType = new UnitType("aaNonInfiniteUnitType", gameData); final UnitAttachment aaNonInfiniteUnitAttachment = new UnitAttachment("aaNonInfiniteUnitAttachment", aaNonInfiniteUnitType, gameData); @@ -236,7 +232,6 @@ void identicalDieRollsShouldStillKillPlanesEqualToHits() { @Test void hitsEqualToPlanesMultiHpDamagesAndKillsAll() { - final CasualtyDetails details = AaCasualtySelector.getAaCasualties( planeMultiHpUnitType.createTemp(1, hitPlayer), @@ -257,7 +252,6 @@ void hitsEqualToPlanesMultiHpDamagesAndKillsAll() { @Test void hitsGreaterThanPlanesMultiHpDamagesAndKillsAll() { - final CasualtyDetails details = AaCasualtySelector.getAaCasualties( planeMultiHpUnitType.createTemp(1, hitPlayer), @@ -277,7 +271,6 @@ void hitsGreaterThanPlanesMultiHpDamagesAndKillsAll() { @Test void oneHitAgainstMultiHpPlaneOnlyDamagesIt() { - whenGetRandom(bridge).thenAnswer(withValues(0)); final CasualtyDetails details = @@ -299,7 +292,6 @@ void oneHitAgainstMultiHpPlaneOnlyDamagesIt() { @Test void threeHitsAgainstTwoMultiHpPlanesKillsOneAndDamagesTheOther() { - whenGetRandom(bridge).thenAnswer(withValues(0, 1, 2)); final CasualtyDetails details = @@ -327,7 +319,6 @@ void threeHitsAgainstTwoMultiHpPlanesKillsOneAndDamagesTheOther() { @Test void identicalDieRollsShouldStillKillAndDamagePlanesEqualToHits() { - whenGetRandom(bridge).thenAnswer(withValues(6, 6, 6, 6, 6)); final CasualtyDetails details = @@ -382,7 +373,6 @@ void initializeGameData() { @Test void hitsEqualToPlanesKillsAll() { - final CasualtyDetails details = AaCasualtySelector.getAaCasualties( planeUnitType.createTemp(1, hitPlayer), @@ -402,7 +392,6 @@ void hitsEqualToPlanesKillsAll() { @Test void hitsLessThanPlanesKillsAccordingToTheRolledDice() { - final List planes = planeUnitType.createTemp(5, hitPlayer); final CasualtyDetails details = @@ -440,12 +429,7 @@ void setupPlayers() { @BeforeEach void initializeGameData() { gameData = - givenGameData() - .withDiceSides(6) - .withEditMode(false) - .withChooseAaCasualties(false) - .withLowLuck(true) - .build(); + givenGameData().withDiceSides(6).withChooseAaCasualties(false).withLowLuck(true).build(); bridge = mock(IDelegateBridge.class); when(bridge.getData()).thenReturn(gameData); @@ -492,7 +476,6 @@ void initializeGameData() { @Test void oneTypeOfPlaneWithAmountEqualToDiceSides() { - final List planes = planeUnitType.createTemp(6, hitPlayer); final List aaUnits = aaUnitType.createTemp(1, aaPlayer); @@ -559,7 +542,6 @@ private DiceRoll givenLowLuckDiceRollWithExtraHit( @Test void twoTypesOfPlanesAndBothHaveAmountEqualToDiceSides() { - final List planes = planeUnitType.createTemp(6, hitPlayer); planes.addAll(otherPlaneUnitType.createTemp(6, hitPlayer)); final List aaUnits = aaUnitType.createTemp(1, aaPlayer); @@ -591,7 +573,6 @@ void twoTypesOfPlanesAndBothHaveAmountEqualToDiceSides() { @Test void twoTypesOfPlanesAndTogetherHaveAmountEqualToDiceSides() { - // need to randomly pick a plane to kill whenGetRandom(bridge).thenAnswer(withValues(1)); @@ -626,7 +607,6 @@ void twoTypesOfPlanesAndTogetherHaveAmountEqualToDiceSides() { @Test void oneTypeOfMultiHpPlaneWithAmountEqualToDiceSides() { - whenGetRandom(bridge).thenAnswer(withValues(1)); final List planes = planeMultiHpUnitType.createTemp(6, hitPlayer); @@ -654,7 +634,6 @@ void oneTypeOfMultiHpPlaneWithAmountEqualToDiceSides() { @Test void twoTypesOfMultiHpPlanesAndBothHaveAmountEqualToDiceSides() { - whenGetRandom(bridge).thenAnswer(withValues(1, 1)); final List planes = planeMultiHpUnitType.createTemp(6, hitPlayer); @@ -688,7 +667,6 @@ void twoTypesOfMultiHpPlanesAndBothHaveAmountEqualToDiceSides() { @Test void oneTypeOfPlaneWithAmountLessThanDiceSidesButItHit() { - // need to randomly pick a plane to kill whenGetRandom(bridge).thenAnswer(withValues(1)); @@ -717,7 +695,6 @@ void oneTypeOfPlaneWithAmountLessThanDiceSidesButItHit() { @Test void twoTypesOfPlanesAndTogetherHaveAmountLessThanDiceSidesButItHit() { - // need to randomly pick a plane to kill whenGetRandom(bridge).thenAnswer(withValues(1)); @@ -752,7 +729,6 @@ void twoTypesOfPlanesAndTogetherHaveAmountLessThanDiceSidesButItHit() { @Test void oneTypeOfPlaneWithRemainderOverDiceSidesButNotExtraHit() { - final List planes = planeUnitType.createTemp(8, hitPlayer); final List aaUnits = aaUnitType.createTemp(1, aaPlayer); @@ -778,7 +754,6 @@ void oneTypeOfPlaneWithRemainderOverDiceSidesButNotExtraHit() { @Test void twoTypesOfPlanesAndBothHaveRemainderOverDiceSidesButNotExtraHit() { - final List planes = planeUnitType.createTemp(8, hitPlayer); planes.addAll(otherPlaneUnitType.createTemp(8, hitPlayer)); final List aaUnits = aaUnitType.createTemp(1, aaPlayer); @@ -812,7 +787,6 @@ void twoTypesOfPlanesAndBothHaveRemainderOverDiceSidesButNotExtraHit() { @Test void twoTypesOfPlanesAndTogetherHaveRemainderOverDiceSidesButNotExtraHit() { - // need to randomly pick 1 planes out of the remainder to kill whenGetRandom(bridge).thenAnswer(withValues(1)); @@ -847,7 +821,6 @@ void twoTypesOfPlanesAndTogetherHaveRemainderOverDiceSidesButNotExtraHit() { @Test void oneTypeOfPlaneWithRemainderOverDiceSidesAndWithExtraHit() { - // need to randomly pick a plane to kill whenGetRandom(bridge).thenAnswer(withValues(1)); @@ -876,7 +849,6 @@ void oneTypeOfPlaneWithRemainderOverDiceSidesAndWithExtraHit() { @Test void oneTypeOfPlaneWithRemainderOf1AndWithExtraHit() { - final List planes = planeUnitType.createTemp(7, hitPlayer); final List aaUnits = aaUnitType.createTemp(1, aaPlayer); @@ -902,7 +874,6 @@ void oneTypeOfPlaneWithRemainderOf1AndWithExtraHit() { @Test void twoTypesOfPlanesAndBothHaveRemainderOverDiceSidesAndWithExtraHit() { - // need to pick one plane out of the remainder list whenGetRandom(bridge).thenAnswer(withValues(0)); @@ -939,7 +910,6 @@ void twoTypesOfPlanesAndBothHaveRemainderOverDiceSidesAndWithExtraHit() { @Test void twoTypesOfPlanesAndOneHasRemainderOf1AndWithExtraHit() { - final List planes = planeUnitType.createTemp(6, hitPlayer); planes.addAll(otherPlaneUnitType.createTemp(7, hitPlayer)); final List aaUnits = aaUnitType.createTemp(1, aaPlayer); @@ -972,7 +942,6 @@ void twoTypesOfPlanesAndOneHasRemainderOf1AndWithExtraHit() { @Test void twoTypesOfPlanesAndTogetherHaveRemainderOverDiceSidesAndWithExtraHit() { - // need to randomly pick 2 planes to kill whenGetRandom(bridge).thenAnswer(withValues(1, 1)); @@ -1007,7 +976,6 @@ void twoTypesOfPlanesAndTogetherHaveRemainderOverDiceSidesAndWithExtraHit() { @Test void twoTypesOfPlanesAndTogetherHaveRemainderOf1AndWithExtraHit() { - // need to randomly pick 2 planes to kill whenGetRandom(bridge).thenAnswer(withValues(1, 2)); diff --git a/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/MockGameData.java b/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/MockGameData.java index 59df3cc5b18..b31457d1ca2 100644 --- a/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/MockGameData.java +++ b/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/MockGameData.java @@ -6,7 +6,6 @@ import static games.strategy.triplea.Constants.CHOOSE_AA; import static games.strategy.triplea.Constants.DEFENDING_SUBS_SNEAK_ATTACK; import static games.strategy.triplea.Constants.DEFENDING_SUICIDE_AND_MUNITION_UNITS_DO_NOT_FIRE; -import static games.strategy.triplea.Constants.EDIT_MODE; import static games.strategy.triplea.Constants.LHTR_HEAVY_BOMBERS; import static games.strategy.triplea.Constants.LOW_LUCK; import static games.strategy.triplea.Constants.NAVAL_BOMBARD_CASUALTIES_RETURN_FIRE; @@ -184,11 +183,6 @@ public MockGameData withCaptureUnitsOnEnteringTerritory(final boolean value) { return this; } - public MockGameData withEditMode(final boolean value) { - when(gameProperties.get(EDIT_MODE)).thenReturn(value); - return this; - } - public MockGameData withChooseAaCasualties(final boolean value) { when(gameProperties.get(CHOOSE_AA, false)).thenReturn(value); return this; diff --git a/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualtiesTest.java b/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualtiesTest.java index abbe38a3dfa..c672e8e4dda 100644 --- a/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualtiesTest.java +++ b/game-app/game-core/src/test/java/games/strategy/triplea/delegate/battle/steps/fire/SelectMainBattleCasualtiesTest.java @@ -1,6 +1,5 @@ package games.strategy.triplea.delegate.battle.steps.fire; -import static games.strategy.triplea.Constants.EDIT_MODE; import static games.strategy.triplea.Constants.TRANSPORT_CASUALTIES_RESTRICTED; import static games.strategy.triplea.Constants.UNIT_ATTACHMENT_NAME; import static games.strategy.triplea.delegate.battle.BattleStepStrings.UNITS; @@ -63,49 +62,6 @@ private DiceRoll givenDiceRollWithHits(final int hits) { return diceRoll; } - @Test - @DisplayName("Edit mode always calls the select function") - @SuppressWarnings("unchecked") - void isEditMode() { - final List targetUnits = List.of(givenAnyUnit(), givenAnyUnit()); - when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) - .thenReturn(false); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(true); - - final FiringGroup firingGroup = - FiringGroup.groupBySuicideOnHit(UNITS, List.of(firingUnit), targetUnits).get(0); - - final FireRoundState fireRoundState = new FireRoundState(); - fireRoundState.setDice(mock(DiceRoll.class)); - - final SelectCasualties selectCasualties = - new SelectCasualties( - battleState, - BattleState.Side.OFFENSE, - firingGroup, - fireRoundState, - (arg1, arg2) -> new CasualtyDetails()); - - final SelectMainBattleCasualties.Select selectFunction = - mock(SelectMainBattleCasualties.Select.class); - final CasualtyDetails expected = new CasualtyDetails(targetUnits, List.of(), false); - when(selectFunction.apply(any(), any(), anyCollection(), anyInt())).thenReturn(expected); - - final CasualtyDetails details = - new SelectMainBattleCasualties(selectFunction).apply(delegateBridge, selectCasualties); - - assertThat(details.getKilled().toArray(), is(targetUnits.toArray())); - assertThat( - "edit mode always sets auto calculated to true", details.getAutoCalculated(), is(true)); - - verify(selectFunction) - .apply( - eq(delegateBridge), - eq(selectCasualties), - (Collection) argThat(containsInAnyOrder(targetUnits.toArray())), - eq(0)); - } - @Nested class TransportCasualtiesNotRestricted { @@ -219,7 +175,6 @@ class TransportCasualtiesRestricted { void moreNonTransportsHitPointsThanHits() { when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) .thenReturn(true); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(false); final List nonTransportUnits = List.of(givenAnyUnit(), givenAnyUnit()); @@ -272,7 +227,6 @@ void moreNonTransportsHitPointsThanHits() { void equalNonTransportsHitPointsToHits() { when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) .thenReturn(true); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(false); final List nonTransportUnits = List.of(givenAnyUnit(), givenAnyUnit()); @@ -319,7 +273,6 @@ void equalNonTransportsHitPointsToHits() { void lessNonTransportsHitPointsThanHits() { when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) .thenReturn(true); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(false); final List nonTransportUnits = List.of(givenAnyUnit(), givenAnyUnit()); @@ -388,7 +341,6 @@ void lessNonTransportsHitPointsThanHits() { void lessNonTransportsHitPointsThanHitsWithAlliedTransports() { when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) .thenReturn(true); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(false); final List nonTransportUnits = List.of(givenAnyUnit(), givenAnyUnit()); @@ -468,7 +420,6 @@ void lessNonTransportsHitPointsThanHitsWithAlliedTransports() { void moreHitsThanHitPoints() { when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) .thenReturn(true); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(false); final List nonTransportUnits = List.of(givenAnyUnit(), givenAnyUnit()); @@ -524,7 +475,6 @@ void moreHitsThanHitPoints() { void moreHitsThanHitPointsWithAlly() { when(battleState.getGameData().getProperties().get(TRANSPORT_CASUALTIES_RESTRICTED, false)) .thenReturn(true); - when(battleState.getGameData().getProperties().get(EDIT_MODE)).thenReturn(false); final List nonTransportUnits = List.of(givenAnyUnit(), givenAnyUnit()); diff --git a/game-app/game-headed/src/main/java/games/strategy/triplea/ui/BattlePanel.java b/game-app/game-headed/src/main/java/games/strategy/triplea/ui/BattlePanel.java index 47103aceccb..f20a5abf96b 100644 --- a/game-app/game-headed/src/main/java/games/strategy/triplea/ui/BattlePanel.java +++ b/game-app/game-headed/src/main/java/games/strategy/triplea/ui/BattlePanel.java @@ -449,7 +449,6 @@ public CasualtyDetails getCasualties( final boolean allowMultipleHitsPerUnit) { final Supplier action = () -> { - final boolean isEditMode = (dice == null); final UnitChooser chooser = new UnitChooser( selectFrom, @@ -460,15 +459,9 @@ public CasualtyDetails getCasualties( allowMultipleHitsPerUnit, getMap().getUiContext()); chooser.setTitle(message); - if (isEditMode) { - chooser.setMax(selectFrom.size()); - } else { - chooser.setMax(count); - } + chooser.setMax(count); final DicePanel dicePanel = new DicePanel(getMap().getUiContext(), getData()); - if (!isEditMode) { - dicePanel.setDiceRoll(dice); - } + dicePanel.setDiceRoll(dice); final JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(chooser, BorderLayout.CENTER);