From 95c75e3ce1812d99537b628c995a6f6de0a759b7 Mon Sep 17 00:00:00 2001 From: IllianiCBT Date: Sun, 6 Apr 2025 15:47:06 -0500 Subject: [PATCH 1/2] Refactored Edge Handling to Use Adjusted Edge Values - Replaced calls to `getEdge()` with `getAdjustedEdge()` to account for the "unlucky" trait in edge calculations. - Updated `PersonViewPanel` to display adjusted edge values in the GUI. - Modified the `resetCurrentEdge` method to reset based on the adjusted edge value. - Incorporated safeguarded adjustments (e.g., ensuring edge values are non-negative) in calculations. - Improved method documentation for `getEdge()` and `getAdjustedEdge()` to clarify usage and behavior. --- .../src/mekhq/campaign/personnel/Person.java | 23 ++++++++++++++++++- MekHQ/src/mekhq/campaign/unit/Unit.java | 10 ++++---- MekHQ/src/mekhq/gui/view/PersonViewPanel.java | 7 +++--- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/MekHQ/src/mekhq/campaign/personnel/Person.java b/MekHQ/src/mekhq/campaign/personnel/Person.java index b233c0645d..08dc4b64ca 100644 --- a/MekHQ/src/mekhq/campaign/personnel/Person.java +++ b/MekHQ/src/mekhq/campaign/personnel/Person.java @@ -4208,7 +4208,28 @@ public String getOptionList(@Nullable String sep, final String groupKey) { // endregion Personnel Options // region edge + + /** + * Retrieves the edge value for the current person. + * + *

Usage: This method gets the character's raw Edge score. Generally you likely want to use + * {@link #getAdjustedEdge()} instead, as that includes adjustments for the character's {@code unlucky} trait.

+ * + * @return The edge value defined in the person's options. + */ public int getEdge() { + return getOptions().intOption(OptionsConstants.EDGE); + } + + /** + * Retrieves the adjusted edge value for the current person. + * + *

The adjusted Edge value is calculated by subtracting the person's level of bad luck (unlucky) + * from their base Edge value.

+ * + * @return The adjusted edge value after accounting for the person's level of bad luck. + */ + public int getAdjustedEdge() { return getOptions().intOption(OptionsConstants.EDGE) - unlucky; } @@ -4229,7 +4250,7 @@ public void changeEdge(final int amount) { * Resets support personnel edge points to the purchased level. Used for weekly refresh. */ public void resetCurrentEdge() { - setCurrentEdge(getEdge()); + setCurrentEdge(getAdjustedEdge()); } /** diff --git a/MekHQ/src/mekhq/campaign/unit/Unit.java b/MekHQ/src/mekhq/campaign/unit/Unit.java index 7efd7d0cfd..17a7fe581d 100644 --- a/MekHQ/src/mekhq/campaign/unit/Unit.java +++ b/MekHQ/src/mekhq/campaign/unit/Unit.java @@ -4829,19 +4829,19 @@ public void resetPilotAndEntity() { if (getCampaign().getCampaignOptions().isUseEdge()) { double sumEdge = 0; for (Person p : drivers) { - sumEdge += p.getEdge(); + sumEdge += p.getAdjustedEdge(); } // Again, don't count infantrymen twice if (!entity.hasETypeFlag(Entity.ETYPE_INFANTRY)) { for (Person p : gunners) { - sumEdge += p.getEdge(); + sumEdge += p.getAdjustedEdge(); } } // Average the edge values of pilots and gunners. The Spacecraft Engineer // (vessel crewmembers) // handle edge solely through MHQ as noncombat personnel, so aren't considered // here - int edge = (int) Math.round(sumEdge / crewSize); + int edge = max(0, (int) Math.round(sumEdge / crewSize)); IOption edgeOption = entity.getCrew().getOptions().getOption(OptionsConstants.EDGE); edgeOption.setValue((Integer) edge); } @@ -5228,7 +5228,7 @@ public void resetEngineer() { } sumEdgeUsed = engineer.getEdgeUsed(); } - sumEdge += p.getEdge(); + sumEdge += p.getAdjustedEdge(); if (p.hasSkill(SkillType.S_TECH_VESSEL)) { sumSkill += p.getSkill(SkillType.S_TECH_VESSEL).getLevel(); @@ -5262,7 +5262,7 @@ public void resetEngineer() { } engineer.addSkill(SkillType.S_TECH_VESSEL, sumSkill / nCrew, sumBonus / nCrew); engineer.setEdgeUsed(sumEdgeUsed); - engineer.setCurrentEdge((sumEdge - sumEdgeUsed) / nCrew); + engineer.setCurrentEdge(max(0, (sumEdge - sumEdgeUsed) / nCrew)); engineer.setUnit(this); } else { engineer = null; diff --git a/MekHQ/src/mekhq/gui/view/PersonViewPanel.java b/MekHQ/src/mekhq/gui/view/PersonViewPanel.java index 0481f0f880..b0d49589fa 100644 --- a/MekHQ/src/mekhq/gui/view/PersonViewPanel.java +++ b/MekHQ/src/mekhq/gui/view/PersonViewPanel.java @@ -94,8 +94,6 @@ import mekhq.gui.utilities.MarkdownRenderer; import mekhq.gui.utilities.WrapLayout; -import static megamek.client.ui.WrapLayout.wordWrap; - /** * A custom panel that gets filled in with goodies from a Person record * @@ -1602,7 +1600,8 @@ private JPanel fillSkills() { } } - if (campaign.getCampaignOptions().isUseEdge() && (person.getEdge() > 0)) { + int edge = person.getAdjustedEdge(); + if (campaign.getCampaignOptions().isUseEdge() && (edge != 0)) { lblEdge1.setName("lblEdge1"); lblEdge1.setText(resourceMap.getString("lblEdge1.text")); gridBagConstraints = new GridBagConstraints(); @@ -1614,7 +1613,7 @@ private JPanel fillSkills() { lblEdge2.setName("lblEdge2"); lblEdge1.setLabelFor(lblEdge2); - lblEdge2.setText(Integer.toString(person.getEdge())); + lblEdge2.setText(Integer.toString(edge)); lblEdge2.setToolTipText(person.getEdgeTooltip()); gridBagConstraints = new GridBagConstraints(); gridBagConstraints.gridx = 1; From 817a942c9a5e2e1c4272dfef526441b459300869 Mon Sep 17 00:00:00 2001 From: IllianiCBT Date: Sun, 6 Apr 2025 15:52:12 -0500 Subject: [PATCH 2/2] - Replaced `getAdjustedEdge` with `getCurrentEdge` for drivers and gunners to account for prior Edge usage. --- MekHQ/src/mekhq/campaign/unit/Unit.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MekHQ/src/mekhq/campaign/unit/Unit.java b/MekHQ/src/mekhq/campaign/unit/Unit.java index 17a7fe581d..922dfbcf56 100644 --- a/MekHQ/src/mekhq/campaign/unit/Unit.java +++ b/MekHQ/src/mekhq/campaign/unit/Unit.java @@ -4829,19 +4829,19 @@ public void resetPilotAndEntity() { if (getCampaign().getCampaignOptions().isUseEdge()) { double sumEdge = 0; for (Person p : drivers) { - sumEdge += p.getAdjustedEdge(); + sumEdge += p.getCurrentEdge(); } // Again, don't count infantrymen twice if (!entity.hasETypeFlag(Entity.ETYPE_INFANTRY)) { for (Person p : gunners) { - sumEdge += p.getAdjustedEdge(); + sumEdge += p.getCurrentEdge(); } } // Average the edge values of pilots and gunners. The Spacecraft Engineer // (vessel crewmembers) // handle edge solely through MHQ as noncombat personnel, so aren't considered // here - int edge = max(0, (int) Math.round(sumEdge / crewSize)); + int edge = (int) Math.round(sumEdge / crewSize); IOption edgeOption = entity.getCrew().getOptions().getOption(OptionsConstants.EDGE); edgeOption.setValue((Integer) edge); }