Skip to content

Commit

Permalink
Merge pull request #4885 from IllianiCBT/personnel_gmMininumComplement
Browse files Browse the repository at this point in the history
Added Ability to Define Skill Levels When Using GM Hire Minimum Complement
  • Loading branch information
IllianiCBT authored Sep 26, 2024
2 parents 6fd4a31 + 45c9c71 commit fc17bfd
Show file tree
Hide file tree
Showing 3 changed files with 88 additions and 30 deletions.
8 changes: 7 additions & 1 deletion MekHQ/resources/mekhq/resources/GUI.properties
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,13 @@ removePregnancy.text=Remove Pregnancy
removePregnancies.text=Remove Pregnancies
regenerateLoyalty.text=Regenerate Loyalty
regeneratePersonality.text=Regenerate Personality
addMinimumComplement.text=Add minimum complement
addMinimumComplementRandom.text=Random
addMinimumComplementElite.text=Elite
addMinimumComplementVeteran.text=Veteran
addMinimumComplementRegular.text=Regular
addMinimumComplementGreen.text=Green
addMinimumComplementUltraGreen.text=Ultra Green

#### ProcurementTableMouseAdapter Class
miClearItems.text=Clear All Items
Expand All @@ -280,7 +287,6 @@ deleteUnitsCount.text=%d units
removeQ.title=Remove?
confirmRemove.text=Do you really want to remove %s?
hireMinimumComplement.text=Hire minimum complement
addMinimumComplement.text=Add minimum complement



Expand Down
66 changes: 61 additions & 5 deletions MekHQ/src/mekhq/gui/adapter/UnitTableMouseAdapter.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import megamek.client.ui.swing.UnitEditorDialog;
import megamek.common.*;
import megamek.common.annotations.Nullable;
import megamek.common.enums.SkillLevel;
import megamek.common.icons.Camouflage;
import megamek.common.loaders.BLKFile;
import megamek.common.loaders.EntityLoadingException;
Expand Down Expand Up @@ -67,6 +68,7 @@
import java.util.stream.Stream;

import static megamek.client.ui.WrapLayout.wordWrap;
import static mekhq.gui.dialog.HireBulkPersonnelDialog.overrideSkills;

