Skip to content

Commit 818fe2a

Browse files
authored
Merge pull request #7234 from IllianiBird/factionStandingEffectsReport
Improvement: Replaced Placeholder Faction Standing Effect Text with Final
2 parents 12f640a + d854974 commit 818fe2a

File tree

4 files changed

+86
-80
lines changed

4 files changed

+86
-80
lines changed

MekHQ/resources/mekhq/resources/FactionStandings.properties

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,18 @@ campaignOptionsChanged.description.disabled=You have just disabled <b>Faction St
8282
<p>{0}<b>Warning</b>:{1} This is a <b>permanent</b> change that <b>cannot be undone</b>.</p>
8383
# STANDING LEVELS
8484
## Standing Effects
85-
factionStandingLevel.negotiation={0} to Contract Negotiations
86-
factionStandingLevel.resupply=Resupply Sizes at {0}%
87-
factionStandingLevel.commandCircuit={0}<b>Has Command Circuit Access</b>{1}
88-
factionStandingLevel.outlawed={0}<b>Outlawed: Planetary Access Forbidden</b>{1}
89-
factionStandingLevel.batchall={0}<b>Dezgra: Batchall Offers Revoked</b>{1}
90-
factionStandingLevel.recruitment.popularity={0} Recruitment Faction Popularity
91-
factionStandingLevel.recruitment.rolls={0} Recruitment Rolls
92-
factionStandingLevel.barracks={0}% Food & Housing Costs
93-
factionStandingLevel.unitMarket=Unit Type Rarity in the Unit Market
94-
factionStandingLevel.contractPay={0}% Contract Pay
95-
factionStandingLevel.supportPoints.signing={0} Support Points at Contract Signing
96-
factionStandingLevel.supportPoints.periodic={0} to Periodic Support Point Generation Checks
85+
factionStandingLevel.negotiation=Contract Negotiations ({0})
86+
factionStandingLevel.resupply=Resupply Sizes ({0}%)
87+
factionStandingLevel.commandCircuit=COMMAND CIRCUIT ACCESS GRANTED
88+
factionStandingLevel.outlawed=OUTLAWED: PLANETARY ACCESS REVOKED
89+
factionStandingLevel.batchall=DEZGRA: BATCHALL OFFERS REVOKED
90+
factionStandingLevel.recruitment.popularity=Recruitment Faction Popularity ({0})
91+
factionStandingLevel.recruitment.rolls=Recruitment Rolls ({0})
92+
factionStandingLevel.barracks=Food & Housing Costs ({0}%)
93+
factionStandingLevel.unitMarket=Unit Type Rarity in the Unit Market ({0})
94+
factionStandingLevel.contractPay=Contract Pay ({0}%)
95+
factionStandingLevel.supportPoints.signing=Support Points at Contract Signing ({0})
96+
factionStandingLevel.supportPoints.periodic=Periodic Support Point Generation Checks ({0})
9797
## STANDING_LEVEL_0
9898
### Inner Sphere
9999
factionStandingLevel.STANDING_LEVEL_0.innerSphere.label=An Enemy of the State

MekHQ/src/mekhq/campaign/universe/factionStanding/enums/FactionStandingLevel.java

Lines changed: 59 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,19 @@
3232
*/
3333
package mekhq.campaign.universe.factionStanding.enums;
3434

35+
import static java.lang.Math.round;
3536
import static mekhq.utilities.MHQInternationalization.getFormattedTextAt;
3637
import static mekhq.utilities.MHQInternationalization.getTextAt;
3738
import static mekhq.utilities.MHQInternationalization.isResourceKeyValid;
38-
import static mekhq.utilities.ReportingUtilities.CLOSING_SPAN_TAG;
39-
import static mekhq.utilities.ReportingUtilities.getNegativeColor;
40-
import static mekhq.utilities.ReportingUtilities.getPositiveColor;
41-
import static mekhq.utilities.ReportingUtilities.getWarningColor;
42-
import static mekhq.utilities.ReportingUtilities.spanOpeningWithCustomColor;
4339

4440
import java.util.ArrayList;
4541
import java.util.List;
4642

4743
import megamek.codeUtilities.MathUtility;
4844
import megamek.logging.MMLogger;
45+
import mekhq.campaign.CampaignOptions;
4946
import mekhq.campaign.universe.Faction;
47+
import mekhq.gui.dialog.reportDialogs.FactionStanding.FactionStandingReport;
5048

