Skip to content

Commit 7246a9e

Browse files
authored
Merge pull request #6368 from IllianiCBT/campaignUsage
Updated Date and Faction Handling in Campaign Options IIC
2 parents f48a4b1 + 4e7a439 commit 7246a9e

File tree

4 files changed

+103
-47
lines changed

4 files changed

+103
-47
lines changed

MekHQ/resources/mekhq/resources/CampaignOptionsDialog.properties

+4-2
Original file line numberDiff line numberDiff line change
@@ -789,8 +789,10 @@ lblRandomizeAroundSpecifiedPlanet.text=Randomize Around Specific Planet
789789
lblRandomizeAroundSpecifiedPlanet.tooltip=Dependents have their origins randomized so that they do\
790790
\ not come from the current planet and the campaign's faction but instead have origins randomized\
791791
\ in the same way as standard personnel.
792-
lblSpecifiedSystemFactionSpecific.text=Faction Specific
793-
lblSpecifiedSystemFactionSpecific.tooltip=Limit the system options based on faction.
792+
lblSpecifiedSystemFactionSpecific.text=Faction Specific \u26A0
793+
lblSpecifiedSystemFactionSpecific.tooltip=Limit the system options based on faction.\
794+
<br>\
795+
<br><b>Warning:</b> Must be toggled off-and-on again if you change faction after enabling this option.
794796
lblSpecifiedSystem.text=System
795797
lblSpecifiedSystem.tooltip=This is the system from which to select the specified planet around\
796798
\ which origin planet and faction are randomized.

MekHQ/src/mekhq/gui/campaignOptions/CampaignOptionsPane.java

+15-12
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@
2727
*/
2828
package mekhq.gui.campaignOptions;
2929

30+
import static java.lang.Math.round;
31+
import static mekhq.campaign.force.CombatTeam.recalculateCombatTeams;
32+
import static mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode.ABRIDGED;
33+
import static mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode.STARTUP_ABRIDGED;
34+
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createSubTabs;
35+
36+
import java.time.LocalDate;
37+
import java.util.Map;
38+
import java.util.ResourceBundle;
39+
import javax.swing.JFrame;
40+
import javax.swing.JPanel;
41+
import javax.swing.JScrollPane;
42+
import javax.swing.JTabbedPane;
43+
3044
import megamek.common.annotations.Nullable;
3145
import mekhq.CampaignPreset;
3246
import mekhq.MekHQ;
@@ -41,17 +55,6 @@
4155
import mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode;
4256
import mekhq.gui.campaignOptions.contents.*;
4357

44-
import javax.swing.*;
45-
import java.time.LocalDate;
46-
import java.util.Map;
47-
import java.util.ResourceBundle;
48-
49-
import static java.lang.Math.round;
50-
import static mekhq.campaign.force.CombatTeam.recalculateCombatTeams;
51-
import static mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode.ABRIDGED;
52-
import static mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode.STARTUP_ABRIDGED;
53-
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createSubTabs;
54-
5558
/**
5659
* The {@code CampaignOptionsPane} class represents a tabbed pane used for displaying
5760
* and managing various campaign options in MekHQ. It organizes these options
@@ -213,7 +216,7 @@ private JTabbedPane createHumanResourcesParentTab() {
213216
personnelTab.loadValuesFromCampaignOptions();
214217

215218
// Biography
216-
biographyTab = new BiographyTab(campaign);
219+
biographyTab = new BiographyTab(campaign, generalTab);
217220

218221
JTabbedPane biographyContentTabs = createSubTabs(Map.of(
219222
"biographyGeneralTab", biographyTab.createGeneralTab(),

MekHQ/src/mekhq/gui/campaignOptions/contents/BiographyTab.java

+37-19
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@
2727
*/
2828
package mekhq.gui.campaignOptions.contents;
2929

