Skip to content

Commit 514f419

Browse files
committed
Refactored logger and method usage in Stratcon classes
Removed unnecessary logger instances and refactored method calls for clarity and performance improvement in StratconTab and StratconPanel. Simplified the code by using static imports for ForceAlignment constants, enhancing readability and maintainability. Additionally, updated the `buildSelectedHexInfo` method to include the `campaign` parameter for more accurate data handling.
1 parent 44ce528 commit 514f419

File tree

6 files changed

+113
-38
lines changed

6 files changed

+113
-38
lines changed

MekHQ/src/mekhq/campaign/mission/AtBDynamicScenario.java

+72
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,17 @@
2222
import megamek.common.Entity;
2323
import megamek.common.annotations.Nullable;
2424
import megamek.common.enums.SkillLevel;
25+
import megamek.logging.MMLogger;
2526
import mekhq.campaign.Campaign;
27+
import mekhq.campaign.force.Force;
2628
import mekhq.campaign.force.StrategicFormation;
29+
import mekhq.campaign.mission.ScenarioForceTemplate.ForceAlignment;
2730
import mekhq.campaign.mission.ScenarioForceTemplate.ForceGenerationMethod;
2831
import mekhq.campaign.mission.atb.AtBScenarioModifier;
2932
import mekhq.campaign.personnel.Person;
3033
import mekhq.campaign.personnel.SkillType;
3134
import mekhq.campaign.rating.IUnitRating;
35+
import mekhq.campaign.unit.Unit;
3236
import mekhq.utilities.MHQXMLUtility;
3337
import org.apache.commons.lang3.StringUtils;
3438
import org.w3c.dom.Element;
@@ -39,6 +43,11 @@
3943
import java.text.ParseException;
4044
import java.util.*;
4145

46+
import static mekhq.campaign.mission.AtBDynamicScenarioFactory.getPlanetOwnerAlignment;
47+
import static mekhq.campaign.mission.AtBDynamicScenarioFactory.getPlanetOwnerFaction;
48+
import static mekhq.campaign.mission.ScenarioForceTemplate.ForceAlignment.Allied;
49+
import static mekhq.campaign.mission.ScenarioForceTemplate.ForceAlignment.PlanetOwner;
50+
4251
/**
4352
* Data structure intended to hold data relevant to AtB Dynamic Scenarios (AtB 3.0)
4453
* @author NickAragua
@@ -85,6 +94,9 @@ public static class BenchedEntityData {
8594
private transient Map<UUID, ScenarioForceTemplate> playerUnitTemplates;
8695
private transient List<AtBScenarioModifier> scenarioModifiers;
8796

97+
private static final MMLogger logger = MMLogger.create(AtBDynamicScenario.class);
98+
99+
88100
public AtBDynamicScenario() {
89101
super();
90102

@@ -578,4 +590,64 @@ public void clearAllForcesAndPersonnel(Campaign campaign) {
578590
public String getBattlefieldControlDescription() {
579591
return "";
580592
}
593+
594+
/**
595+
* Returns the total battle value (BV) either for allied forces or opposing forces in
596+
* a given contract campaign, as per the parameter {@code isAllied}.
597+
* <p>
598+
* If {@code isAllied} is {@code true}, the method calculates the total BV for the allied
599+
* forces inclusive of player forces. If {@code isAllied} is {@code false}, the total BV for
600+
* opposing forces is calculated.
601+
* <p>
602+
* The calculation is done based on Bot forces attributed to each side. In the case of
603+
* PlanetOwner, the alignment of the owner faction is considered to determine the ownership of
604+
* Bot forces.
605+
*
606+
* @param campaign The campaign in which the forces are participating.
607+
* @param isAllied A boolean value indicating whether to calculate the total BV for
608+
* allied forces (if true) or opposing forces (if false).
609+
* @return The total battle value (BV) either for the allied forces or
610+
* opposing forces, as specified by the parameter isAllied.
611+
*/
612+
public int getTeamTotalBattleValue(Campaign campaign, boolean isAllied) {
613+
AtBContract contract = getContract(campaign);
614+
int totalBattleValue = 0;
615+
616+
for (BotForce botForce : getBotForces()) {
617+
int battleValue = botForce.getTotalBV(campaign);
618+
619+
int team = botForce.getTeam();
620+
621+
if (team == PlanetOwner.ordinal()) {
622+
String planetOwnerFaction = getPlanetOwnerFaction(contract, campaign.getLocalDate());
623+
ForceAlignment forceAlignment = getPlanetOwnerAlignment(contract, planetOwnerFaction, campaign.getLocalDate());
624+
team = forceAlignment.ordinal();
625+
}
626+
627+
if (team <= Allied.ordinal()) {
628+
if (isAllied) {
629+
totalBattleValue += battleValue;
630+
}
631+
} else if (!isAllied) {
632+
totalBattleValue += battleValue;
633+
}
634+
}
635+
636+
if (isAllied) {
637+
Force playerForces = this.getForces(campaign);
638+
639+
for (UUID unitID : playerForces.getAllUnits(false)) {
640+
try {
641+
Unit unit = campaign.getUnit(unitID);
642+
Entity entity = unit.getEntity();
643+
644+
totalBattleValue += entity.calculateBattleValue();
645+
} catch (Exception ex) {
646+
logger.warn(ex.getMessage(), ex);
647+
}
648+
}
649+
}
650+
651+
return totalBattleValue;
652+
}
581653
}

