Skip to content

Commit

Permalink
Revert 186c994.
Browse files Browse the repository at this point in the history
Special handling of combat in edit mode is relied on by G 40 Expansion.
  • Loading branch information
asvitkine committed Apr 26, 2024
1 parent a625e3a commit a9a6c5a
Show file tree
Hide file tree
Showing 10 changed files with 173 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
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;
Expand Down Expand Up @@ -453,6 +454,7 @@ 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<Unit> currentPossibleAa =
CollectionUtils.getMatches(defendingAa, Matches.unitIsAaOfTypeAa(currentTypeAa));
Expand Down Expand Up @@ -563,7 +565,9 @@ public void execute(final ExecutionStack stack, final IDelegateBridge bridge) {
stack.push(removeHits);
stack.push(notifyCasualties);
stack.push(calculateCasualties);
stack.push(roll);
if (!isEditMode) {
stack.push(roll);
}
}
}
}
Expand Down Expand Up @@ -699,6 +703,20 @@ private void rollDice(final IDelegateBridge bridge) {
}
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());
return;
}

final String annotation =
String.format(
"%s rolling to allocate cost of strategic bombing raid against %s in %s",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
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;
Expand Down Expand Up @@ -48,7 +49,8 @@ public static CasualtyDetails getAaCasualties(
!defendingAa.isEmpty()
&& defendingAa.stream()
.allMatch(Matches.unitAaShotDamageableInsteadOfKillingInstantly());
if (Properties.getChooseAaCasualties(data.getProperties())) {
if (EditDelegate.getEditMode(data.getProperties())
|| Properties.getChooseAaCasualties(data.getProperties())) {
return CasualtySelector.selectCasualties(
hitPlayer,
planes,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
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;
Expand Down Expand Up @@ -76,6 +77,24 @@ 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();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
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;
Expand Down Expand Up @@ -45,7 +46,12 @@ public CasualtyDetails apply(final IDelegateBridge bridge, final SelectCasualtie
final int hitsLeftForRestrictedTransports = hitCount - totalHitPointsAvailable;

final CasualtyDetails casualtyDetails;
if (totalHitPointsAvailable > hitCount) {
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) {
// not all units were hit so the player needs to pick which ones are killed
casualtyDetails =
selectFunction.apply(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
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;
Expand Down Expand Up @@ -256,7 +257,10 @@ void casualtyNotification(
final Collection<Unit> damaged,
final Map<Unit, Collection<Unit>> dependents) {
setStep(step);
dicePanel.setDiceRoll(dice);
final boolean isEditMode = (dice == null);
if (!isEditMode) {
dicePanel.setDiceRoll(dice);
}
casualties.setNotification(killed, damaged, dependents);
killed.addAll(updateKilledUnits(killed, player));
if (player.equals(defender)) {
Expand Down Expand Up @@ -473,11 +477,15 @@ CasualtyDetails getCasualties(

SwingUtilities.invokeLater(
() -> {
dicePanel.setDiceRoll(dice);
casualties.setVisible(false);
final boolean plural = (count > 1);
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;
final String btnText =
hit.getName() + " select " + count + (plural ? " casualties" : " casualty");
hit.getName() + " select " + countStr + (plural ? " casualties" : " casualty");
final var casualtySelection =
new CasualtySelection(
selectFrom,
Expand All @@ -488,7 +496,8 @@ CasualtyDetails getCasualties(
defaultCasualties,
allowMultipleHitsPerUnit,
uiContext,
BattleDisplay.this);
BattleDisplay.this,
isEditMode);

actionButton.setAction(
new AbstractAction(btnText) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public class CasualtySelection {
private final GamePlayer player;

private final JDialog dialog;
private final boolean isEditMode;

private final JOptionPane optionPane;

Expand All @@ -52,10 +53,13 @@ public CasualtySelection(
final CasualtyList defaultCasualties,
final boolean allowMultipleHitsPerUnit,
final UiContext uiContext,
final Component dialogParent) {
final Component dialogParent,
final boolean isEditMode) {
this.hitsToTake = hitsToTake;
this.player = player;

this.isEditMode = isEditMode;

final boolean movementForAirUnitsOnly =
playerMayChooseToDistributeHitsToUnitsWithDifferentMovement(selectFrom);

Expand All @@ -69,7 +73,12 @@ public CasualtySelection(
allowMultipleHitsPerUnit,
uiContext);
chooser.setTitle(title);
chooser.setMax(hitsToTake);

if (isEditMode) {
chooser.disableMax();
} else {
chooser.setMax(hitsToTake);
}

final JScrollPane chooserScrollPane = new JScrollPane(chooser);
chooserScrollPane.setBorder(BorderFactory.createEmptyBorder(1, 1, 1, 1));
Expand Down Expand Up @@ -111,7 +120,7 @@ public Optional<CasualtyDetails> showModalDialog() {

final List<Unit> killed = chooser.getSelected(false);
final List<Unit> damaged = chooser.getSelectedDamagedMultipleHitPointUnits();
if (killed.size() + damaged.size() != hitsToTake) {
if (!isEditMode && (killed.size() + damaged.size() != hitsToTake)) {
JOptionPane.showMessageDialog(
dialog /*.getParent()*/,
"Wrong number of casualties selected",
Expand Down

0 comments on commit a9a6c5a

Please sign in to comment.