30+
import static megamek.client.generator.RandomGenderGenerator.getPercentFemale;
31+
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createParentPanel;
32+
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.getImageDirectory;
33+
34+
import java.awt.Component;
35+
import java.awt.GridBagConstraints;
36+
import java.awt.GridLayout;
37+
import java.util.ArrayList;
38+
import java.util.Comparator;
39+
import java.util.HashMap;
40+
import java.util.Map;
41+
import java.util.ResourceBundle;
42+
import javax.swing.*;
43+
3044
import megamek.client.generator.RandomGenderGenerator;
3145
import megamek.client.generator.RandomNameGenerator;
3246
import megamek.client.ui.baseComponents.MMComboBox;
@@ -42,17 +56,16 @@
4256
import mekhq.campaign.universe.Faction;
4357
import mekhq.campaign.universe.Planet;
4458
import mekhq.campaign.universe.PlanetarySystem;
45-
import mekhq.gui.campaignOptions.components.*;
59+
import mekhq.campaign.universe.Systems;
60+
import mekhq.gui.campaignOptions.components.CampaignOptionsButton;
61+
import mekhq.gui.campaignOptions.components.CampaignOptionsCheckBox;
62+
import mekhq.gui.campaignOptions.components.CampaignOptionsGridBagConstraints;
63+
import mekhq.gui.campaignOptions.components.CampaignOptionsHeaderPanel;
64+
import mekhq.gui.campaignOptions.components.CampaignOptionsLabel;
65+
import mekhq.gui.campaignOptions.components.CampaignOptionsSpinner;
66+
import mekhq.gui.campaignOptions.components.CampaignOptionsStandardPanel;
4667
import mekhq.gui.panes.RankSystemsPane;
4768

48-
import javax.swing.*;
49-
import java.awt.*;
50-
import java.util.*;
51-
52-
import static megamek.client.generator.RandomGenderGenerator.getPercentFemale;
53-
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createParentPanel;
54-
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.getImageDirectory;
55-
5669
/**
5770
* The `BiographyTab` class is responsible for managing the biography-related settings in the campaign options tab
5871
* within the MekHQ application. It provides an interface for configuring various campaign settings, such as:
@@ -74,6 +87,7 @@ public class BiographyTab {
7487
private static final ResourceBundle resources = ResourceBundle.getBundle(RESOURCE_PACKAGE);
7588

7689
private Campaign campaign;
90+
private GeneralTab generalTab;
7791
private CampaignOptions campaignOptions;
7892
private RandomOriginOptions randomOriginOptions;
7993

@@ -178,11 +192,13 @@ public class BiographyTab {
178192
/**
179193
* Constructs the `BiographyTab` and initializes the campaign and its dependent options.
180194
*
181-
* @param campaign The current `Campaign` object to which the BiographyTab is linked.
182-
* The campaign options and origin options are derived from this object.
195+
* @param campaign The current `Campaign` object to which the BiographyTab is linked. The campaign
196+
* options and origin options are derived from this object.
197+
* @param generalTab The currently active General Tab.
183198
*/
184-
public BiographyTab(Campaign campaign) {
199+
public BiographyTab(Campaign campaign, GeneralTab generalTab) {
185200
this.campaign = campaign;
201+
this.generalTab = generalTab;
186202
this.campaignOptions = campaign.getCampaignOptions();
187203
this.randomOriginOptions = campaignOptions.getRandomOriginOptions();
188204

@@ -581,15 +597,15 @@ private JPanel createRandomOriginOptionsPanel() {
581597

582598
lblSpecifiedSystem = new CampaignOptionsLabel("SpecifiedSystem");
583599
comboSpecifiedSystem.setModel(new DefaultComboBoxModel<>(getPlanetarySystems(
584-
chkSpecifiedSystemFactionSpecific.isSelected() ? campaign.getFaction() : null)));
600+
chkSpecifiedSystemFactionSpecific.isSelected() ? generalTab.getFaction() : null)));
585601
comboSpecifiedSystem.setRenderer(new DefaultListCellRenderer() {
586602
@Override
587603
public Component getListCellRendererComponent(final JList<?> list, final Object value,
588604
final int index, final boolean isSelected,
589605
final boolean cellHasFocus) {
590606
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
591607
if (value instanceof PlanetarySystem) {
592-
setText(((PlanetarySystem) value).getName(campaign.getLocalDate()));
608+
setText(((PlanetarySystem) value).getName(generalTab.getDate()));
593609
}
594610
return this;
595611
}
@@ -615,7 +631,7 @@ public Component getListCellRendererComponent(final JList<?> list, final Object
615631
final boolean cellHasFocus) {
616632
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
617633
if (value instanceof Planet) {
618-
setText(((Planet) value).getName(campaign.getLocalDate()));
634+
setText(((Planet) value).getName(generalTab.getDate()));
619635
}
620636
return this;
621637
}
@@ -735,7 +751,7 @@ private void restoreComboSpecifiedSystem() {
735751
comboSpecifiedSystem.removeAllItems();
736752

737753
comboSpecifiedSystem.setModel(new DefaultComboBoxModel<>(getPlanetarySystems(
738-
chkSpecifiedSystemFactionSpecific.isSelected() ? campaign.getFaction() : null)));
754+
chkSpecifiedSystemFactionSpecific.isSelected() ? generalTab.getFaction() : null)));
739755