public class UnitTableMouseAdapter extends JPopupMenuAdapter {
private static final MMLogger logger = MMLogger.create(UnitTableMouseAdapter.class);
Expand Down Expand Up @@ -125,7 +127,12 @@ public class UnitTableMouseAdapter extends JPopupMenuAdapter {
public static final String COMMAND_GM_MOTHBALL = COMMAND_MOTHBALL + COMMAND_GM;
public static final String COMMAND_GM_ACTIVATE = COMMAND_ACTIVATE + COMMAND_GM;
public static final String COMMAND_UNDEPLOY = "UNDEPLOY";
public static final String COMMAND_HIRE_FULL_GM = COMMAND_HIRE_FULL + COMMAND_GM;
public static final String COMMAND_HIRE_FULL_GM_RANDOM = COMMAND_HIRE_FULL + COMMAND_GM;
public static final String COMMAND_HIRE_FULL_GM_ELITE = COMMAND_HIRE_FULL + COMMAND_GM + "ELITE";
public static final String COMMAND_HIRE_FULL_GM_VETERAN = COMMAND_HIRE_FULL + COMMAND_GM + "VETERAN";
public static final String COMMAND_HIRE_FULL_GM_REGULAR = COMMAND_HIRE_FULL + COMMAND_GM + "REGULAR";
public static final String COMMAND_HIRE_FULL_GM_GREEN = COMMAND_HIRE_FULL + COMMAND_GM + "GREEN";
public static final String COMMAND_HIRE_FULL_GM_ULTRA_GREEN = COMMAND_HIRE_FULL + COMMAND_GM +"ULTRA_GREEN";
public static final String COMMAND_EDIT_DAMAGE = "EDIT_DAMAGE";
public static final String COMMAND_RESTORE_UNIT = "RESTORE_UNIT";
public static final String COMMAND_SET_QUALITY = "SET_QUALITY";
Expand Down Expand Up @@ -324,10 +331,30 @@ public void actionPerformed(ActionEvent action) {
}
}
} else if (command.contains(COMMAND_HIRE_FULL)) {
boolean isGM = command.equals(COMMAND_HIRE_FULL_GM);
boolean isGM = command.contains("GM");
HirePersonnelUnitAction hireAction = new HirePersonnelUnitAction(isGM);
for (Unit unit : units) {
hireAction.execute(gui.getCampaign(), unit);

if (command.contains("RANDOM")) {
continue;
}

SkillLevel skillLevel = SkillLevel.REGULAR;
if (command.contains("ELITE")) {
skillLevel = SkillLevel.ELITE;
} else if (command.contains("VETERAN")) {
skillLevel = SkillLevel.VETERAN;
} else if (command.contains("GREEN")) {
skillLevel = SkillLevel.GREEN;
} else if (command.contains("ULTRA_GREEN")) {
skillLevel = SkillLevel.ULTRA_GREEN;
}

for (Person person : unit.getCrew()) {
overrideSkills(gui.getCampaign(), person, person.getPrimaryRole(), skillLevel.ordinal());
}

}
} else if (command.equals(COMMAND_CUSTOMIZE)) { // Single Unit only
((MekLabTab) gui.getTab(MHQTabType.MEK_LAB)).loadUnit(selectedUnit);
Expand Down Expand Up @@ -978,10 +1005,39 @@ protected Optional<JPopupMenu> createPopupMenu() {
}

if (oneAvailableUnitBelowMaxCrew) {
menuItem = new JMenuItem(resources.getString("addMinimumComplement.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM);
JMenu menuMinimumComplement = new JMenu(resources.getString("addMinimumComplement.text"));

menuItem = new JMenuItem(resources.getString("addMinimumComplementRandom.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM_RANDOM);
menuItem.addActionListener(this);
menu.add(menuItem);
menuMinimumComplement.add(menuItem);

menuItem = new JMenuItem(resources.getString("addMinimumComplementElite.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM_ELITE);
menuItem.addActionListener(this);
menuMinimumComplement.add(menuItem);

menuItem = new JMenuItem(resources.getString("addMinimumComplementVeteran.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM_VETERAN);
menuItem.addActionListener(this);
menuMinimumComplement.add(menuItem);

menuItem = new JMenuItem(resources.getString("addMinimumComplementRegular.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM_REGULAR);
menuItem.addActionListener(this);
menuMinimumComplement.add(menuItem);

menuItem = new JMenuItem(resources.getString("addMinimumComplementGreen.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM_GREEN);
menuItem.addActionListener(this);
menuMinimumComplement.add(menuItem);

menuItem = new JMenuItem(resources.getString("addMinimumComplementUltraGreen.text"));
menuItem.setActionCommand(COMMAND_HIRE_FULL_GM_ULTRA_GREEN);
menuItem.addActionListener(this);
menuMinimumComplement.add(menuItem);

menu.add(menuMinimumComplement);
}

if (oneSelected) {
Expand Down
44 changes: 20 additions & 24 deletions MekHQ/src/mekhq/gui/dialog/HireBulkPersonnelDialog.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,23 +18,6 @@
*/
package mekhq.gui.dialog;

import static mekhq.campaign.personnel.SkillType.*;
import static mekhq.campaign.personnel.generator.AbstractSkillGenerator.addSkill;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Objects;
import java.util.ResourceBundle;

import javax.swing.*;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.JSpinner.NumberEditor;

import megamek.client.ui.baseComponents.MMComboBox;
import megamek.client.ui.preferences.JWindowPreference;
import megamek.client.ui.preferences.PreferencesNode;
Expand Down Expand Up @@ -74,6 +57,20 @@
import static mekhq.campaign.personnel.SkillType.*;
import static mekhq.campaign.personnel.generator.AbstractSkillGenerator.addSkill;

import javax.swing.*;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.JSpinner.NumberEditor;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Objects;
import java.util.ResourceBundle;

import static mekhq.campaign.personnel.SkillType.*;
import static mekhq.campaign.personnel.generator.AbstractSkillGenerator.addSkill;

/**
* @author Jay Lawson
*/
Expand Down Expand Up @@ -362,10 +359,8 @@ private void hire(boolean isGmHire) {
Person person = campaign.newPerson(selectedItem.getRole());

if ((useSkill) && (!selectedItem.getRole().isCivilian()) && (!selectedItem.getRole().isAssistant())) {
overrideSkills(
person,
selectedItem.getRole(),
Objects.requireNonNull(skillLevel.getSelectedItem()).ordinal());
overrideSkills(campaign, person, selectedItem.getRole(),
Objects.requireNonNull(skillLevel.getSelectedItem()).ordinal());
}

person.setRank(((RankDisplay) Objects.requireNonNull(choiceRanks.getSelectedItem())).getRankNumeric());
Expand Down Expand Up @@ -419,15 +414,16 @@ private void hire(boolean isGmHire) {
}

/**
* Replaces the skills for a {@link Person} based on their primary role and
* desired experience level.
* Replaces the skills for a {@link Person} based on their primary role and desired experience level.
*
* @param campaign The current campaign
* @param person The {@link Person} to add default skills.
* @param primaryRole The primary role of the person
* @param expLvl The experience level of the person (e.g.
* {@link SkillType#EXP_GREEN}).
*/
protected void overrideSkills(Person person, PersonnelRole primaryRole, int expLvl) {
public static void overrideSkills(Campaign campaign, Person person, PersonnelRole primaryRole,
int expLvl) {
switch (primaryRole) {
case MEKWARRIOR:
addSkillFixedExperienceLevel(person, S_PILOT_MEK, expLvl);
Expand Down

0 comments on commit fc17bfd

Please sign in to comment.