From e1daee0a1f819c08856887a95b94f9f5a7caf118 Mon Sep 17 00:00:00 2001 From: austin Date: Sun, 5 Jan 2025 16:31:24 -0500 Subject: [PATCH] Add simulation defn files --- data/semantic/sent_func/greetings.txt | 3 + data/sim/creature/elf.json | 5 ++ data/sim/creature/human.json | 5 ++ data/sim/location/building.json | 10 +++ data/sim/location/loc_def.json | 8 +++ data/sim/region/region_def.json | 12 ++++ src/main/java/org/studiorailgun/Globals.java | 9 +++ .../evaluators/greet/GreetingEval.java | 2 +- .../character/vis/CharacterAppearance.java | 13 +++- .../org/studiorailgun/sim/config/Config.java | 57 ++++++++++++++++ .../sim/config/creature/CreatureDef.java | 50 ++++++++++++++ .../config/creature/CreatureDefManager.java | 58 +++++++++++++++++ .../sim/config/space/LocationDefinition.java | 18 +++++ .../config/space/LocationDefinitionFile.java | 25 +++++++ .../space/LocationDefinitionManager.java | 65 +++++++++++++++++++ .../config/space/RegionDefinitionFile.java | 48 ++++++++++++++ .../config/space/RegionDefinitionManager.java | 63 ++++++++++++++++++ .../sim/space/gen/RegionGenerator.java | 24 +++++++ 18 files changed, 472 insertions(+), 3 deletions(-) create mode 100644 data/semantic/sent_func/greetings.txt create mode 100644 data/sim/creature/elf.json create mode 100644 data/sim/creature/human.json create mode 100644 data/sim/location/building.json create mode 100644 data/sim/location/loc_def.json create mode 100644 data/sim/region/region_def.json create mode 100644 src/main/java/org/studiorailgun/sim/config/Config.java create mode 100644 src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java create mode 100644 src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java create mode 100644 src/main/java/org/studiorailgun/sim/config/space/LocationDefinition.java create mode 100644 src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionFile.java create mode 100644 src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionManager.java create mode 100644 src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionFile.java create mode 100644 src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionManager.java create mode 100644 src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java diff --git a/data/semantic/sent_func/greetings.txt b/data/semantic/sent_func/greetings.txt new file mode 100644 index 0000000..83fa01b --- /dev/null +++ b/data/semantic/sent_func/greetings.txt @@ -0,0 +1,3 @@ +Hello +Hi +Howdy \ No newline at end of file diff --git a/data/sim/creature/elf.json b/data/sim/creature/elf.json new file mode 100644 index 0000000..bd38d40 --- /dev/null +++ b/data/sim/creature/elf.json @@ -0,0 +1,5 @@ +{ + "name" : "elf", + "singular" : "elf", + "plural" : "elves" +} \ No newline at end of file diff --git a/data/sim/creature/human.json b/data/sim/creature/human.json new file mode 100644 index 0000000..9a71238 --- /dev/null +++ b/data/sim/creature/human.json @@ -0,0 +1,5 @@ +{ + "name" : "human", + "singular" : "human", + "plural" : "humans" +} \ No newline at end of file diff --git a/data/sim/location/building.json b/data/sim/location/building.json new file mode 100644 index 0000000..cd1c324 --- /dev/null +++ b/data/sim/location/building.json @@ -0,0 +1,10 @@ +{ + "locations" : [ + { + "name" : "Entrance" + } + ], + "dependencies" : [ + + ] +} \ No newline at end of file diff --git a/data/sim/location/loc_def.json b/data/sim/location/loc_def.json new file mode 100644 index 0000000..4bab260 --- /dev/null +++ b/data/sim/location/loc_def.json @@ -0,0 +1,8 @@ +{ + "locations" : [ + + ], + "dependencies" : [ + "./data/sim/location/building.json" + ] +} \ No newline at end of file diff --git a/data/sim/region/region_def.json b/data/sim/region/region_def.json new file mode 100644 index 0000000..d8c1f89 --- /dev/null +++ b/data/sim/region/region_def.json @@ -0,0 +1,12 @@ +{ + "name" : "world", + "childrenMandatory" : [ + + ], + "childrenOptional" : [ + + ], + "dependencies" : [ + + ] +} \ No newline at end of file diff --git a/src/main/java/org/studiorailgun/Globals.java b/src/main/java/org/studiorailgun/Globals.java index 38d4d0a..07423af 100644 --- a/src/main/java/org/studiorailgun/Globals.java +++ b/src/main/java/org/studiorailgun/Globals.java @@ -9,6 +9,7 @@ import org.studiorailgun.ai.knowledge.CSVExport; import org.studiorailgun.ai.knowledge.KnowledgeWeb; import org.studiorailgun.sim.space.World; import org.studiorailgun.sim.character.Character; +import org.studiorailgun.sim.config.Config; /** * Global variables @@ -35,6 +36,11 @@ public class Globals { */ public static Character playerCharacter; + /** + * The simulation config + */ + public static Config config; + /** * Initializes the knowledge web */ @@ -55,6 +61,9 @@ public class Globals { //init convo Globals.conversation = Conversation.parse(Globals.web); + + //load simulation config + Globals.config = Config.init(); } } diff --git a/src/main/java/org/studiorailgun/ai/conversation/evaluators/greet/GreetingEval.java b/src/main/java/org/studiorailgun/ai/conversation/evaluators/greet/GreetingEval.java index 3930aec..2bc2d73 100644 --- a/src/main/java/org/studiorailgun/ai/conversation/evaluators/greet/GreetingEval.java +++ b/src/main/java/org/studiorailgun/ai/conversation/evaluators/greet/GreetingEval.java @@ -25,7 +25,7 @@ public class GreetingEval { */ public static void init(){ try { - greetingStrings = Files.readAllLines(new File("./data/sentence_function/greetings.txt").toPath()); + greetingStrings = Files.readAllLines(new File("./data/semantic/sent_func/greetings.txt").toPath()); } catch (IOException e) { e.printStackTrace(); } 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 5069a02..c7b7b95 100644 --- a/src/main/java/org/studiorailgun/sim/character/vis/CharacterAppearance.java +++ b/src/main/java/org/studiorailgun/sim/character/vis/CharacterAppearance.java @@ -20,6 +20,11 @@ public class CharacterAppearance { */ CharaHead head; + /** + * The race of the character + */ + String race; + /** * Gets the height of the character * @return The height of the character @@ -68,8 +73,12 @@ public class CharacterAppearance { this.head = head; } - + public String getRace(){ + return race; + } - + public void setRace(String race){ + this.race = race; + } } diff --git a/src/main/java/org/studiorailgun/sim/config/Config.java b/src/main/java/org/studiorailgun/sim/config/Config.java new file mode 100644 index 0000000..88d63f6 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/Config.java @@ -0,0 +1,57 @@ +package org.studiorailgun.sim.config; + +import org.studiorailgun.sim.config.creature.CreatureDefManager; +import org.studiorailgun.sim.config.space.LocationDefinitionManager; +import org.studiorailgun.sim.config.space.RegionDefinitionManager; + +/** + * Config data for the simulator + */ +public class Config { + + /** + * Manages the creature definitions + */ + CreatureDefManager creatureDefManager; + + /** + * Manages the location definitions + */ + LocationDefinitionManager locationDefinitionManager; + + /** + * Manages the region definitions + */ + RegionDefinitionManager regionDefinitionManager; + + /** + * Initializes the config object + * @return The config object + */ + public static Config init(){ + Config rVal = new Config(); + + + //load sim data + rVal.regionDefinitionManager = RegionDefinitionManager.loadManager(); + rVal.locationDefinitionManager = LocationDefinitionManager.loadManager(); + rVal.creatureDefManager = CreatureDefManager.loadManager(); + + return rVal; + } + + public CreatureDefManager getCreatureDefManager() { + return creatureDefManager; + } + + public LocationDefinitionManager getLocationDefinitionManager() { + return locationDefinitionManager; + } + + public RegionDefinitionManager getRegionDefinitionManager() { + return regionDefinitionManager; + } + + + +} diff --git a/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java new file mode 100644 index 0000000..55e83c1 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java @@ -0,0 +1,50 @@ +package org.studiorailgun.sim.config.creature; + +/** + * Defines a creature + */ +public class CreatureDef { + + /** + * The name of the creature type + */ + String name; + + /** + * The singular word for this type of creature + */ + String singular; + + /** + * The plural word for this type of creature + */ + String plural; + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSingular() { + return singular; + } + + public void setSingular(String singular) { + this.singular = singular; + } + + public String getPlural() { + return plural; + } + + public void setPlural(String plural) { + this.plural = plural; + } + + + +} diff --git a/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java new file mode 100644 index 0000000..151275c --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java @@ -0,0 +1,58 @@ +package org.studiorailgun.sim.config.creature; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.studiorailgun.FileUtils; + +/** + * Manages all the creature definitions + */ +public class CreatureDefManager { + + /** + * Path to the root folder + */ + static final String ROOT_FOLDER_PATH = "./data/sim/creature"; + + /** + * Map of creature definition name -> creature definition + */ + Map definitions = new HashMap(); + + /** + * Loads the location def manager + * @return The location def manager + */ + public static CreatureDefManager loadManager(){ + CreatureDefManager rVal = new CreatureDefManager(); + + File dir = new File(ROOT_FOLDER_PATH); + for(File defFile : dir.listFiles()){ + CreatureDef defn = FileUtils.loadObjectFromFile(defFile, CreatureDef.class); + rVal.addDefinition(defn); + } + + return rVal; + } + + /** + * Adds a location definition to the manager + * @param file + */ + public void addDefinition(CreatureDef file){ + definitions.put(file.getName(), file); + } + + /** + * Gets the location file by its name + * @param name The name of the location + * @return The definition if it exists, null otherwise + */ + public CreatureDef getDefinition(String name){ + return definitions.get(name); + } + + +} diff --git a/src/main/java/org/studiorailgun/sim/config/space/LocationDefinition.java b/src/main/java/org/studiorailgun/sim/config/space/LocationDefinition.java new file mode 100644 index 0000000..6cc250b --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/space/LocationDefinition.java @@ -0,0 +1,18 @@ +package org.studiorailgun.sim.config.space; + +/** + * Defines a location + */ +public class LocationDefinition { + + /** + * The name of the location definition + */ + String name; + + public String getName() { + return name; + } + + +} diff --git a/src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionFile.java b/src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionFile.java new file mode 100644 index 0000000..80b5301 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionFile.java @@ -0,0 +1,25 @@ +package org.studiorailgun.sim.config.space; + +import java.util.List; + +public class LocationDefinitionFile { + + /** + * The list of locations + */ + List locations; + + /** + * The location files that this file depends on + */ + List dependencies; + + public List getDependencies() { + return dependencies; + } + + public List getLocations() { + return locations; + } + +} diff --git a/src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionManager.java b/src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionManager.java new file mode 100644 index 0000000..a9aeda0 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/space/LocationDefinitionManager.java @@ -0,0 +1,65 @@ +package org.studiorailgun.sim.config.space; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.studiorailgun.FileUtils; + +/** + * Manages the location definitions + */ +public class LocationDefinitionManager { + + /** + * Path to the root file + */ + static final String ROOT_FILE_PATH = "./data/sim/location/loc_def.json"; + + /** + * The definitions + */ + Map definitions = new HashMap(); + + /** + * Loads the location def manager + * @return The location def manager + */ + public static LocationDefinitionManager loadManager(){ + LocationDefinitionManager rVal = new LocationDefinitionManager(); + + LocationDefinitionManager.recursivelyParse(rVal, ROOT_FILE_PATH); + + return rVal; + } + + /** + * Recursively parses for location definition files + * @param manager The manager + * @param path The current root path + */ + private static void recursivelyParse(LocationDefinitionManager manager, String path){ + LocationDefinitionFile defFile = FileUtils.loadObjectFromFile(new File(path), LocationDefinitionFile.class); + for(LocationDefinition def : defFile.getLocations()){ + manager.addDefinition(def); + } + } + + /** + * Adds a location definition to the manager + * @param file + */ + public void addDefinition(LocationDefinition file){ + definitions.put(file.getName(), file); + } + + /** + * Gets the location file by its name + * @param name The name of the location + * @return The definition if it exists, null otherwise + */ + public LocationDefinition getDefinition(String name){ + return definitions.get(name); + } + +} diff --git a/src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionFile.java b/src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionFile.java new file mode 100644 index 0000000..45ddfa9 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionFile.java @@ -0,0 +1,48 @@ +package org.studiorailgun.sim.config.space; + +import java.util.List; + +/** + * Defines a region type + */ +public class RegionDefinitionFile { + + /** + * The name of the region definition + */ + String name; + + /** + * The child regions which are mandatory for this region type + */ + List childrenMandatory; + + /** + * The child regions which are optional for this region type + */ + List childrenOptional; + + /** + * The region files that this file depends on + */ + List dependencies; + + public String getName() { + return name; + } + + public List getChildrenMandatory() { + return childrenMandatory; + } + + public List getChildrenOptional() { + return childrenOptional; + } + + public List getDependencies() { + return dependencies; + } + + + +} diff --git a/src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionManager.java b/src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionManager.java new file mode 100644 index 0000000..eb40cb8 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/config/space/RegionDefinitionManager.java @@ -0,0 +1,63 @@ +package org.studiorailgun.sim.config.space; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.studiorailgun.FileUtils; + +/** + * Manages the region definitions + */ +public class RegionDefinitionManager { + + /** + * Path to the root file + */ + static final String ROOT_FILE_PATH = "./data/sim/region/region_def.json"; + + /** + * The definitions + */ + Map definitions = new HashMap(); + + /** + * Loads the region def manager + * @return The region def manager + */ + public static RegionDefinitionManager loadManager(){ + RegionDefinitionManager rVal = new RegionDefinitionManager(); + + RegionDefinitionManager.recursivelyParse(rVal, ROOT_FILE_PATH); + + return rVal; + } + + /** + * Recursively parses for region definition files + * @param manager The manager + * @param path The current root path + */ + private static void recursivelyParse(RegionDefinitionManager manager, String path){ + RegionDefinitionFile def = FileUtils.loadObjectFromFile(new File(path), RegionDefinitionFile.class); + manager.addDefinition(def); + } + + /** + * Adds a region definition to the manager + * @param file + */ + public void addDefinition(RegionDefinitionFile file){ + definitions.put(file.getName(), file); + } + + /** + * Gets the region file by its name + * @param name The name of the region + * @return The definition if it exists, null otherwise + */ + public RegionDefinitionFile getDefinition(String name){ + return definitions.get(name); + } + +} diff --git a/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java b/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java new file mode 100644 index 0000000..27aec4f --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java @@ -0,0 +1,24 @@ +package org.studiorailgun.sim.space.gen; + +import org.studiorailgun.Globals; +import org.studiorailgun.sim.config.space.RegionDefinitionFile; +import org.studiorailgun.sim.space.Region; + +/** + * Generates a region + */ +public class RegionGenerator { + + /** + * Generates a region + * @param type The type of the region + * @return The region + */ + public static Region generate(String type){ + Region rVal = new Region(); + RegionDefinitionFile def = Globals.config.getRegionDefinitionManager().getDefinition(type); + + return rVal; + } + +}