740756
restoreComboSpecifiedPlanet();
741757
}
@@ -752,13 +768,13 @@ private PlanetarySystem[] getPlanetarySystems(final @Nullable Faction faction) {
752768

753769
// Filter systems
754770
for (PlanetarySystem planetarySystem : systems) {
755-
if ((faction == null) || planetarySystem.getFactionSet(campaign.getLocalDate()).contains(faction)) {
771+
if ((faction == null) || planetarySystem.getFactionSet(generalTab.getDate()).contains(faction)) {
756772
filteredSystems.add(planetarySystem);
757773
}
758774
}
759775

760776
// Sort systems
761-
filteredSystems.sort(Comparator.comparing(p -> p.getName(campaign.getLocalDate())));
777+
filteredSystems.sort(Comparator.comparing(p -> p.getName(generalTab.getDate())));
762778

763779
// Convert to array
764780
return filteredSystems.toArray(new PlanetarySystem[0]);
@@ -1421,7 +1437,9 @@ public void applyCampaignOptionsToCampaign(@Nullable CampaignOptions presetCampa
14211437
originOptions.setRandomizeAroundSpecifiedPlanet(chkRandomizeAroundSpecifiedPlanet.isSelected());
14221438

14231439
Planet selectedPlanet = comboSpecifiedPlanet.getSelectedItem();
1424-
originOptions.setSpecifiedPlanet(selectedPlanet);
1440+
originOptions.setSpecifiedPlanet(selectedPlanet == null
1441+
? Systems.getInstance().getSystemById("Terra").getPrimaryPlanet()
1442+
: selectedPlanet);
14251443

14261444
originOptions.setOriginSearchRadius((int) spnOriginSearchRadius.getValue());
14271445
originOptions.setOriginDistanceScale((double) spnOriginDistanceScale.getValue());

MekHQ/src/mekhq/gui/campaignOptions/contents/GeneralTab.java

+47-14
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@
2727
*/
2828
package mekhq.gui.campaignOptions.contents;
2929

30+
import static megamek.client.ui.swing.util.FlatLafStyleBuilder.setFontScaling;
31+
import static megamek.common.options.OptionsConstants.ALLOWED_YEAR;
32+
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createGroupLayout;
33+
import static mekhq.utilities.ImageUtilities.scaleImageIconToWidth;
34+
35+
import java.awt.Dimension;
36+
import java.awt.FlowLayout;
37+
import java.awt.GridBagConstraints;
38+
import java.awt.GridBagLayout;
39+
import java.awt.event.ActionEvent;
40+
import java.time.LocalDate;
41+
import java.util.ResourceBundle;
42+
import javax.swing.*;
43+
import javax.swing.GroupLayout.Alignment;
44+
3045
import megamek.client.ui.baseComponents.MMComboBox;
3146
import megamek.client.ui.dialogs.CamoChooserDialog;
3247
import megamek.client.ui.swing.util.UIUtil;
@@ -44,23 +59,18 @@
4459
import mekhq.gui.baseComponents.AbstractMHQTabbedPane;
4560
import mekhq.gui.baseComponents.DefaultMHQScrollablePanel;
4661
import mekhq.gui.campaignOptions.CampaignOptionsDialog.CampaignOptionsDialogMode;
47-
import mekhq.gui.campaignOptions.components.*;
62+
import mekhq.gui.campaignOptions.components.CampaignOptionsButton;
63+
import mekhq.gui.campaignOptions.components.CampaignOptionsCheckBox;
64+
import mekhq.gui.campaignOptions.components.CampaignOptionsGridBagConstraints;
65+
import mekhq.gui.campaignOptions.components.CampaignOptionsHeaderPanel;
66+
import mekhq.gui.campaignOptions.components.CampaignOptionsLabel;
67+
import mekhq.gui.campaignOptions.components.CampaignOptionsSpinner;
68+
import mekhq.gui.campaignOptions.components.CampaignOptionsStandardPanel;
69+
import mekhq.gui.campaignOptions.components.CampaignOptionsTextField;
4870
import mekhq.gui.dialog.DateChooser;
4971
import mekhq.gui.dialog.iconDialogs.UnitIconDialog;
5072
import mekhq.gui.displayWrappers.FactionDisplay;
5173

52-
import javax.swing.*;
53-
import javax.swing.GroupLayout.Alignment;
54-
import java.awt.*;
55-
import java.awt.event.ActionEvent;
56-
import java.time.LocalDate;
57-
import java.util.ResourceBundle;
58-
59-
import static megamek.client.ui.swing.util.FlatLafStyleBuilder.setFontScaling;
60-
import static megamek.common.options.OptionsConstants.ALLOWED_YEAR;
61-
import static mekhq.gui.campaignOptions.CampaignOptionsUtilities.createGroupLayout;
62-
import static mekhq.utilities.ImageUtilities.scaleImageIconToWidth;
63-
6474
/**
6575
* Represents a tab within the campaign options UI that allows the user to configure
6676
* general campaign settings. This includes options for:
@@ -126,6 +136,29 @@ public GeneralTab(Campaign campaign, JFrame frame, CampaignOptionsDialogMode mod
126136
initialize();
127137
}
128138

139+
/**
140+
* @return the currently selected date
141+
*/
142+
public LocalDate getDate() {
143+
return date;
144+
}
145+
146+
/**
147+
* Retrieves the currently selected faction.
148+
*
149+
* <p>If no faction is selected, the method defaults to returning the "MERC" faction.</p>
150+
*
151+
* @return the {@link Faction} object representing the selected faction, or the "MERC" faction if no selection is
152+
* made.
153+
*/
154+
public Faction getFaction() {
155+
if (comboFaction.getSelectedItem() == null) {
156+
return Factions.getInstance().getFaction("MERC");
157+
} else {
158+
return comboFaction.getSelectedItem().getFaction();
159+
}
160+
}
161+
129162
/**
130163
* Creates the UI components displayed in the general tab.
131164
* <p>
@@ -371,7 +404,7 @@ private DefaultComboBoxModel<FactionDisplay> buildFactionDisplayOptions() {
371404
DefaultComboBoxModel<FactionDisplay> factionModel = new DefaultComboBoxModel<>();
372405

373406
factionModel.addAll(FactionDisplay.getSortedValidFactionDisplays(
374-
Factions.getInstance().getChoosableFactions(), campaign.getLocalDate()));
407+
Factions.getInstance().getChoosableFactions(), date));
375408

376409
return factionModel;
377410
}

0 commit comments

Comments
 (0)