5149
/**
5250
* Represents a standing level within the Faction Standing reputation system.
@@ -73,7 +71,7 @@ public enum FactionStandingLevel {
7371
STANDING_LEVEL_2(2, -40, -25, -2, 0.5, false, false, true, 1, 0, 1.75, -1, 0.8, -1, -2),
7472
STANDING_LEVEL_3(3, -25, -10, -1, 0.75, false, false, true, 2, 0, 1.5, 0, 0.9, 0, -1),
7573
STANDING_LEVEL_4(4, -10, 10, 0, 1.0, false, false, true, 3, 0, 1.0, 0, 1.0, 0, 0),
76-
STANDING_LEVEL_5(5, 10, 25, 1, 1.9, false, false, true, 4, 0, 1.0, 0, 1.05, 0, 1),
74+
STANDING_LEVEL_5(5, 10, 25, 1, 1.25, false, false, true, 4, 0, 1.0, 0, 1.05, 0, 1),
7775
STANDING_LEVEL_6(6, 25, 40, 2, 1.5, false, false, true, 5, 0, 0.85, 1, 1.1, 1, 1),
7876
STANDING_LEVEL_7(7, 40, 50, 3, 1.75, true, false, true, 10, 1, 0.80, 2, 1.15, 1, 2),
7977
STANDING_LEVEL_8(8, 50, Integer.MAX_VALUE, 4, 2.0, true, false, true, 15, 2, 0.75, 3, 1.2, 2, 3);
@@ -418,6 +416,14 @@ public String getDescription(Faction relevantFaction) {
418416
return label;
419417
}
420418

419+
/**
420+
* Use {@link #getEffectsDescription(boolean, CampaignOptions)} instead
421+
*/
422+
@Deprecated(since = "0.50.07", forRemoval = true)
423+
public String getEffectsDescription() {
424+
return getEffectsDescription(false, new CampaignOptions());
425+
}
426+
421427
/**
422428
* Generates a textual description of all effects based on the current faction standing modifiers.
423429
*
@@ -429,76 +435,74 @@ public String getDescription(Faction relevantFaction) {
429435
* @return a comma-separated {@link String} listing all active faction standing effects; returns
430436
* an empty string if there are no effects.
431437
*/
432-
public String getEffectsDescription() {
438+
public String getEffectsDescription(boolean isClan, CampaignOptions campaignOptions) {
439+
MMLogger logger = MMLogger.create(FactionStandingReport.class);
440+
logger.info(this);
433441
List<String> effects = new ArrayList<>();
434442

435-
// If we're fetching for STANDING_LEVEL_4, then we're guaranteed not to pass any of the conditionals, so exit.
436-
if (this == STANDING_LEVEL_4) {
437-
return "";
443+
if (hasCommandCircuitAccess && campaignOptions.isUseFactionStandingCommandCircuit()) {
444+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.commandCircuit"));
438445
}
439446

440-
if (negotiationModifier != STANDING_LEVEL_4.getNegotiationModifier()) {
441-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
442-
"factionStandingLevel.negotiation",
443-
getPolarityOfModifier(negotiationModifier)));
447+
if (isOutlawed && campaignOptions.isUseFactionStandingOutlawed()) {
448+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.outlawed"));
444449
}
445450

446-
int resupplyPercentage = (int) resupplyWeightModifier * 100;
447-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.resupply", resupplyPercentage));
448-
449-
if (hasCommandCircuitAccess) {
450-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
451-
"factionStandingLevel.commandCircuit",
452-
spanOpeningWithCustomColor(getPositiveColor()),
453-
CLOSING_SPAN_TAG));
451+
if (isClan && !isBatchallAllowed && campaignOptions.isUseFactionStandingBatchallRestrictions()) {
452+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.batchall"));
454453
}
455454

456-
if (isOutlawed) {
455+
if (negotiationModifier != 0 && campaignOptions.isUseFactionStandingNegotiation()) {
457456
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
458-
"factionStandingLevel.outlawed",
459-
spanOpeningWithCustomColor(getNegativeColor()),
460-
CLOSING_SPAN_TAG));
457+
"factionStandingLevel.negotiation",
458+
getPolarityOfModifier(negotiationModifier)));
461459
}
462460

463-
if (!isBatchallAllowed) {
464-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
465-
"factionStandingLevel.batchall",
466-
spanOpeningWithCustomColor(getWarningColor()),
467-
CLOSING_SPAN_TAG));
461+
if (resupplyWeightModifier != 1.0
462+
&& campaignOptions.isUseStratCon()
463+
&& campaignOptions.isUseFactionStandingResupply()) {
464+
int resupplyPercentage = (int) round(resupplyWeightModifier * 100);
465+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.resupply", resupplyPercentage));
468466
}
469467

