Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
ece7651
Added shields
softwaremagico Oct 14, 2018
127d684
Renamed class
softwaremagico Oct 15, 2018
aa4003b
More txt export logic added
softwaremagico Oct 16, 2018
9d968f7
More txt export logic added
softwaremagico Oct 16, 2018
52f959a
Added random profiles
softwaremagico Oct 15, 2018
e1d5678
Basic TXT export
softwaremagico Oct 15, 2018
2d32ee8
basic character text representation finished
softwaremagico Oct 18, 2018
f85c090
Added test to txt conversor
softwaremagico Oct 18, 2018
3c769e0
Fixed some random irregularities
softwaremagico Oct 18, 2018
e932288
Added armours
softwaremagico Oct 19, 2018
ec2d68f
Fixed sorted elements in TXT char
softwaremagico Oct 20, 2018
8e49863
Generalized random definitions
softwaremagico Oct 20, 2018
54cbcce
Generalized some random controls
softwaremagico Oct 20, 2018
ab91171
Updated weapons probability
softwaremagico Oct 20, 2018
ec7058b
Sorting skills by specialization
softwaremagico Oct 21, 2018
26dfaa7
Fixed test
softwaremagico Oct 21, 2018
f715777
Added json serializers to increase json performance
softwaremagico Oct 22, 2018
a177e07
Fixed NPE
softwaremagico Oct 22, 2018
29c4936
Searching specialization
softwaremagico Oct 22, 2018
374a123
Added more json serializers to increase json performance
softwaremagico Oct 23, 2018
52e8958
Defining armour random rules
softwaremagico Oct 24, 2018
dc84970
Defining shield random rules
softwaremagico Oct 26, 2018
f6433f1
Defining armour specifications
softwaremagico Oct 26, 2018
f769d5e
Refactorized random selections
softwaremagico Oct 28, 2018
5f1c0ad
Fixed tests
softwaremagico Oct 29, 2018
1b244a6
Fixed tests
softwaremagico Nov 2, 2018
f466d96
Fixed tests
softwaremagico Nov 2, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Generalized some random controls
  • Loading branch information
softwaremagico committed Oct 20, 2018
commit 54cbcce5bf9a9f77c84f9960c3b6933415f51dcb
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,30 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.StringTokenizer;

import com.softwaremagico.tm.character.factions.FactionGroup;
import com.softwaremagico.tm.character.factions.FactionsFactory;
import com.softwaremagico.tm.character.race.RaceFactory;
import com.softwaremagico.tm.language.ITranslator;
import com.softwaremagico.tm.language.Language;
import com.softwaremagico.tm.log.MachineLog;
import com.softwaremagico.tm.random.definition.RandomProbabilityDefinition;

