From adf57efdd083f58a636272463ff956f6327ac17b Mon Sep 17 00:00:00 2001 From: IllianiCBT Date: Tue, 6 Aug 2024 19:52:56 -0500 Subject: [PATCH 1/2] Added Education Module Handler for Injured Personnel Injured personnel are no longer able to attend academies. Furthermore, the placeholder code included while education level was missing from new characters has been removed, as it is no longer necessary. --- .../adapter/PersonnelTableMouseAdapter.java | 223 +++++++++--------- 1 file changed, 109 insertions(+), 114 deletions(-) diff --git a/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java b/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java index 35842ccc20..8574d90104 100644 --- a/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java +++ b/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java @@ -1622,155 +1622,150 @@ protected Optional createPopupMenu() { //endregion Awards Menu //region Education Menu - // TODO remove this once we have the Personnel Histories module - // this tells mhq that all characters over 16 have completed high school. - // this helps grandfather in existing campaign personnel. - if ((person.getAge(gui.getCampaign().getLocalDate()) >= 16) && (EducationLevel.parseToInt(person.getEduHighestEducation()) < 1)) { - person.setEduHighestEducation(EducationLevel.HIGH_SCHOOL); - } - if (gui.getCampaign().getCampaignOptions().isUseEducationModule()) { - JMenu academyMenu = new JMenu(resources.getString("eduEducation.text")); - - // we use 'campaign' a lot here, so let's store it, so we don't have to re-call it every time - Campaign campaign = gui.getCampaign(); - - if (StaticChecks.areAllActive(selected)) { - // this next block preps variables for use by the menu & tooltip - List academySetNames = AcademyFactory.getInstance().getAllSetNames(); - Collections.sort(academySetNames); - - // this filters out any academy sets that are disabled in Campaign Options, - // or not applicable for the current campaign faction - if (academySetNames.contains("Local Academies")) { - if (!campaign.getCampaignOptions().isEnableLocalAcademies()) { - academySetNames.remove("Local Academies"); + if (Arrays.stream(selected).noneMatch(prospectiveStudent -> person.needsFixing())) { + JMenu academyMenu = new JMenu(resources.getString("eduEducation.text")); + + // we use 'campaign' a lot here, so let's store it, so we don't have to re-call it every time + Campaign campaign = gui.getCampaign(); + + if (StaticChecks.areAllActive(selected)) { + // this next block preps variables for use by the menu & tooltip + List academySetNames = AcademyFactory.getInstance().getAllSetNames(); + Collections.sort(academySetNames); + + // this filters out any academy sets that are disabled in Campaign Options, + // or not applicable for the current campaign faction + if (academySetNames.contains("Local Academies")) { + if (!campaign.getCampaignOptions().isEnableLocalAcademies()) { + academySetNames.remove("Local Academies"); + } } - } - if (academySetNames.contains("Prestigious Academies")) { - if (!campaign.getCampaignOptions().isEnablePrestigiousAcademies()) { - academySetNames.remove("Prestigious Academies"); + if (academySetNames.contains("Prestigious Academies")) { + if (!campaign.getCampaignOptions().isEnablePrestigiousAcademies()) { + academySetNames.remove("Prestigious Academies"); + } } - } - if (academySetNames.contains("Unit Education")) { - if (!campaign.getCampaignOptions().isEnableUnitEducation()) { - academySetNames.remove("Unit Education"); + if (academySetNames.contains("Unit Education")) { + if (!campaign.getCampaignOptions().isEnableUnitEducation()) { + academySetNames.remove("Unit Education"); + } } - } - // We then start processing the remaining academy sets - for (String setName : academySetNames) { - JMenu setAcademyMenu = new JMenu(setName); + // We then start processing the remaining academy sets + for (String setName : academySetNames) { + JMenu setAcademyMenu = new JMenu(setName); - // we filter each academy into one of these three categories - JMenu civilianMenu = new JMenu(resources.getString("eduCivilian.text")); - JMenu militaryMenu = new JMenu(resources.getString("eduMilitary.text")); + // we filter each academy into one of these three categories + JMenu civilianMenu = new JMenu(resources.getString("eduCivilian.text")); + JMenu militaryMenu = new JMenu(resources.getString("eduMilitary.text")); - setAcademyMenu.add(civilianMenu); - setAcademyMenu.add(militaryMenu); + setAcademyMenu.add(civilianMenu); + setAcademyMenu.add(militaryMenu); - List academiesOfSet = AcademyFactory.getInstance().getAllAcademiesForSet(setName); - Collections.sort(academiesOfSet); + List academiesOfSet = AcademyFactory.getInstance().getAllAcademiesForSet(setName); + Collections.sort(academiesOfSet); - for (Academy academy : academiesOfSet) { - // time to start filtering the academies - if (oneSelected) { - buildEducationMenusSingleton(campaign, person, academy, militaryMenu, civilianMenu); - } else { - buildEducationMenusMassEnroll(campaign, Arrays.asList(selected), academy, militaryMenu, civilianMenu); + for (Academy academy : academiesOfSet) { + // time to start filtering the academies + if (oneSelected) { + buildEducationMenusSingleton(campaign, person, academy, militaryMenu, civilianMenu); + } else { + buildEducationMenusMassEnroll(campaign, Arrays.asList(selected), academy, militaryMenu, civilianMenu); + } } + academyMenu.add(setAcademyMenu); } - academyMenu.add(setAcademyMenu); } - } - if (StaticChecks.areAllStudents(selected)) { - JMenuItem completeStage = new JMenuItem(resources.getString("eduDropOut.text")); - completeStage.setToolTipText(resources.getString("eduDropOut.toolTip")); - completeStage.setActionCommand(makeCommand(CMD_DROP_OUT)); - completeStage.addActionListener(this); - academyMenu.add(completeStage); - } + if (StaticChecks.areAllStudents(selected)) { + JMenuItem completeStage = new JMenuItem(resources.getString("eduDropOut.text")); + completeStage.setToolTipText(resources.getString("eduDropOut.toolTip")); + completeStage.setActionCommand(makeCommand(CMD_DROP_OUT)); + completeStage.addActionListener(this); + academyMenu.add(completeStage); + } - if ((oneSelected) && (StaticChecks.areAllStudents(selected))) { - Academy academy = EducationController.getAcademy(person.getEduAcademySet(), person.getEduAcademyNameInSet()); + if ((oneSelected) && (StaticChecks.areAllStudents(selected))) { + Academy academy = EducationController.getAcademy(person.getEduAcademySet(), person.getEduAcademyNameInSet()); - // this pile of if-statements just checks that the individual is eligible for re-enrollment - // has the person finished their education, but not yet returned to the unit? - if ((!person.getEduEducationStage().isJourneyToCampus()) && (!person.getEduEducationStage().isEducation())) { - // is the academy still standing? - if ((campaign.getGameYear() < academy.getDestructionYear()) && (campaign.getGameYear() < academy.getClosureYear())) { - // if the academy is local, is the system still populated? - if ((!academy.isLocal()) || (campaign.getCurrentSystem().getPopulation(campaign.getLocalDate()) > 0)) { - // is the person still within the correct age band? - if ((person.getAge(campaign.getLocalDate()) < academy.getAgeMax()) && (person.getAge(campaign.getLocalDate()) >= academy.getAgeMin())) { - // has the person been edited at some point and is no longer qualified? - if (academy.isQualified(person)) { - // here we check that the person will benefit from re-enrollment - int improvementPossible = 0; + // this pile of if-statements just checks that the individual is eligible for re-enrollment + // has the person finished their education, but not yet returned to the unit? + if ((!person.getEduEducationStage().isJourneyToCampus()) && (!person.getEduEducationStage().isEducation())) { + // is the academy still standing? + if ((campaign.getGameYear() < academy.getDestructionYear()) && (campaign.getGameYear() < academy.getClosureYear())) { + // if the academy is local, is the system still populated? + if ((!academy.isLocal()) || (campaign.getCurrentSystem().getPopulation(campaign.getLocalDate()) > 0)) { + // is the person still within the correct age band? + if ((person.getAge(campaign.getLocalDate()) < academy.getAgeMax()) && (person.getAge(campaign.getLocalDate()) >= academy.getAgeMin())) { + // has the person been edited at some point and is no longer qualified? + if (academy.isQualified(person)) { + // here we check that the person will benefit from re-enrollment + int improvementPossible = 0; - if (academy.getFilteredFaction(campaign, person, List.of(person.getEduAcademyFaction())) != null) { - int educationLevel = academy.getEducationLevel(person); + if (academy.getFilteredFaction(campaign, person, List.of(person.getEduAcademyFaction())) != null) { + int educationLevel = academy.getEducationLevel(person); - String[] skills = academy.getCurriculums().get(person.getEduCourseIndex()).split(","); + String[] skills = academy.getCurriculums().get(person.getEduCourseIndex()).split(","); - skills = Arrays.stream(skills).map(String::trim).toArray(String[]::new); + skills = Arrays.stream(skills).map(String::trim).toArray(String[]::new); - for (String skill : skills) { - if (skill.equalsIgnoreCase("none")) { - continue; - } - - if (skill.equalsIgnoreCase("xp")) { - if (EducationLevel.parseToInt(person.getEduHighestEducation()) < educationLevel) { - improvementPossible++; + for (String skill : skills) { + if (skill.equalsIgnoreCase("none")) { + continue; } - } else { - String skillParsed = skillParser(skill); - if ((person.hasSkill(skillParsed)) && (person.getSkill(skillParsed).getExperienceLevel() < educationLevel)) { - improvementPossible++; + if (skill.equalsIgnoreCase("xp")) { + if (EducationLevel.parseToInt(person.getEduHighestEducation()) < educationLevel) { + improvementPossible++; + } + } else { + String skillParsed = skillParser(skill); + + if ((person.hasSkill(skillParsed)) && (person.getSkill(skillParsed).getExperienceLevel() < educationLevel)) { + improvementPossible++; + } } } } - } - JMenuItem reEnroll; - - if (improvementPossible > 0) { - reEnroll = new JMenuItem(resources.getString("eduReEnroll.text")); - reEnroll.setToolTipText(resources.getString("eduReEnroll.toolTip")); - reEnroll.setActionCommand(makeCommand(CMD_BEGIN_EDUCATION_RE_ENROLLMENT, - academy.getSet(), - academy.getName(), - String.valueOf(person.getEduCourseIndex()), - person.getEduAcademySystem(), - person.getEduAcademyFaction())); - reEnroll.addActionListener(this); - } else { - reEnroll = new JMenuItem(resources.getString("eduReEnrollImpossible.text")); - reEnroll.setToolTipText(resources.getString("eduReEnrollImpossible.toolTip")); - } + JMenuItem reEnroll; + + if (improvementPossible > 0) { + reEnroll = new JMenuItem(resources.getString("eduReEnroll.text")); + reEnroll.setToolTipText(resources.getString("eduReEnroll.toolTip")); + reEnroll.setActionCommand(makeCommand(CMD_BEGIN_EDUCATION_RE_ENROLLMENT, + academy.getSet(), + academy.getName(), + String.valueOf(person.getEduCourseIndex()), + person.getEduAcademySystem(), + person.getEduAcademyFaction())); + reEnroll.addActionListener(this); + } else { + reEnroll = new JMenuItem(resources.getString("eduReEnrollImpossible.text")); + reEnroll.setToolTipText(resources.getString("eduReEnrollImpossible.toolTip")); + } - academyMenu.add(reEnroll); + academyMenu.add(reEnroll); + } } } } } } - } - if ((StaticChecks.areAllStudents(selected)) && (campaign.isGM())) { - JMenuItem completeStage = new JMenuItem(resources.getString("eduCompleteStage.text")); - completeStage.setToolTipText(resources.getString("eduCompleteStage.toolTip")); - completeStage.setActionCommand(makeCommand(CMD_COMPLETE_STAGE)); - completeStage.addActionListener(this); - academyMenu.add(completeStage); - } + if ((StaticChecks.areAllStudents(selected)) && (campaign.isGM())) { + JMenuItem completeStage = new JMenuItem(resources.getString("eduCompleteStage.text")); + completeStage.setToolTipText(resources.getString("eduCompleteStage.toolTip")); + completeStage.setActionCommand(makeCommand(CMD_COMPLETE_STAGE)); + completeStage.addActionListener(this); + academyMenu.add(completeStage); + } - popup.add(academyMenu); + popup.add(academyMenu); + } } //endregion Education Menu From 9f347aee5893d9c60697c3c996e27ef5693f34c3 Mon Sep 17 00:00:00 2001 From: IllianiCBT Date: Wed, 7 Aug 2024 21:37:11 -0500 Subject: [PATCH 2/2] Refactor education menu logic in PersonnelTableMouseAdapter Simplified the logic for displaying the education menu by reorganizing the condition checks. The campaign variable is now stored before the checks to avoid multiple calls. --- .../mekhq/gui/adapter/PersonnelTableMouseAdapter.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java b/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java index d78278f05e..4fe2641cbe 100644 --- a/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java +++ b/MekHQ/src/mekhq/gui/adapter/PersonnelTableMouseAdapter.java @@ -1623,13 +1623,13 @@ protected Optional createPopupMenu() { //region Education Menu if (gui.getCampaign().getCampaignOptions().isUseEducationModule()) { - if (Arrays.stream(selected).noneMatch(prospectiveStudent -> person.needsFixing())) { - JMenu academyMenu = new JMenu(resources.getString("eduEducation.text")); + JMenu academyMenu = new JMenu(resources.getString("eduEducation.text")); - // we use 'campaign' a lot here, so let's store it, so we don't have to re-call it every time - Campaign campaign = gui.getCampaign(); + // we use 'campaign' a lot here, so let's store it, so we don't have to re-call it every time + Campaign campaign = gui.getCampaign(); - if (StaticChecks.areAllActive(selected)) { + if (StaticChecks.areAllActive(selected)) { + if (Arrays.stream(selected).noneMatch(prospectiveStudent -> person.needsFixing())) { // this next block preps variables for use by the menu & tooltip List academySetNames = AcademyFactory.getInstance().getAllSetNames(); Collections.sort(academySetNames);