MekHQ/src/mekhq/campaign/mission/AtBDynamicScenarioFactory.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -3877,7 +3877,7 @@ private static void correctNonAeroFlyerBehavior(List<Entity> entityList, int boa
38773877
* @param currentDate Current date.
38783878
* @return Faction code.
38793879
*/
3880-
private static String getPlanetOwnerFaction(AtBContract contract, LocalDate currentDate) {
3880+
static String getPlanetOwnerFaction(AtBContract contract, LocalDate currentDate) {
38813881
String factionCode = "MERC";
38823882

38833883
// planet owner is the first of the factions that owns the current planet.
@@ -3903,8 +3903,7 @@ private static String getPlanetOwnerFaction(AtBContract contract, LocalDate curr
39033903
* @param currentDate Current date.
39043904
* @return ForceAlignment.
39053905
*/
3906-
private static ForceAlignment getPlanetOwnerAlignment(AtBContract contract, String factionCode,
3907-
LocalDate currentDate) {
3906+
static ForceAlignment getPlanetOwnerAlignment(AtBContract contract, String factionCode, LocalDate currentDate) {
39083907
// if the faction is one of the planet owners, see if it's either the employer
39093908
// or opfor. If it's not, third-party.
39103909
if (contract.getSystem().getFactions(currentDate).contains(factionCode)) {

MekHQ/src/mekhq/campaign/stratcon/StratconScenario.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
import jakarta.xml.bind.annotation.XmlTransient;
1717
import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
18+
import megamek.common.annotations.Nullable;
1819
import mekhq.MekHQ;
1920
import mekhq.adapter.DateAdapter;
2021
import mekhq.campaign.Campaign;
@@ -165,10 +166,10 @@ public void setCurrentState(ScenarioState state) {
165166

166167
@Override
167168
public String getInfo() {
168-
return getInfo(true);
169+
return getInfo(null, true);
169170
}
170171

171-
public String getInfo(boolean html) {
172+
public String getInfo(@Nullable Campaign campaign, boolean html) {
172173
StringBuilder stateBuilder = new StringBuilder();
173174

174175
if (isStrategicObjective()) {
@@ -201,22 +202,33 @@ public String getInfo(boolean html) {
201202

202203
if (deploymentDate != null) {
203204
stateBuilder.append("Deployment Date: ")
204-
.append(deploymentDate.toString())
205+
.append(deploymentDate)
205206
.append("<br/>");
206207
}
207208

208209
if (actionDate != null) {
209210
stateBuilder.append("Battle Date: ")
210-
.append(actionDate.toString())
211+
.append(actionDate)
211212
.append("<br/>");
212213
}
213214

214215
if (returnDate != null) {
215216
stateBuilder.append("Return Date: ")
216-
.append(returnDate.toString())
217+
.append(returnDate)
217218
.append("<br/>");
218219
}
219220

221+
if (campaign != null) {
222+
AtBDynamicScenario backingScenario = getBackingScenario();
223+
224+
if (backingScenario != null) {
225+
stateBuilder.append(String.format("Hostile BV: %d<br>",
226+
backingScenario.getTeamTotalBattleValue(campaign, false)));
227+
stateBuilder.append(String.format("Allied BV: %d",
228+
backingScenario.getTeamTotalBattleValue(campaign, true)));
229+
}
230+
}
231+
220232
stateBuilder.append("</html>");
221233
return stateBuilder.toString();
222234
}

MekHQ/src/mekhq/gui/StratconPanel.java

+15-14
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import mekhq.MekHQ;
1919
import mekhq.campaign.Campaign;
2020
import mekhq.campaign.force.Force;
21-
import mekhq.campaign.mission.ScenarioForceTemplate.ForceAlignment;
2221
import mekhq.campaign.stratcon.*;
2322
import mekhq.campaign.stratcon.StratconBiomeManifest.ImageType;
2423
import mekhq.gui.stratcon.StratconScenarioWizard;
@@ -40,6 +39,8 @@
4039
import java.util.HashMap;
4140
import java.util.Map;
4241

42+
import static mekhq.campaign.mission.ScenarioForceTemplate.ForceAlignment.Allied;
43+
4344
/**
4445
* This panel handles AtB-Stratcon GUI interactions with a specific scenario
4546
* track.
@@ -144,7 +145,7 @@ public void selectTrack(StratconCampaignState campaignState, StratconTrackState
144145
// clear hex selection
145146
boardState.selectedX = null;
146147
boardState.selectedY = null;
147-
infoArea.setText(buildSelectedHexInfo());
148+
infoArea.setText(buildSelectedHexInfo(campaign));
148149

149150
repaint();
150151
}
@@ -471,7 +472,7 @@ private boolean imageLoaded(String imageKey) {
471472
}
472473

473474
private BufferedImage getFacilityImage(StratconFacility facility) {
474-
String imageKeyPrefix = facility.getOwner() == ForceAlignment.Allied ? StratconBiomeManifest.FACILITY_ALLIED
475+
String imageKeyPrefix = facility.getOwner() == Allied ? StratconBiomeManifest.FACILITY_ALLIED
475476
: StratconBiomeManifest.FACILITY_HOSTILE;
476477
String imageKey = imageKeyPrefix + facility.getFacilityType().name();
477478

@@ -569,7 +570,7 @@ private void drawScenarios(Graphics2D g2D) {
569570

570571
if (currentTrack.getFacility(currentCoords) == null) {
571572
drawTextEffect(g2D, scenarioMarker, "Hostile Force Detected", currentCoords);
572-
} else if (currentTrack.getFacility(currentCoords).getOwner() == ForceAlignment.Allied) {
573+
} else if (currentTrack.getFacility(currentCoords).getOwner() == Allied) {
573574
drawTextEffect(g2D, scenarioMarker, "Under Attack!", currentCoords);
574575
}
575576
}
@@ -610,7 +611,7 @@ private void drawFacilities(Graphics2D g2D) {
610611
StratconFacility facility = currentTrack.getFacility(currentCoords);
611612

612613
if ((facility != null) && (facility.isVisible() || trackRevealed || currentTrack.isGmRevealed())) {
613-
g2D.setColor(facility.getOwner() == ForceAlignment.Allied ? Color.CYAN : Color.RED);
614+
g2D.setColor(facility.getOwner() == Allied ? Color.CYAN : Color.RED);
614615

615616
BufferedImage facilityImage = getFacilityImage(facility);
616617

@@ -813,7 +814,7 @@ public void mouseReleasedHandler(MouseEvent e) {
813814
boolean pointFoundOnBoard = detectClickedHex();
814815

815816
if (pointFoundOnBoard) {
816-
infoArea.setText(buildSelectedHexInfo());
817+
infoArea.setText(buildSelectedHexInfo(campaign));
817818
}
818819

819820
repaint();
@@ -850,7 +851,7 @@ public StratconCoords getSelectedCoords() {
850851
* containing info such as whether it's been revealed, assigned forces,
851852
* scenarios, facilities, etc.
852853
*/
853-
private String buildSelectedHexInfo() {
854+
private String buildSelectedHexInfo(Campaign campaign) {
854855
StringBuilder infoBuilder = new StringBuilder();
855856
infoBuilder.append("<html><br/>");
856857

@@ -864,13 +865,13 @@ private String buildSelectedHexInfo() {
864865
boolean coordsRevealed = currentTrack.hasActiveTrackReveal()
865866
|| currentTrack.getRevealedCoords().contains(boardState.getSelectedCoords());
866867
if (coordsRevealed) {
867-
infoBuilder.append("<span color='" + MekHQ.getMHQOptions().getFontColorPositiveHexColor()
868-
+ "'>Recon complete</span><br/>");
868+
infoBuilder.append("<span color='").append(MekHQ.getMHQOptions().getFontColorPositiveHexColor())
869+
.append("'>Recon Complete</span><br/>");
869870
}
870871

871872
if (currentTrack.getAssignedCoordForces().containsKey(boardState.getSelectedCoords())) {
872873
for (int forceID : currentTrack.getAssignedCoordForces().get(boardState.getSelectedCoords())) {
873-
Force force = campaign.getForce(forceID);
874+
Force force = this.campaign.getForce(forceID);
874875
infoBuilder.append(force.getName()).append(" assigned");
875876

876877
if (currentTrack.getStickyForces().contains(forceID)) {
@@ -890,12 +891,12 @@ private String buildSelectedHexInfo() {
890891
if ((facility != null) && (facility.getFacilityType() != null)) {
891892
if (facility.isStrategicObjective()) {
892893
infoBuilder.append(String.format("<br/><span color='%s'>Contract objective located</span>",
893-
facility.getOwner() == ForceAlignment.Allied
894+
facility.getOwner() == Allied
894895
? MekHQ.getMHQOptions().getFontColorPositiveHexColor()
895896
: MekHQ.getMHQOptions().getFontColorNegativeHexColor()));
896897
}
897898
infoBuilder.append("<span color='")
898-
.append(facility.getOwner() == ForceAlignment.Allied
899+
.append(facility.getOwner() == Allied
899900
? MekHQ.getMHQOptions().getFontColorPositiveHexColor()
900901
: MekHQ.getMHQOptions().getFontColorNegativeHexColor())
901902
.append("'>")
@@ -912,14 +913,14 @@ private String buildSelectedHexInfo() {
912913

913914
} else {
914915
infoBuilder.append("<span color='").append(MekHQ.getMHQOptions().getFontColorNegative())
915-
.append("'>Recon incomplete</span>");
916+
.append("'>Recon Incomplete</span>");
916917
}
917918
infoBuilder.append("<br/>");
918919

919920
StratconScenario selectedScenario = getSelectedScenario();
920921
if ((selectedScenario != null) &&
921922
((selectedScenario.getDeploymentDate() != null) || currentTrack.isGmRevealed())) {
922-
infoBuilder.append(selectedScenario.getInfo());
923+
infoBuilder.append(selectedScenario.getInfo(campaign, true));
923924
}
924925

925926
infoBuilder.append("</html>");

MekHQ/src/mekhq/gui/StratconTab.java

-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import megamek.client.ui.swing.util.UIUtil;
1717
import megamek.common.event.Subscribe;
18-
import megamek.logging.MMLogger;
1918
import mekhq.MekHQ;
2019
import mekhq.campaign.event.MissionCompletedEvent;
2120
import mekhq.campaign.event.MissionRemovedEvent;
@@ -397,7 +396,6 @@ private String buildStrategicObjectiveText(StratconCampaignState campaignState)
397396
* Refreshes the list of tracks
398397
*/
399398
private void repopulateTrackList() {
400-
final MMLogger logger = MMLogger.create(StratconTab.class);
401399
int currentTrackIndex = listCurrentTrack.getSelectedIndex();
402400
listModel.clear();
403401

@@ -406,9 +404,7 @@ private void repopulateTrackList() {
406404
if (campaignState != null) {
407405
for (StratconTrackState track : campaignState.getTracks()) {
408406
TrackDropdownItem trackItem = new TrackDropdownItem(contract, track);
409-
logger.info(trackItem);
410407
listModel.addElement(trackItem);
411-
logger.info(listModel.toString());
412408
}
413409
}
414410
}
@@ -420,8 +416,6 @@ private void repopulateTrackList() {
420416
listCurrentTrack.setSelectedIndex(0);
421417
}
422418

423-
logger.info(listCurrentTrack.getSelectedValue());
424-
425419
if (listCurrentTrack.getSelectedValue() != null) {
426420
TrackDropdownItem selectedTrack = listCurrentTrack.getSelectedValue();
427421
stratconPanel.selectTrack(selectedTrack.contract.getStratconCampaignState(), selectedTrack.track);

MekHQ/src/mekhq/gui/stratcon/StratconScenarioWizard.java

+7-10
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public class StratconScenarioWizard extends JDialog {
5454
private final transient ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.AtBStratCon",
5555
MekHQ.getMHQOptions().getLocale());
5656

57-
private Map<String, JList<Force>> availableForceLists = new HashMap<>();
58-
private Map<String, JList<Unit>> availableUnitLists = new HashMap<>();
57+
private final Map<String, JList<Force>> availableForceLists = new HashMap<>();
58+
private final Map<String, JList<Unit>> availableUnitLists = new HashMap<>();
5959

6060
private JList<Unit> availableInfantryUnits = new JList<>();
6161
private JList<Unit> availableLeadershipUnits = new JList<>();
@@ -145,16 +145,13 @@ private void setInstructions(GridBagConstraints gbc) {
145145
if (currentTrackState.isGmRevealed()
146146
|| currentTrackState.getRevealedCoords().contains(currentScenario.getCoords()) ||
147147
(currentScenario.getDeploymentDate() != null)) {
148-
labelBuilder.append(currentScenario.getInfo());
148+
labelBuilder.append(currentScenario.getInfo(campaign, true));
149149
}
150150

151-
switch (currentScenario.getCurrentState()) {
152-
case UNRESOLVED:
153-
labelBuilder.append("primaryForceAssignmentInstructions.text");
154-
break;
155-
default:
156-
labelBuilder.append("reinforcementsAndSupportInstructions.text");
157-
break;
151+
if (Objects.requireNonNull(currentScenario.getCurrentState()) == ScenarioState.UNRESOLVED) {
152+
labelBuilder.append("primaryForceAssignmentInstructions.text");
153+
} else {
154+
labelBuilder.append("reinforcementsAndSupportInstructions.text");
158155
}
159156

160157
labelBuilder.append("<br/>");

0 commit comments

Comments
 (0)