public abstract class XmlFactory<T extends Element<T>> {
protected Map<String, List<T>> elements = new HashMap<>();

private final static String RANDOM = "random";
private final static String ELEMENT_PROBABILITY_MULTIPLIER = "probabilityMultiplier";
private final static String RESTRICTED_FACTIONS = "restrictedFactions";
private final static String MIN_TECH_LEVEL = "minTechLevel";
private final static String MAX_TECH_LEVEL = "maxTechLevel";
private final static String RECOMMENDED_FACTIONS = "recommendedFactions";
private final static String RECOMMENDED_FACTION_GROUPS = "recommendedFactionGroups";
private final static String RECOMMENDED_RACES = "recommendedRaces";
private final static String GENERAL_PROBABILITY = "generalProbability";
private final static String STATIC_PROBABILITY = "staticProbability";

protected XmlFactory() {
initialize();
}
Expand All @@ -62,11 +78,94 @@ public void clearCache() {
initialize();
}

protected void setRandomConfiguration(Element<?> element, ITranslator translator, String language) throws InvalidXmlElementException {
// Is an element restricted to a faction?
String restrictedFactionsId = translator.getNodeValue(element.getId(), RANDOM, RESTRICTED_FACTIONS);
if (restrictedFactionsId != null) {
StringTokenizer factionTokenizer = new StringTokenizer(restrictedFactionsId, ",");
while (factionTokenizer.hasMoreTokens()) {
element.getRandomDefinition().getRestrictedFactions()
.add(FactionsFactory.getInstance().getElement(factionTokenizer.nextToken().trim(), language));
}
}

try {
String elementProbability = getTranslator().getNodeValue(element.getId(), RANDOM, ELEMENT_PROBABILITY_MULTIPLIER);
if (elementProbability != null) {
element.getRandomDefinition().setProbabilityMultiplier(Double.parseDouble(elementProbability));
} else {
element.getRandomDefinition().setProbabilityMultiplier(1d);
}
} catch (NumberFormatException nfe) {
throw new InvalidXmlElementException("Invalid number value for element probability in '" + element.getId() + "'.");
}

try {
String minTechLevel = translator.getNodeValue(element.getId(), RANDOM, MIN_TECH_LEVEL);
if (minTechLevel != null) {
element.getRandomDefinition().setMinimumTechLevel(Integer.parseInt(minTechLevel));
}
} catch (NumberFormatException nfe) {
throw new InvalidXmlElementException("Invalid number value for techlevel in element '" + element.getId() + "'.");
}

try {
String maxTechLevel = translator.getNodeValue(element.getId(), RANDOM, MAX_TECH_LEVEL);
if (maxTechLevel != null) {
element.getRandomDefinition().setMaximumTechLevel(Integer.parseInt(maxTechLevel));
}
} catch (NumberFormatException nfe) {
throw new InvalidXmlElementException("Invalid number value for max techlevel in element '" + element.getId() + "'.");
}

String recommendedFactionGroups = translator.getNodeValue(element.getId(), RANDOM, RECOMMENDED_FACTION_GROUPS);
if (recommendedFactionGroups != null) {
StringTokenizer recommendedFactionGroupsOfSkill = new StringTokenizer(recommendedFactionGroups, ",");
while (recommendedFactionGroupsOfSkill.hasMoreTokens()) {
element.getRandomDefinition().addRecommendedFactionGroup(FactionGroup.get(recommendedFactionGroupsOfSkill.nextToken().trim()));
}
}

String recommendedFactions = translator.getNodeValue(element.getId(), RANDOM, RECOMMENDED_FACTIONS);
if (recommendedFactions != null) {
StringTokenizer recommendedFactionsOfSkill = new StringTokenizer(recommendedFactions, ",");
while (recommendedFactionsOfSkill.hasMoreTokens()) {
element.getRandomDefinition().addRecommendedFaction(
FactionsFactory.getInstance().getElement(recommendedFactionsOfSkill.nextToken().trim(), language));
}
}

String recommendedRaces = translator.getNodeValue(element.getId(), RANDOM, RECOMMENDED_RACES);
if (recommendedRaces != null) {
StringTokenizer recommendedRacesOfSkill = new StringTokenizer(recommendedRaces, ",");
while (recommendedRacesOfSkill.hasMoreTokens()) {
element.getRandomDefinition().addRecommendedRace(RaceFactory.getInstance().getElement(recommendedRacesOfSkill.nextToken().trim(), language));
}
}

String generalProbability = translator.getNodeValue(element.getId(), RANDOM, GENERAL_PROBABILITY);
if (generalProbability != null) {
element.getRandomDefinition().setProbability(RandomProbabilityDefinition.get(generalProbability));
}

try {
String staticProbability = translator.getNodeValue(element.getId(), RANDOM, STATIC_PROBABILITY);
if (staticProbability != null) {
element.getRandomDefinition().setStaticProbability(Integer.parseInt(staticProbability));
} else {
element.getRandomDefinition().setStaticProbability(1);
}
} catch (NumberFormatException nfe) {
throw new InvalidXmlElementException("Invalid number value for element probability in '" + element.getId() + "'.");
}
}

public List<T> getElements(String language) throws InvalidXmlElementException {
if (elements.get(language) == null) {
elements.put(language, new ArrayList<T>());
for (String elementId : getTranslator().getAllTranslatedElements()) {
T element = createElement(getTranslator(), elementId, language);
setRandomConfiguration(element, getTranslator(), language);
if (elements.get(language).contains(element)) {
throw new ElementAlreadyExistsException("Element '" + element + "' already is inserted. Probably the ID is duplicated.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@
import com.softwaremagico.tm.character.values.SpecialValuesFactory;
import com.softwaremagico.tm.log.CostCalculatorLog;
import com.softwaremagico.tm.log.MachineLog;
import com.softwaremagico.tm.txt.CharacterSheet;

public class CharacterPlayer {
private String language;
Expand Down Expand Up @@ -696,6 +697,11 @@ public String toString() {
return super.toString();
}

public String getRepresentation() {
CharacterSheet characterSheet = new CharacterSheet(this);
return characterSheet.toString();
}

public int getStrengthDamangeModification() {
try {
int strength = characteristics.get(CharacteristicName.STRENGTH.getId()).getValue();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

public class Characteristic extends CharacteristicDefinition {
public final static int DEFAULT_INITIAL_VALUE = 3;
public final static int MAX_VALUE = 12;
private int value;

public Characteristic(CharacteristicDefinition characteristicDefinition) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
import com.softwaremagico.tm.character.characteristics.CharacteristicDefinition;
import com.softwaremagico.tm.character.equipment.DamageType;
import com.softwaremagico.tm.character.equipment.Size;
import com.softwaremagico.tm.character.factions.Faction;
import com.softwaremagico.tm.character.skills.SkillDefinition;

public class Weapon extends Element<Weapon> {
Expand All @@ -54,11 +53,9 @@ public class Weapon extends Element<Weapon> {
private final Set<Ammunition> ammunitions;
private final Set<Accessory> accesories;

private final Faction faction;

public Weapon(String id, String name, WeaponType type, String goal, CharacteristicDefinition characteristic, SkillDefinition skill, String damage,
int strength, String range, Integer shots, String rate, int tech, boolean techLevelSpecial, Size size, String special, Set<DamageType> damageTypes,
float cost, Set<Ammunition> ammunitions, Set<Accessory> accesories, Faction faction) {
float cost, Set<Ammunition> ammunitions, Set<Accessory> accesories) {
super(id, name);
this.characteristic = characteristic;
this.skill = skill;
Expand All @@ -76,7 +73,6 @@ public Weapon(String id, String name, WeaponType type, String goal, Characterist
this.damageTypes = damageTypes;
this.cost = cost;
this.ammunitions = ammunitions;
this.faction = faction;
this.accesories = accesories;
}

Expand Down Expand Up @@ -162,10 +158,6 @@ public Set<Ammunition> getAmmunitions() {
return ammunitions;
}

public Faction getFaction() {
return faction;
}

public Set<Accessory> getAccesories() {
return accesories;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,6 @@
import com.softwaremagico.tm.character.equipment.DamageType;
import com.softwaremagico.tm.character.equipment.DamageTypeFactory;
import com.softwaremagico.tm.character.equipment.Size;
import com.softwaremagico.tm.character.factions.Faction;
import com.softwaremagico.tm.character.factions.FactionsFactory;
import com.softwaremagico.tm.character.skills.SkillDefinition;
import com.softwaremagico.tm.character.skills.SkillsDefinitionsFactory;
import com.softwaremagico.tm.language.ITranslator;
Expand All @@ -58,10 +56,6 @@ public class WeaponFactory extends XmlFactory<Weapon> {
private final static String RATE = "rate";
private final static String SIZE = "size";
private final static String COST = "cost";
private final static String FACTION = "faction";

private final static String RANDOM = "random";
private final static String WEAPON_PROBABILITY = "probabilityMultiplier";

private final static String TYPE = "type";
private final static String SPECIAL = "special";
Expand Down Expand Up @@ -254,27 +248,8 @@ protected Weapon createElement(ITranslator translator, String weaponId, String l
}
}

// Is a weapon of a faction?
Faction faction = null;
String factionId = translator.getNodeValue(weaponId, FACTION);
if (factionId != null) {
Faction restrictedFaction = FactionsFactory.getInstance().getElement(factionId, language);
faction = restrictedFaction;
}

weapon = new Weapon(weaponId, name, WeaponType.get(typeName), goal, characteristicDefintion, skill, damage, strength, range, shots, rate, techLevel,
techLevelSpecial, size, special, damageOfWeapon, cost, ammunitions, accessories, faction);

try {
String weaponProbability = translator.getNodeValue(weaponId, RANDOM, WEAPON_PROBABILITY);
if (weaponProbability != null) {
weapon.getRandomDefinition().setProbabilityMultiplier(Double.parseDouble(weaponProbability));
} else {
weapon.getRandomDefinition().setProbabilityMultiplier(1d);
}
} catch (NumberFormatException nfe) {
throw new InvalidWeaponException("Invalid number value for weapon probability in '" + weaponId + "'.");
}
techLevelSpecial, size, special, damageOfWeapon, cost, ammunitions, accessories);

return weapon;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@

public class RaceFactory extends XmlFactory<Race> {
private final static ITranslator translatorRace = LanguagePool.getTranslator("races.xml");
private final static String RANDOM = "random";
private final static String RACE_PROBABILITY = "probability";

private final static String NAME = "name";
private final static String MAX_VALUE = "maximumValue";
Expand Down Expand Up @@ -70,8 +68,7 @@ protected ITranslator getTranslator() {
}

@Override
protected Race createElement(ITranslator translator, String raceId, String language)
throws InvalidXmlElementException {
protected Race createElement(ITranslator translator, String raceId, String language) throws InvalidXmlElementException {
Race race = null;
try {
String name = translator.getNodeValue(raceId, NAME, language);
Expand All @@ -96,8 +93,7 @@ protected Race createElement(ITranslator translator, String raceId, String langu
race.setValue(characteristic, Integer.parseInt(value));
}
} catch (NumberFormatException nfe) {
throw new InvalidRaceException("Invalid value for characteristic '" + characteristic.getId()
+ "' in race '" + raceId + "'.");
throw new InvalidRaceException("Invalid value for characteristic '" + characteristic.getId() + "' in race '" + raceId + "'.");
}
}
try {
Expand All @@ -124,16 +120,7 @@ protected Race createElement(ITranslator translator, String raceId, String langu
} catch (Exception e) {
throw new InvalidRaceException("Invalid hubris value in race '" + raceId + "'.");
}
try {
String raceProbability = translator.getNodeValue(raceId, RANDOM, RACE_PROBABILITY);
if (raceProbability != null) {
race.getRandomDefinition().setStaticProbability(Integer.parseInt(raceProbability));
} else {
race.getRandomDefinition().setStaticProbability(1);
}
} catch (NumberFormatException nfe) {
throw new InvalidRaceException("Invalid number value for race probability in '" + raceId + "'.");
}

return race;

}
Expand Down
Loading