From 01559b9283ab9ac09dd1d76188718ff529a8cd0a Mon Sep 17 00:00:00 2001 From: austin Date: Mon, 6 Jan 2025 12:31:18 -0500 Subject: [PATCH] work on describing things --- data/sim/region/continent.json | 3 +- .../sim/character/gen/CharacterGenerator.java | 41 +++++++++ .../character/vis/CharacterAppearance.java | 17 ++++ .../org/studiorailgun/sim/space/Location.java | 9 +- .../sim/space/gen/RegionGenerator.java | 11 ++- .../sim/space/gen/WorldGenerator.java | 4 +- .../sim/writing/GroupDescriber.java | 53 +++++++++++ .../sim/writing/NumberWordizer.java | 91 +++++++++++++++++++ 8 files changed, 220 insertions(+), 9 deletions(-) create mode 100644 src/main/java/org/studiorailgun/sim/writing/GroupDescriber.java create mode 100644 src/main/java/org/studiorailgun/sim/writing/NumberWordizer.java diff --git a/data/sim/region/continent.json b/data/sim/region/continent.json index 2a4b1cb..4f85d18 100644 --- a/data/sim/region/continent.json +++ b/data/sim/region/continent.json @@ -1,10 +1,9 @@ { "name" : "continent", "childrenMandatory" : [ - + "plains" ], "childrenOptional" : [ - "plains" ], "dependencies" : [ "./data/sim/region/wilderness/wilderness.json", diff --git a/src/main/java/org/studiorailgun/sim/character/gen/CharacterGenerator.java b/src/main/java/org/studiorailgun/sim/character/gen/CharacterGenerator.java index 209beb5..eb63217 100644 --- a/src/main/java/org/studiorailgun/sim/character/gen/CharacterGenerator.java +++ b/src/main/java/org/studiorailgun/sim/character/gen/CharacterGenerator.java @@ -1,6 +1,9 @@ package org.studiorailgun.sim.character.gen; import org.studiorailgun.sim.character.Character; +import org.studiorailgun.sim.character.emotion.EmotionData; +import org.studiorailgun.sim.character.needs.NeedsHierarchy; +import org.studiorailgun.sim.character.vis.CharacterAppearance; /** * Generates a character @@ -13,8 +16,46 @@ public class CharacterGenerator { */ public static Character generateCharacter(){ Character rVal = new Character(); + + CharacterGenerator.generateAppearance(rVal); + CharacterGenerator.generateEmotions(rVal); + CharacterGenerator.generateNeedsHierarchy(rVal); + rVal.setLocationId(Character.LOCATION_UNASSIGNED); + + return rVal; } + /** + * Generates the appearance data for the character + * @param character The character + */ + private static void generateAppearance(Character character){ + CharacterAppearance appearance = new CharacterAppearance(); + appearance.setParent(character); + + appearance.setRace("human"); + + character.setAppearance(appearance); + } + + /** + * Generates the emotion data for the character + * @param character The character + */ + private static void generateEmotions(Character character){ + EmotionData emotions = new EmotionData(); + character.setEmotions(emotions); + } + + /** + * Generates the needs data for the character + * @param character The character + */ + private static void generateNeedsHierarchy(Character character){ + NeedsHierarchy needs = new NeedsHierarchy(); + character.setNeeds(needs); + } + } diff --git a/src/main/java/org/studiorailgun/sim/character/vis/CharacterAppearance.java b/src/main/java/org/studiorailgun/sim/character/vis/CharacterAppearance.java index c7b7b95..ea24cbc 100644 --- a/src/main/java/org/studiorailgun/sim/character/vis/CharacterAppearance.java +++ b/src/main/java/org/studiorailgun/sim/character/vis/CharacterAppearance.java @@ -1,5 +1,7 @@ package org.studiorailgun.sim.character.vis; +import org.studiorailgun.sim.character.Character; + /** * Container for the appearance of a character */ @@ -25,6 +27,11 @@ public class CharacterAppearance { */ String race; + /** + * The parent character + */ + Character parent; + /** * Gets the height of the character * @return The height of the character @@ -81,4 +88,14 @@ public class CharacterAppearance { this.race = race; } + public Character getParent() { + return parent; + } + + public void setParent(Character parent) { + this.parent = parent; + } + + + } diff --git a/src/main/java/org/studiorailgun/sim/space/Location.java b/src/main/java/org/studiorailgun/sim/space/Location.java index e3a11ba..85c8d43 100644 --- a/src/main/java/org/studiorailgun/sim/space/Location.java +++ b/src/main/java/org/studiorailgun/sim/space/Location.java @@ -5,6 +5,7 @@ import java.util.List; import org.studiorailgun.sim.character.Character; import org.studiorailgun.sim.item.Item; +import org.studiorailgun.sim.writing.GroupDescriber; /** * An area contains characters, items, etc. @@ -38,8 +39,12 @@ public class Location { */ public void describe(){ System.out.println("You are in a " + this.type); - System.out.println("There are " + chars.size() + " people in the " + this.type); - System.out.println("There are " + items.size() + " items in the " + this.type); + if(chars.size() > 1){ + GroupDescriber.summarize(chars); + } + if(items.size() > 0){ + System.out.println("There are " + items.size() + " items in the " + this.type); + } } /** diff --git a/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java b/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java index 422613b..f5543f3 100644 --- a/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java +++ b/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java @@ -19,9 +19,14 @@ public class RegionGenerator { RegionDefinitionFile def = Globals.config.getRegionDefinitionManager().getDefinition(type); //generate all mandatory child region types - for(String childType : def.getChildrenMandatory()){ - Region child = RegionGenerator.generate(childType); - rVal.addChild(child); + if(def.getChildrenMandatory() != null){ + for(String childType : def.getChildrenMandatory()){ + Region child = RegionGenerator.generate(childType); + rVal.addChild(child); + } + } else if(def.getDiscoverables() != null){ + String locType = def.getDiscoverables().get(0); + rVal.addLocation(LocationGenerator.generate(locType)); } return rVal; diff --git a/src/main/java/org/studiorailgun/sim/space/gen/WorldGenerator.java b/src/main/java/org/studiorailgun/sim/space/gen/WorldGenerator.java index 9a261be..b051fbd 100644 --- a/src/main/java/org/studiorailgun/sim/space/gen/WorldGenerator.java +++ b/src/main/java/org/studiorailgun/sim/space/gen/WorldGenerator.java @@ -25,7 +25,7 @@ public class WorldGenerator { Globals.world = rVal; //generate the regions - rVal.setRegion(TownGenerator.generateTown()); + rVal.setRegion(RegionGenerator.generate("continent")); //generate the govs WorldGenerator.generateGovernments(rVal); @@ -58,7 +58,7 @@ public class WorldGenerator { */ private static void generateGovernments(World world){ for(CreatureDef creatureDef : Globals.config.getCreatureDefManager().getDefinitions()){ - if(creatureDef.getCivBuilder()){ + if(creatureDef.getCivBuilder() != null && creatureDef.getCivBuilder()){ Government creatureGov = new Government("kingdom", "Kingdom of the " + creatureDef.getName()); world.addGovernment(creatureGov); } diff --git a/src/main/java/org/studiorailgun/sim/writing/GroupDescriber.java b/src/main/java/org/studiorailgun/sim/writing/GroupDescriber.java new file mode 100644 index 0000000..8b27561 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/writing/GroupDescriber.java @@ -0,0 +1,53 @@ +package org.studiorailgun.sim.writing; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.studiorailgun.Globals; +import org.studiorailgun.sim.character.Character; +import org.studiorailgun.sim.config.creature.CreatureDef; + +/** + * Describes a group of characters + */ +public class GroupDescriber { + + /** + * Describes a group of characters + * @param characters The characters + */ + public static void summarize(List characters){ + Map raceCountMap = new HashMap(); + for(Character currentChar : characters){ + String race = currentChar.getAppearance().getRace(); + if(raceCountMap.containsKey(race)){ + raceCountMap.put(race, raceCountMap.get(race) + 1); + } else { + raceCountMap.put(race, 1); + } + } + for(Entry entry : raceCountMap.entrySet()){ + String race = entry.getKey(); + int count = entry.getValue(); + CreatureDef creatureType = Globals.config.getCreatureDefManager().getDefinition(race); + if(count > 1){ + String message = "There are " + NumberWordizer.convert(count) + " " + creatureType.getPlural() + "."; + System.out.println(message); + } else { + String message = "There is one " + creatureType.getSingular() + "."; + System.out.println(message); + } + } + } + + /** + * Describes a group of characters + * @param characters The group of characters + */ + public static void describe(List characters){ + + } + +} diff --git a/src/main/java/org/studiorailgun/sim/writing/NumberWordizer.java b/src/main/java/org/studiorailgun/sim/writing/NumberWordizer.java new file mode 100644 index 0000000..50a4400 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/writing/NumberWordizer.java @@ -0,0 +1,91 @@ +package org.studiorailgun.sim.writing; + +/** + * Converts a number to words + */ +public class NumberWordizer { + + /** + * Converts a number to a string of words + * @param num The number + * @return The string of words + */ + public static String convert(int num){ + if(num == 0){ + return "zero"; + } + if(num < 10){ + switch(num){ + case 1: { + return "one"; + } + case 2: { + return "two"; + } + case 3: { + return "three"; + } + case 4: { + return "four"; + } + case 5: { + return "five"; + } + case 6: { + return "six"; + } + case 7: { + return "seven"; + } + case 8: { + return "eight"; + } + case 9: { + return "nine"; + } + } + } + throw new Error("Unsupported number " + num); + } + + /** + * Gets the tens place word + * @param num The number + * @return The tens place word + */ + public static String getTensPlace(int num){ + int divResult = num / 10; + switch(divResult){ + case 2: { + return "twenty"; + } + case 3: { + return "thirty"; + } + case 4: { + return "fourty"; + } + case 5: { + return "fifty"; + } + case 6: { + return "sixty"; + } + case 7: { + return "seventy"; + } + case 8: { + return "eighty"; + } + case 9: { + return "ninety"; + } + case 1: + case 0: + default: { + throw new Error("Unhandled value!"); + } + } + } + +}