Skip to content

Commit 86eda2f

Browse files
authored
Merge pull request #5088 from IllianiCBT/personalities_newQuirks
Added 100+ New Quirks, Refactored Personality Traits & Quirk Classes
2 parents 6112e9e + 0f8cd21 commit 86eda2f

File tree

10 files changed

+1461
-1484
lines changed

10 files changed

+1461
-1484
lines changed

MekHQ/resources/mekhq/resources/Personalities.properties

Lines changed: 1182 additions & 244 deletions
Large diffs are not rendered by default.

MekHQ/src/mekhq/campaign/personnel/Person.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2207,27 +2207,27 @@ public void writeToXML(final PrintWriter pw, int indent, final Campaign campaign
22072207
}
22082208

22092209
if (aggression != Aggression.NONE) {
2210-
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "aggression", aggression.toString());
2210+
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "aggression", aggression.ordinal());
22112211
}
22122212

22132213
if (ambition != Ambition.NONE) {
2214-
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "ambition", ambition.toString());
2214+
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "ambition", ambition.ordinal());
22152215
}
22162216

22172217
if (greed != Greed.NONE) {
2218-
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "greed", greed.toString());
2218+
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "greed", greed.ordinal());
22192219
}
22202220

22212221
if (social != Social.NONE) {
2222-
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "social", social.toString());
2222+
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "social", social.ordinal());
22232223
}
22242224

22252225
if (personalityQuirk != PersonalityQuirk.NONE) {
2226-
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "personalityQuirk", personalityQuirk.toString());
2226+
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "personalityQuirk", personalityQuirk.ordinal());
22272227
}
22282228

22292229
if (intelligence != Intelligence.AVERAGE) {
2230-
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "intelligence", intelligence.toString());
2230+
MHQXMLUtility.writeSimpleXMLTag(pw, indent, "intelligence", intelligence.ordinal());
22312231
}
22322232