470-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
471-
"factionStandingLevel.recruitment.popularity",
472-
getPolarityOfModifier(recruitmentTickets - STANDING_LEVEL_4.getRecruitmentTickets())));
473-
474-
if (recruitmentRollsModifier != STANDING_LEVEL_4.getRecruitmentRollsModifier()) {
475-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
476-
"factionStandingLevel.recruitment.rolls",
477-
getPolarityOfModifier(recruitmentRollsModifier)));
468+
if (campaignOptions.isUseFactionStandingRecruitment()) {
469+
int ticketsModifier = recruitmentTickets - STANDING_LEVEL_4.getRecruitmentTickets();
470+
if (ticketsModifier != 0) {
471+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.recruitment.popularity",
472+
getPolarityOfModifier(ticketsModifier)));
473+
}
474+
475+
if (recruitmentRollsModifier != 0) {
476+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.recruitment.rolls",
477+
getPolarityOfModifier(recruitmentRollsModifier)));
478+
}
478479
}
479480

480-
int barracksCostPercentage = (int) barrackCostsMultiplier * 100;
481-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.barracks", barracksCostPercentage));
481+
if (barrackCostsMultiplier != 1.0 && campaignOptions.isUseFactionStandingBarracksCosts()) {
482+
int barracksCostPercentage = (int) round(barrackCostsMultiplier * 100);
483+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.barracks", barracksCostPercentage));
484+
}
482485

483-
if (unitMarketRarityModifier != STANDING_LEVEL_4.getUnitMarketRarityModifier()) {
484-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
485-
"factionStandingLevel.unitMarket",
486+
if (unitMarketRarityModifier != 0 && campaignOptions.isUseFactionStandingUnitMarket()) {
487+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.unitMarket",
486488
getPolarityOfModifier(unitMarketRarityModifier)));
487489
}
488490

489-
int payPercentage = (int) contractPayMultiplier * 100;
490-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.contractPay", payPercentage));
491-
492-
if (supportPointModifierContractStart != STANDING_LEVEL_4.getSupportPointModifierContractStart()) {
493-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
494-
"factionStandingLevel.supportPoints.signing",
495-
getPolarityOfModifier(supportPointModifierContractStart)));
491+
if (contractPayMultiplier != 1.0 && campaignOptions.isUseFactionStandingContractPay()) {
492+
int payPercentage = (int) round(contractPayMultiplier * 100);
493+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.contractPay", payPercentage));
496494
}
497495

498-
if (supportPointModifierPeriodic != STANDING_LEVEL_4.getSupportPointModifierPeriodic()) {
499-
effects.add(getFormattedTextAt(RESOURCE_BUNDLE,
500-
"factionStandingLevel.supportPoints.periodic",
501-
getPolarityOfModifier(supportPointModifierContractStart)));
496+
if (campaignOptions.isUseFactionStandingSupportPoints()) {
497+
if (supportPointModifierContractStart != 0) {
498+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.supportPoints.signing",
499+
getPolarityOfModifier(supportPointModifierContractStart)));
500+
}
501+
502+
if (supportPointModifierPeriodic != 0) {
503+
effects.add(getFormattedTextAt(RESOURCE_BUNDLE, "factionStandingLevel.supportPoints.periodic",
504+
getPolarityOfModifier(supportPointModifierPeriodic)));
505+
}
502506
}
503507

504508
return String.join(", ", effects);

MekHQ/src/mekhq/gui/CommandCenterTab.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ private void initReportsPanel() {
595595
getCampaign().getFaction(),
596596
getCampaign().getCampaignFactionIcon(),
597597
getCampaign().getMissions(),
598-
getCampaignOptions().isTrackFactionStanding());
598+
getCampaignOptions());
599599

