diff --git a/data/sim/emotions.json b/data/sim/ai/emotions.json similarity index 100% rename from data/sim/emotions.json rename to data/sim/ai/emotions.json diff --git a/data/sim/region/town/town.json b/data/sim/region/town/town.json index 4139043..57e46af 100644 --- a/data/sim/region/town/town.json +++ b/data/sim/region/town/town.json @@ -1,5 +1,5 @@ { - "name" : "continent", + "name" : "town(human)", "childrenMandatory" : [ ], diff --git a/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java index 55e83c1..cd950c0 100644 --- a/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java +++ b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDef.java @@ -20,6 +20,11 @@ public class CreatureDef { */ String plural; + /** + * Tracks whether this creature is a civilization builder or not + */ + Boolean civBuilder; + public String getName() { return name; @@ -45,6 +50,14 @@ public class CreatureDef { this.plural = plural; } + public Boolean getCivBuilder() { + return civBuilder; + } + + public void setCivBuilder(Boolean civBuilder) { + this.civBuilder = civBuilder; + } + } diff --git a/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java index 151275c..4849368 100644 --- a/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java +++ b/src/main/java/org/studiorailgun/sim/config/creature/CreatureDefManager.java @@ -1,7 +1,10 @@ package org.studiorailgun.sim.config.creature; import java.io.File; +import java.util.Collection; import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import org.studiorailgun.FileUtils; @@ -21,6 +24,11 @@ public class CreatureDefManager { */ Map definitions = new HashMap(); + /** + * The list of creatures that build civilizations + */ + List civBuilders = new LinkedList(); + /** * Loads the location def manager * @return The location def manager @@ -54,5 +62,14 @@ public class CreatureDefManager { return definitions.get(name); } + /** + * Gets the collection of all creature definitions + * @return The collection of all creature definitions + */ + public Collection getDefinitions(){ + return definitions.values(); + } + + } diff --git a/src/main/java/org/studiorailgun/sim/org/Government.java b/src/main/java/org/studiorailgun/sim/org/Government.java new file mode 100644 index 0000000..2e19010 --- /dev/null +++ b/src/main/java/org/studiorailgun/sim/org/Government.java @@ -0,0 +1,109 @@ +package org.studiorailgun.sim.org; + +import java.util.LinkedList; +import java.util.List; + +import org.studiorailgun.sim.space.Region; + +/** + * A government + */ +public class Government { + + /** + * The list of territories under the leadership of this unit of government + */ + List territories = new LinkedList(); + + /** + * Subdivisions of this government + */ + List subdivision = new LinkedList(); + + /** + * The type of government + */ + String type; + + /** + * The name of the government + */ + String name; + + /** + * Constructor + * @param type The type of government + * @param name The name of the government + */ + public Government(String type, String name){ + this.type = type; + this.name = name; + } + + public List getTerritories() { + return territories; + } + + public void setTerritories(List territories) { + this.territories = territories; + } + + /** + * Adds a region to the territories controlled by this government + * @param region The region + */ + public void addTerritory(Region region){ + this.territories.add(region); + } + + /** + * Removes a region from the territories controlled by this government + * @param region The region + */ + public void removeTerritory(Region region){ + this.territories.remove(region); + } + + public List getSubdivision() { + return subdivision; + } + + public void setSubdivision(List subdivision) { + this.subdivision = subdivision; + } + + /** + * Adds a subdivision to this government + * @param subdivision The subdivision + */ + public void addSubdivision(Government subdivision){ + this.subdivision.add(subdivision); + } + + /** + * Removes a subdivision from this government + * @param subdivision The subdivision + */ + public void removeSubdivision(Government subdivision){ + this.subdivision.remove(subdivision); + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + +} diff --git a/src/main/java/org/studiorailgun/sim/space/World.java b/src/main/java/org/studiorailgun/sim/space/World.java index 384ce4d..a7e4f61 100644 --- a/src/main/java/org/studiorailgun/sim/space/World.java +++ b/src/main/java/org/studiorailgun/sim/space/World.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import org.studiorailgun.sim.character.Character; +import org.studiorailgun.sim.org.Government; /** * Top level spatial container @@ -22,6 +23,11 @@ public class World { */ List characters = new LinkedList(); + /** + * The list of governments + */ + List governments = new LinkedList(); + /** * Map of location id -> location */ @@ -76,6 +82,24 @@ public class World { return this.idLocationMap.get(id); } + public List getGovernments() { + return governments; + } + + public void setGovernments(List governments) { + this.governments = governments; + } + + /** + * Adds a government + * @param gov The government + */ + public void addGovernment(Government gov){ + this.governments.add(gov); + } + + + } 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 27aec4f..422613b 100644 --- a/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java +++ b/src/main/java/org/studiorailgun/sim/space/gen/RegionGenerator.java @@ -18,6 +18,12 @@ public class RegionGenerator { Region rVal = new Region(); 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); + } + 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 7d2dda0..9a261be 100644 --- a/src/main/java/org/studiorailgun/sim/space/gen/WorldGenerator.java +++ b/src/main/java/org/studiorailgun/sim/space/gen/WorldGenerator.java @@ -8,6 +8,8 @@ import org.studiorailgun.sim.space.util.LocationResolver; import org.studiorailgun.Globals; import org.studiorailgun.sim.character.Character; import org.studiorailgun.sim.character.gen.CharacterGenerator; +import org.studiorailgun.sim.config.creature.CreatureDef; +import org.studiorailgun.sim.org.Government; /** * Generates a world @@ -25,6 +27,9 @@ public class WorldGenerator { //generate the regions rVal.setRegion(TownGenerator.generateTown()); + //generate the govs + WorldGenerator.generateGovernments(rVal); + //generate the characters WorldGenerator.generateCharacters(rVal); @@ -47,4 +52,17 @@ public class WorldGenerator { newChar.move(placementDest); } + /** + * Populates the world with governments + * @param world The world + */ + private static void generateGovernments(World world){ + for(CreatureDef creatureDef : Globals.config.getCreatureDefManager().getDefinitions()){ + if(creatureDef.getCivBuilder()){ + Government creatureGov = new Government("kingdom", "Kingdom of the " + creatureDef.getName()); + world.addGovernment(creatureGov); + } + } + } + }