22332233
if (!StringUtility.isNullOrBlank(personalityDescription)) {
@@ -2564,17 +2564,48 @@ public static Person generateInstanceFromXML(Node wn, Campaign c, Version versio
25642564
} else if (wn2.getNodeName().equalsIgnoreCase("eduEducationTime")) {
25652565
retVal.eduEducationTime = Integer.parseInt(wn2.getTextContent());
25662566
} else if (wn2.getNodeName().equalsIgnoreCase("aggression")) {
2567-
retVal.aggression = Aggression.parseFromString(wn2.getTextContent());
2567+
try {
2568+
// <50.01 compatibility handler
2569+
retVal.aggression = Aggression.parseFromString(wn2.getTextContent());
2570+
} catch (Exception e) {
2571+
retVal.aggression = Aggression.fromOrdinal(Integer.parseInt(wn2.getTextContent()));
2572+
}
25682573
} else if (wn2.getNodeName().equalsIgnoreCase("ambition")) {
2569-
retVal.ambition = Ambition.parseFromString(wn2.getTextContent());
2574+
try {
2575+
// <50.01 compatibility handler
2576+
retVal.ambition = Ambition.parseFromString(wn2.getTextContent());
2577+
} catch (Exception e) {
2578+
retVal.ambition = Ambition.fromOrdinal(Integer.parseInt(wn2.getTextContent()));
2579+
}
25702580
} else if (wn2.getNodeName().equalsIgnoreCase("greed")) {
2571-
retVal.greed = Greed.parseFromString(wn2.getTextContent());
2581+
try {
2582+
// <50.01 compatibility handler
2583+
retVal.greed = Greed.parseFromString(wn2.getTextContent());
2584+
} catch (Exception e) {
2585+
retVal.greed = Greed.fromOrdinal(Integer.parseInt(wn2.getTextContent()));
2586+
}
25722587
} else if (wn2.getNodeName().equalsIgnoreCase("social")) {
2588+
try {
2589+
// <50.01 compatibility handler
2590+
retVal.social = Social.parseFromString(wn2.getTextContent());
2591+
} catch (Exception e) {
2592+
retVal.social = Social.fromOrdinal(Integer.parseInt(wn2.getTextContent()));
2593+
}
25732594
retVal.social = Social.parseFromString(wn2.getTextContent());
25742595
} else if (wn2.getNodeName().equalsIgnoreCase("personalityQuirk")) {
2575-
retVal.personalityQuirk = PersonalityQuirk.parseFromString(wn2.getTextContent());
2596+
try {
2597+
// <50.01 compatibility handler
2598+
retVal.personalityQuirk = PersonalityQuirk.parseFromString(wn2.getTextContent());
2599+
} catch (Exception e) {
2600+
retVal.personalityQuirk = PersonalityQuirk.fromOrdinal(Integer.parseInt(wn2.getTextContent()));
2601+
}
25762602
} else if (wn2.getNodeName().equalsIgnoreCase("intelligence")) {
2577-
retVal.intelligence = Intelligence.parseFromString(wn2.getTextContent());
2603+
try {
2604+
// <50.01 compatibility handler
2605+
retVal.intelligence = Intelligence.parseFromString(wn2.getTextContent());
2606+
} catch (Exception e) {
2607+
retVal.intelligence = Intelligence.fromOrdinal(Integer.parseInt(wn2.getTextContent()));
2608+
}
25782609
} else if (wn2.getNodeName().equalsIgnoreCase("personalityDescription")) {
25792610
retVal.personalityDescription = wn2.getTextContent();
25802611
} else if (wn2.getNodeName().equalsIgnoreCase("clanPersonnel")) {

MekHQ/src/mekhq/campaign/personnel/education/EducationController.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import mekhq.campaign.personnel.enums.PersonnelStatus;
3333
import mekhq.campaign.personnel.enums.education.EducationLevel;
3434
import mekhq.campaign.personnel.enums.education.EducationStage;
35-
import mekhq.campaign.personnel.randomEvents.enums.personalities.Intelligence;
3635
import mekhq.utilities.ReportingUtilities;
3736

3837
import java.time.DayOfWeek;
@@ -1357,7 +1356,7 @@ private static void graduateChild(Campaign campaign, Person person, Academy acad
13571356
}
13581357

13591358
if (campaign.getCampaignOptions().isUseRandomPersonalities()) {
1360-
graduationRoll += Intelligence.parseToInt(person.getIntelligence()) - 12;
1359+
graduationRoll += person.getIntelligence().ordinal() - 12;
13611360
}
13621361

13631362
if (graduationRoll < 30) {

MekHQ/src/mekhq/campaign/personnel/randomEvents/PersonalityController.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,15 @@
1919

2020
package mekhq.campaign.personnel.randomEvents;
2121

22-
import static mekhq.campaign.personnel.randomEvents.enums.personalities.Intelligence.*;
23-
24-
import java.util.ArrayList;
25-
import java.util.Collections;
26-
import java.util.List;
27-
import java.util.Objects;
28-
import java.util.Random;
29-
3022
import megamek.common.Compute;
3123
import megamek.common.enums.Gender;
3224
import mekhq.campaign.personnel.Person;
3325
import mekhq.campaign.personnel.enums.GenderDescriptors;
34-
import mekhq.campaign.personnel.randomEvents.enums.personalities.Aggression;
35-
import mekhq.campaign.personnel.randomEvents.enums.personalities.Ambition;
36-
import mekhq.campaign.personnel.randomEvents.enums.personalities.Greed;
37-
import mekhq.campaign.personnel.randomEvents.enums.personalities.Intelligence;
38-
import mekhq.campaign.personnel.randomEvents.enums.personalities.PersonalityQuirk;
39-
import mekhq.campaign.personnel.randomEvents.enums.personalities.Social;
26+
import mekhq.campaign.personnel.randomEvents.enums.personalities.*;
27+
28+
import java.util.*;
29+
30+
import static mekhq.campaign.personnel.randomEvents.enums.personalities.Intelligence.*;
4031

4132
public class PersonalityController {
4233
public static void generatePersonality(Person person) {
@@ -97,10 +88,10 @@ private static void setPersonalityTrait(Person person, int tableRoll, int traitR
9788
}
9889

9990
switch (tableRoll) {
100-
case 0 -> person.setAggression(Aggression.parseFromInt(traitRoll));
101-
case 1 -> person.setAmbition(Ambition.parseFromInt(traitRoll));
102-
case 2 -> person.setGreed(Greed.parseFromInt(traitRoll));
103-
case 3 -> person.setSocial(Social.parseFromInt(traitRoll));
91+
case 0 -> person.setAggression(Aggression.fromOrdinal(traitRoll));
92+
case 1 -> person.setAmbition(Ambition.fromOrdinal(traitRoll));
93+
case 2 -> person.setGreed(Greed.fromOrdinal(traitRoll));
94+
case 3 -> person.setSocial(Social.fromOrdinal(traitRoll));
10495
default -> throw new IllegalStateException(
10596
"Unexpected value in mekhq/campaign/personnel/randomEvents/personality/PersonalityController.java/setPersonalityTrait: "
10697
+ tableRoll);

MekHQ/src/mekhq/campaign/personnel/randomEvents/enums/personalities/Aggression.java

Lines changed: 18 additions & 168 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@
1818
*/
1919
package mekhq.campaign.personnel.randomEvents.enums.personalities;
2020

21-
import java.util.ResourceBundle;
22-
21+
import megamek.logging.MMLogger;
2322
import mekhq.MekHQ;
2423

24+
import java.util.ResourceBundle;
25+
2526
public enum Aggression {
2627
// region Enum Declarations
2728
NONE("Personality.NONE.text", "Personality.NONE.description", false, false),
@@ -106,126 +107,6 @@ public boolean isTraitMajor() {
106107
public boolean isNone() {
107108
return this == NONE;
108109
}
109-
110-
public boolean isBloodthirsty() {
111-
return this == BLOODTHIRSTY;
112-
}
113-
114-
public boolean isBold() {
115-
return this == BOLD;
116-
}
117-
118-
public boolean isAggressive() {
119-
return this == AGGRESSIVE;
120-
}
121-
122-
public boolean isAssertive() {
123-
return this == ASSERTIVE;
124-
}
125-
126-
public boolean isBelligerent() {
127-
return this == BELLIGERENT;
128-
}
129-
130-
public boolean isBrash() {
131-
return this == BRASH;
132-
}
133-
134-
public boolean isConfident() {
135-
return this == CONFIDENT;
136-
}
137-
138-
public boolean isCourageous() {
139-
return this == COURAGEOUS;
140-
}
141-
142-
public boolean isDaring() {
143-
return this == DARING;
144-
}
145-
146-
public boolean isDecisive() {
147-
return this == DECISIVE;
148-
}
149-
150-
public boolean isDetermined() {
151-
return this == DETERMINED;
152-
}
153-
154-
public boolean isDiplomatic() {
155-
return this == DIPLOMATIC;
156-
}
157-
158-
public boolean isDomineering() {
159-
return this == DOMINEERING;
160-
}
161-
162-
public boolean isFearless() {
163-
return this == FEARLESS;
164-
}
165-
166-
public boolean isHostile() {
167-
return this == HOSTILE;
168-
}
169-
170-
public boolean isHotHeaded() {
171-
return this == HOT_HEADED;
172-
}
173-
174-
public boolean isImpetuous() {
175-
return this == IMPETUOUS;
176-
}
177-
178-
public boolean isImpulsive() {
179-
return this == IMPULSIVE;
180-
}
181-
182-
public boolean isInflexible() {
183-
return this == INFLEXIBLE;
184-
}
185-
186-
public boolean isIntrepid() {
187-
return this == INTREPID;
188-
}
189-
190-
public boolean isMurderous() {
191-
return this == MURDEROUS;
192-
}
193-
194-
public boolean isOverbearing() {
195-
return this == OVERBEARING;
196-
}
197-
198-
public boolean isPacifistic() {
199-
return this == PACIFISTIC;
200-
}
201-
202-
public boolean isReckless() {
203-
return this == RECKLESS;
204-
}
205-
206-
public boolean isResolute() {
207-
return this == RESOLUTE;
208-
}
209-
210-
public boolean isSadistic() {
211-
return this == SADISTIC;
212-
}
213-
214-
public boolean isSavage() {
215-
return this == SAVAGE;
216-
}
217-
218-
public boolean isStubborn() {
219-
return this == STUBBORN;
220-
}
221-
222-
public boolean isTenacious() {
223-
return this == TENACIOUS;
224-
}
225-
226-
public boolean isVigilant() {
227-
return this == VIGILANT;
228-
}
229110
// endregion Boolean Comparison Methods
230111

231112
// region File I/O
@@ -238,7 +119,7 @@ public boolean isVigilant() {
238119
* @throws IllegalStateException if the given string does not match any valid
239120
* Aggression
240121
*/
241-
122+
@Deprecated
242123
public static Aggression parseFromString(final String aggression) {
243124
return switch (aggression) {
244125
case "0", "None" -> NONE;
@@ -282,54 +163,23 @@ public static Aggression parseFromString(final String aggression) {
282163
}
283164

284165
/**
285-
* Parses an integer value into an Aggression enum.
166+
* Returns the {@link Aggression} associated with the given ordinal.
286167
*
287-
* @param aggression the integer value representing the Aggression level
288-
* @return the corresponding Aggression enum value
289-
* @throws IllegalStateException if the integer value does not correspond to any
290-
* valid Aggression enum value
168+
* @param ordinal the ordinal value of the {@link Aggression}
169+
* @return the {@link Aggression} associated with the given ordinal, or default value
170+
* {@code NONE} if not found
291171
*/
172+
public static Aggression fromOrdinal(int ordinal) {
173+
for (Aggression aggression : values()) {
174+
if (aggression.ordinal() == ordinal) {
175+
return aggression;
176+
}
177+
}
292178

293-
public static Aggression parseFromInt(final int aggression) {
294-
return switch (aggression) {
295-
case 0 -> NONE;
296-
// Minor Characteristics
297-
case 1 -> BOLD;
298-
case 2 -> AGGRESSIVE;
299-
case 3 -> ASSERTIVE;
300-
case 4 -> BELLIGERENT;
301-
case 5 -> BRASH;
302-
case 6 -> CONFIDENT;
303-
case 7 -> COURAGEOUS;
304-
case 8 -> DARING;
305-
case 9 -> DECISIVE;
306-
case 10 -> DETERMINED;
307-
case 11 -> DOMINEERING;
308-
case 12 -> FEARLESS;
309-
case 13 -> HOSTILE;
310-
case 14 -> HOT_HEADED;
311-
case 15 -> IMPETUOUS;
312-
case 16 -> IMPULSIVE;
313-
case 17 -> INFLEXIBLE;
314-
case 18 -> INTREPID;
315-
case 19 -> OVERBEARING;
316-
case 20 -> RECKLESS;
317-
case 21 -> RESOLUTE;
318-
case 22 -> STUBBORN;
319-
case 23 -> TENACIOUS;
320-
case 24 -> VIGILANT;
321-
// Major Characteristics
322-
case 25 -> BLOODTHIRSTY;
323-
case 26 -> DIPLOMATIC;
324-
case 27 -> MURDEROUS;
325-
case 28 -> PACIFISTIC;
326-
case 29 -> SADISTIC;
327-
case 30 -> SAVAGE;
328-
default ->
329-
throw new IllegalStateException(
330-
"Unexpected value in mekhq/campaign/personnel/enums/randomEvents/personalities/Aggression.java/parseFromInt: "
331-
+ aggression);
332-
};
179+
final MMLogger logger = MMLogger.create(Aggression.class);
180+
logger.error(String.format("Unknown Aggression ordinal: %s - returning NONE.", ordinal));
181+
182+
return NONE;
333183
}
334184

335185
@Override

0 commit comments

Comments
 (0)