600600
for (String report : factionStandingReport.getReports()) {
601601
if (report != null && !report.isBlank()) {

MekHQ/src/mekhq/gui/dialog/reportDialogs/FactionStanding/FactionStandingReport.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
import megamek.logging.MMLogger;
6767
import megamek.utilities.ImageUtilities;
6868
import mekhq.MekHQ;
69+
import mekhq.campaign.CampaignOptions;
6970
import mekhq.campaign.mission.Mission;
7071
import mekhq.campaign.mission.enums.MissionStatus;
7172
import mekhq.campaign.universe.Faction;
@@ -125,6 +126,7 @@ public class FactionStandingReport extends JDialog {
125126
private final ImageIcon campaignIcon;
126127
private final List<Mission> missions;
127128
private final boolean isFactionStandingEnabled;
129+
private final CampaignOptions campaignOptions;
128130

129131
private final List<String> innerSphereFactions = new ArrayList<>();
130132
private final List<String> clanFactions = new ArrayList<>();
@@ -143,14 +145,14 @@ public class FactionStandingReport extends JDialog {
143145
* @param isGM A boolean indicating whether the user is a Game Master (GM).
144146
* @param campaignFaction The primary faction for the campaign associated with the report.
145147
* @param campaignIcon An {@link ImageIcon} for the campaign (either a custom user icon or faction icon).
146-
* @param isFactionStandingEnabled {@code true} if the tacking of Faction Standing is enabled in campaign options; {@code false} otherwise.
148+
* @param campaignOptions the {@link CampaignOptions} object associated with the current campaign.
147149
*
148150
* @author Illiani
149151
* @since 0.50.07
150152
*/
151153
public FactionStandingReport(final JFrame frame, final FactionStandings factionStandings, final LocalDate today,
152-
final boolean isGM, final Faction campaignFaction, final ImageIcon campaignIcon,
153-
final Collection<Mission> missions, final boolean isFactionStandingEnabled) {
154+
final boolean isGM, final Faction campaignFaction, final ImageIcon campaignIcon,
155+
final Collection<Mission> missions, final CampaignOptions campaignOptions) {
154156
this.frame = frame;
155157
this.today = today;
156158
this.gameYear = today.getYear();
@@ -160,7 +162,8 @@ public FactionStandingReport(final JFrame frame, final FactionStandings factionS
160162
this.factionStandings = factionStandings;
161163
factions = Factions.getInstance();
162164
this.missions = new ArrayList<>(missions);
163-
this.isFactionStandingEnabled = isFactionStandingEnabled;
165+
this.isFactionStandingEnabled = campaignOptions.isTrackFactionStanding();
166+
this.campaignOptions = campaignOptions;
164167

165168
sortFactions();
166169
createReportPanel();
@@ -351,12 +354,8 @@ private JPanel createEffectsPanel() {
351354
lblStandingEffects.setBorder(null);
352355
lblStandingEffects.setFocusable(false);
353356
lblStandingEffects.setText("");
354-
lblStandingEffects.setMinimumSize(new Dimension(Integer.MAX_VALUE, FACTION_EFFECTS_MINIMUM_HEIGHT));
355-
lblStandingEffects.setPreferredSize(new Dimension(Integer.MAX_VALUE, FACTION_EFFECTS_MINIMUM_HEIGHT));
356357

357-
pnlEffects.add(lblStandingEffects, BorderLayout.CENTER);
358-
pnlEffects.setMinimumSize(new Dimension(Integer.MAX_VALUE, FACTION_EFFECTS_MINIMUM_HEIGHT));
359-
pnlEffects.setPreferredSize(new Dimension(Integer.MAX_VALUE, FACTION_EFFECTS_MINIMUM_HEIGHT));
358+
pnlEffects.add(lblStandingEffects, BorderLayout.SOUTH);
360359

361360
return pnlEffects;
362361
}
@@ -475,7 +474,8 @@ private JPanel createFactionPanel(final String factionCode) {
475474
pnlFactionStanding.setBorder(createStandingColoredRoundedTitledBorder(factionStanding.getStandingLevel()));
476475
pnlFactionStanding.setPreferredSize(new Dimension(FACTION_PANEL_WIDTH, FACTION_PANEL_HEIGHT));
477476
pnlFactionStanding.setMaximumSize(new Dimension(FACTION_PANEL_WIDTH, FACTION_PANEL_HEIGHT));
478-
pnlFactionStanding.addMouseListener(createEffectsPanelUpdater(getEffectsDescription(climateRegard)));
477+
pnlFactionStanding.addMouseListener(createEffectsPanelUpdater(getEffectsDescription(faction.isClan(),
478+
climateRegard)));
479479

480480
// Faction Logo
481481
ImageIcon icon = Factions.getFactionLogo(gameYear, factionCode);
@@ -645,15 +645,17 @@ private static JSlider getRegardSlider(String factionCode, double factionRegard,
645645
/**
646646
* Calculates the standing effects description string for a given faction regard value.
647647
*
648+
* @param isClan {@code true} if the faction is a Clan faction, otherwise {@code false}
648649
* @param factionRegard the regard value of the faction
650+
*
649651
* @return the standing effects description for the corresponding {@link FactionStandingLevel}
650652
*
651653
* @author Illiani
652654
* @since 0.50.07
653655
*/
654-
private static String getEffectsDescription(double factionRegard) {
656+
private String getEffectsDescription(boolean isClan, double factionRegard) {
655657
FactionStandingLevel factionStanding = FactionStandingUtilities.calculateFactionStandingLevel(factionRegard);
656-
return factionStanding.getEffectsDescription();
658+
return factionStanding.getEffectsDescription(isClan, campaignOptions);
657659
}
658660

659661
/**

0 commit comments

Comments
 (0)