Skip to content

Commit

Permalink
Merge pull request #6003 from psikomonkie/issue-5979-force-players-to…
Browse files Browse the repository at this point in the history
…-use-commit-when-deploying-forces

Issue 5979: Force players to use commit when deploying forces
  • Loading branch information
IllianiCBT authored Feb 8, 2025
2 parents f376b96 + 51cc8cf commit 2b3e932
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 6 deletions.
4 changes: 4 additions & 0 deletions MekHQ/resources/mekhq/resources/AtBStratCon.properties
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ lblLeadershipInstructions.Text=<html>The force commander's leadership allows the
<br><b>Available BV:</b> %s</html

lblLeadershipTransportInstructions.text=<html><b>Transport Type:</b></html>
lblLeadershipCommitForces.text=Commit {0} and any selected auxiliary units?
lblLeadershipCommitForces.fallback.text=Commit force?
leadershipCommit.text=Commit
leadershipCancel.text=Cancel

selectForceForTemplate.Text=<html><b>Select a force from the list below.</b>\
<br>\
Expand Down
28 changes: 26 additions & 2 deletions MekHQ/src/mekhq/gui/StratconPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static mekhq.campaign.mission.ScenarioForceTemplate.ForceAlignment.Allied;
Expand Down Expand Up @@ -118,14 +120,16 @@ private enum DrawHexType {

private final Map<String, BufferedImage> imageCache = new HashMap<>();

private boolean commitForces = false;

/**
* Constructs a StratconPanel instance, given a parent campaign GUI and a
* pointer to an info area.
*/
public StratconPanel(CampaignGUI gui, JLabel infoArea) {
campaign = gui.getCampaign();

scenarioWizard = new StratconScenarioWizard(campaign);
scenarioWizard = new StratconScenarioWizard(campaign, this);
this.infoArea = infoArea;

assignmentUI = new TrackForceAssignmentUI(this);
Expand Down Expand Up @@ -1049,7 +1053,17 @@ public void actionPerformed(ActionEvent evt) {
isPrimaryForce = true;
}
}
// Deliberate fall-through
if (selectedScenario != null && selectedScenario.getCurrentState() == PRIMARY_FORCES_COMMITTED) {
scenarioWizard.setCurrentScenario(currentTrack.getScenario(selectedCoords),
currentTrack, campaignState, isPrimaryForce);

scenarioWizard.toFront();
scenarioWizard.setVisible(true);
}
if (selectedScenario != null && !isCommitForces()) {
selectedScenario.resetScenario(campaign);
}
break;
case RCLICK_COMMAND_MANAGE_SCENARIO:
// It's possible a scenario may have been placed when deploying the force, so we
// need to recheck
Expand Down Expand Up @@ -1105,6 +1119,8 @@ public void actionPerformed(ActionEvent evt) {
if (scenarioToReset != null) {
scenarioToReset.resetScenario(campaign);
}

setCommitForces(false);
break;
}

Expand All @@ -1122,4 +1138,12 @@ public Dimension getPreferredSize() {
return super.getPreferredSize();
}
}

public boolean isCommitForces() {
return commitForces;
}

public void setCommitForces(boolean commitForces) {
this.commitForces = commitForces;
}
}
45 changes: 41 additions & 4 deletions MekHQ/src/mekhq/gui/stratcon/StratconScenarioWizard.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import mekhq.campaign.stratcon.StratconScenario;
import mekhq.campaign.stratcon.StratconTrackState;
import mekhq.campaign.unit.Unit;
import mekhq.gui.StratconPanel;
import mekhq.gui.utilities.JScrollPaneWithSpeed;
import mekhq.utilities.MHQInternationalization;
import org.apache.commons.lang3.ArrayUtils;
Expand Down Expand Up @@ -90,11 +91,15 @@ public class StratconScenarioWizard extends JDialog {

private JPanel contentPanel;
private JButton btnCommit;
private JButton btnCancel;

private static final MMLogger logger = MMLogger.create(StratconScenarioWizard.class);

public StratconScenarioWizard(Campaign campaign) {
private final StratconPanel parent;

public StratconScenarioWizard(Campaign campaign, StratconPanel parent) {
this.campaign = campaign;
this.parent = parent;
this.setModalityType(ModalityType.APPLICATION_MODAL);

for (CampaignTransportType campaignTransportType : getLeadershipDropdownVectorPair().stream().map(Pair::getValue).collect(Collectors.toSet())) {
Expand Down Expand Up @@ -664,7 +669,7 @@ private String buildForceCost(int forceID) {
*/
private void setNavigationButtons(GridBagConstraints constraints, boolean isPrimaryForce) {
// Create the commit button
btnCommit = new JButton("Commit");
btnCommit = new JButton(MHQInternationalization.getTextAt(resourcePath, "leadershipCommit.text"));
btnCommit.setActionCommand("COMMIT_CLICK");
if (isPrimaryForce) {
btnCommit.addActionListener(evt -> btnCommitClicked(evt,
Expand All @@ -674,11 +679,35 @@ private void setNavigationButtons(GridBagConstraints constraints, boolean isPrim
btnCommit.setEnabled(currentCampaignState.getSupportPoints() > 0);
}

// Configure layout constraints for the button
constraints.gridheight = GridBagConstraints.REMAINDER;
btnCancel = new JButton(MHQInternationalization.getTextAt(resourcePath, "leadershipCancel.text"));
btnCancel.setActionCommand("CANCEL_CLICK");
btnCancel.addActionListener(evt -> closeWizard());
btnCancel.setEnabled(true);

// Configure layout constraints for the buttons
constraints.gridwidth = GridBagConstraints.REMAINDER;
constraints.anchor = GridBagConstraints.CENTER;

//Final instructions:
if (isPrimaryForce) {
String instructions;
Force primaryForce = currentScenario.getBackingScenario().getForces(campaign)
.getAllSubForces().stream().findFirst().orElse(null);
if (primaryForce != null) {
instructions = MHQInternationalization.getFormattedTextAt(resourcePath, "lblLeadershipCommitForces.text", primaryForce.getName());
}
else { instructions = MHQInternationalization.getTextAt(resourcePath, "lblLeadershipCommitForces.fallback.text"); }

contentPanel.add(new JLabel(instructions), constraints);
}

// Allign and add cancel button to the content panel
constraints.gridy++;
constraints.gridheight = GridBagConstraints.REMAINDER;
constraints.anchor = GridBagConstraints.WEST;
contentPanel.add(btnCancel, constraints);
constraints.anchor = GridBagConstraints.CENTER;

// Add the commit button to the content panel
contentPanel.add(btnCommit, constraints);
}
Expand Down Expand Up @@ -900,6 +929,10 @@ private void reinforcementConfirmDialog() {
*/
private void btnCommitClicked(ActionEvent evt, @Nullable Integer reinforcementTargetNumber,
boolean isGMReinforcement) {
if (parent != null ) {
parent.setCommitForces(true);
}

// go through all the force lists and add the selected forces to the scenario
for (String templateID : availableForceLists.keySet()) {
for (Force force : availableForceLists.get(templateID).getSelectedValuesList()) {
Expand Down Expand Up @@ -961,6 +994,10 @@ private void btnCommitClicked(ActionEvent evt, @Nullable Integer reinforcementTa
scaleObjectiveTimeLimits(currentScenario.getBackingScenario(), campaign);
}

closeWizard();
}

private void closeWizard() {
this.getParent().repaint();

dispose();
Expand Down

0 comments on commit 2b3e932

Please sign in to comment.