move macro data around
	
		
			
	
		
	
	
		
	
		
			Some checks reported errors
		
		
	
	
		
			
				
	
				studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
				
			
		
		
	
	
				
					
				
			
		
			Some checks reported errors
		
		
	
	studiorailgun/Renderer/pipeline/head Something is wrong with the build of this commit
				
			This commit is contained in:
		
							parent
							
								
									9963c4aa78
								
							
						
					
					
						commit
						6f72167d68
					
				| @ -1707,6 +1707,8 @@ Move character utils classe to macro data | ||||
| Move CharacterService to service package | ||||
| Convert character service to singleton | ||||
| Start moving character goal logic from behavior trees to macro level simulation | ||||
| Goal macro data work | ||||
| Shuffle where macro data is stored | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -87,7 +87,6 @@ import electrosphere.server.entity.poseactor.PoseModel; | ||||
| import electrosphere.server.saves.Save; | ||||
| import electrosphere.server.service.CharacterService; | ||||
| import electrosphere.server.service.StructureScanningService; | ||||
| import electrosphere.server.simulation.MacroSimulation; | ||||
| import electrosphere.server.simulation.MicroSimulation; | ||||
| import electrosphere.util.FileUtils; | ||||
| 
 | ||||
| @ -329,9 +328,6 @@ public class Globals { | ||||
|     //manages all models loaded into memory | ||||
|     public static AssetManager assetManager; | ||||
|      | ||||
|     //macro simulation | ||||
|     public static MacroSimulation macroSimulation; | ||||
|      | ||||
|     //micro simulation | ||||
|     public static MicroSimulation microSimulation; | ||||
|      | ||||
|  | ||||
| @ -219,9 +219,6 @@ public class LoadingUtils { | ||||
|         if(Globals.microSimulation != null){ | ||||
|             Globals.microSimulation.setReady(true); | ||||
|         } | ||||
|         if(Globals.macroSimulation != null){ | ||||
|             Globals.macroSimulation.setReady(true); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | ||||
| @ -63,7 +63,6 @@ public class MainMenuLoading { | ||||
|         Globals.serverSynchronizationManager = null; | ||||
|         Globals.realmManager.reset(); | ||||
|         Globals.realmManager = new RealmManager(); | ||||
|         Globals.macroSimulation = null; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|  | ||||
| @ -42,22 +42,13 @@ public class MainServerFunctions { | ||||
|         MainServerFunctions.simulateServices(); | ||||
| 
 | ||||
|         // | ||||
|         //Micro simulation (ie simulating each scene on the server) | ||||
|         Globals.profiler.beginCpuSample("MainServerFunctions.simulate - Server micro simulation"); | ||||
|         LoggerInterface.loggerEngine.DEBUG_LOOP("Begin server micro simulation"); | ||||
|         //Simulation | ||||
|         Globals.profiler.beginCpuSample("MainServerFunctions.simulate - Realm simulation"); | ||||
|         LoggerInterface.loggerEngine.DEBUG_LOOP("Begin server realm simulation"); | ||||
|         if(Globals.realmManager != null){ | ||||
|             Globals.realmManager.simulate(); | ||||
|         } | ||||
|         Globals.profiler.endCpuSample(); | ||||
|          | ||||
|         // | ||||
|         //Macro simulation (ie simulating the larger world macro data) | ||||
|         Globals.profiler.beginCpuSample("MainServerFunctions.simulate - Server macro simulation"); | ||||
|         LoggerInterface.loggerEngine.DEBUG_LOOP("MainServerFunctions.simulate - Server macro simulation"); | ||||
|         if(Globals.macroSimulation != null && Globals.macroSimulation.isReady()){ | ||||
|             Globals.macroSimulation.simulate(); | ||||
|         } | ||||
|         Globals.profiler.endCpuSample(); | ||||
| 
 | ||||
|         Globals.profiler.endCpuSample(); | ||||
|     } | ||||
|  | ||||
| @ -14,7 +14,7 @@ public class MacroDataExists implements AITreeNode { | ||||
|     @Override | ||||
|     public AITreeNodeResult evaluate(Entity entity, Blackboard blackboard) { | ||||
|         Realm entityRealm = Globals.realmManager.getEntityRealm(entity); | ||||
|         if(entityRealm.getServerContentManager().getMacroData() == null){ | ||||
|         if(entityRealm.getMacroData() == null){ | ||||
|             return AITreeNodeResult.FAILURE; | ||||
|         } | ||||
|         return AITreeNodeResult.SUCCESS; | ||||
|  | ||||
| @ -39,7 +39,7 @@ public class BeginStructureNode implements AITreeNode { | ||||
|         if(!BeginStructureNode.hasStructureTarget(blackboard)){ | ||||
|             //requisite data | ||||
|             Realm realm = Globals.realmManager.getEntityRealm(entity); | ||||
|             MacroData macroData = realm.getServerContentManager().getMacroData(); | ||||
|             MacroData macroData = realm.getMacroData(); | ||||
|             Vector3d position = EntityUtils.getPosition(entity); | ||||
| 
 | ||||
|             //solve where to place | ||||
|  | ||||
| @ -11,6 +11,8 @@ import electrosphere.script.ScriptEngine; | ||||
| import electrosphere.server.datacell.interfaces.DataCellManager; | ||||
| import electrosphere.server.datacell.interfaces.PathfindingManager; | ||||
| import electrosphere.server.entity.ServerContentManager; | ||||
| import electrosphere.server.macro.MacroData; | ||||
| import electrosphere.server.simulation.MacroSimulation; | ||||
| 
 | ||||
| import java.util.HashSet; | ||||
| import java.util.LinkedList; | ||||
| @ -83,7 +85,12 @@ public class Realm { | ||||
|     /** | ||||
|      * The content manager | ||||
|      */ | ||||
|     ServerContentManager serverContentManager; | ||||
|     ServerContentManager serverContentManager;  | ||||
| 
 | ||||
|     /** | ||||
|      * The macro data for the realm | ||||
|      */ | ||||
|     MacroData macroData; | ||||
| 
 | ||||
|     /** | ||||
|      * The instanceId of the scene that was loaded with this realm | ||||
| @ -102,19 +109,22 @@ public class Realm { | ||||
|      * @param chemistryEngine The chemistry system collision engine for the realm | ||||
|      * @param hitboxManager The hitbox manager for the realm | ||||
|      * @param serverContentManager The content manager for the realm | ||||
|      * @param macroData The macro data for the realm (can be null if no macro data is present) | ||||
|      */ | ||||
|     protected Realm( | ||||
|         ServerWorldData serverWorldData, | ||||
|         CollisionEngine collisionEngine, | ||||
|         CollisionEngine chemistryEngine, | ||||
|         HitboxManager hitboxManager, | ||||
|         ServerContentManager serverContentManager | ||||
|         ServerContentManager serverContentManager, | ||||
|         MacroData macroData | ||||
|     ){ | ||||
|         this.serverWorldData = serverWorldData; | ||||
|         this.collisionEngine = collisionEngine; | ||||
|         this.chemistryEngine = chemistryEngine; | ||||
|         this.hitboxManager = hitboxManager; | ||||
|         this.serverContentManager = serverContentManager; | ||||
|         this.macroData = macroData; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
| @ -227,6 +237,7 @@ public class Realm { | ||||
|      */ | ||||
|     protected void simulate(){ | ||||
|         Globals.profiler.beginCpuSample("Realm.simulate"); | ||||
| 
 | ||||
|         // | ||||
|         //simulate bullet physics engine step | ||||
|         if(Globals.RUN_PHYSICS){ | ||||
| @ -235,12 +246,21 @@ public class Realm { | ||||
|             PhysicsEntityUtils.serverRepositionEntities(this,collisionEngine); | ||||
|             chemistryEngine.collide(); | ||||
|         } | ||||
| 
 | ||||
|         // | ||||
|         //hitbox sim | ||||
|         hitboxManager.simulate(); | ||||
| 
 | ||||
|         // | ||||
|         //main simulation | ||||
|         dataCellManager.simulate(); | ||||
| 
 | ||||
|         // | ||||
|         //macro data simulation | ||||
|         if(this.macroData != null){ | ||||
|             MacroSimulation.simulate(this.macroData); | ||||
|         } | ||||
| 
 | ||||
|         // | ||||
|         //clear collidable impulse lists | ||||
|         collisionEngine.clearCollidableImpulseLists(); | ||||
| @ -261,8 +281,8 @@ public class Realm { | ||||
|         dataCellManager.save(saveName); | ||||
|         serverWorldData.getServerTerrainManager().save(saveName); | ||||
|         serverWorldData.getServerBlockManager().save(saveName); | ||||
|         if(serverContentManager.getMacroData() != null){ | ||||
|             serverContentManager.getMacroData().save(saveName); | ||||
|         if(this.macroData != null){ | ||||
|             this.macroData.save(saveName); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
| @ -334,5 +354,13 @@ public class Realm { | ||||
|             }); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the macro data in the realm | ||||
|      * @return | ||||
|      */ | ||||
|     public MacroData getMacroData(){ | ||||
|         return this.macroData; | ||||
|     } | ||||
|      | ||||
| } | ||||
|  | ||||
| @ -66,7 +66,8 @@ public class RealmManager { | ||||
|             new CollisionEngine(), | ||||
|             chemistryEngine, | ||||
|             new HitboxManager(new ServerHitboxResolutionCallback()), | ||||
|             ServerContentManager.createServerContentManager(false, null) | ||||
|             ServerContentManager.createServerContentManager(false, null), | ||||
|             null | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
| @ -88,7 +89,8 @@ public class RealmManager { | ||||
|             collisionEngine, | ||||
|             chemistryEngine, | ||||
|             new HitboxManager(new ServerHitboxResolutionCallback()), | ||||
|             serverContentManager | ||||
|             serverContentManager, | ||||
|             serverContentManager.getMacroData() | ||||
|         ); | ||||
|         //create function classes | ||||
|         GriddedDataCellManager griddedDataCellManager = new GriddedDataCellManager(realm); | ||||
| @ -123,7 +125,8 @@ public class RealmManager { | ||||
|             collisionEngine, | ||||
|             chemistryEngine, | ||||
|             new HitboxManager(new ServerHitboxResolutionCallback()), | ||||
|             ServerContentManager.createServerContentManager(false, null) | ||||
|             ServerContentManager.createServerContentManager(false, null), | ||||
|             null | ||||
|         ); | ||||
| 
 | ||||
|         //add function classes to realm | ||||
|  | ||||
| @ -40,18 +40,38 @@ public class CharacterUtils { | ||||
|         return (Diety)character.getData(CharacterDataStrings.DIETY); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Sets the shelter of a character | ||||
|      * @param character The character | ||||
|      * @param shelter The shelter | ||||
|      */ | ||||
|     public static void addShelter(Character character, Structure shelter){ | ||||
|         character.putData(CharacterDataStrings.SHELTER, shelter); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Gets the shelter of a character | ||||
|      * @param character The character | ||||
|      * @return The shelter if it exists, null otherwise | ||||
|      */ | ||||
|     public static Structure getShelter(Character character){ | ||||
|         return (Structure)character.getData(CharacterDataStrings.SHELTER); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Adds a hometown to a character | ||||
|      * @param character The character | ||||
|      * @param town The town | ||||
|      */ | ||||
|     public static void addHometown(Character character, Town town){ | ||||
|         character.putData(CharacterDataStrings.HOMETOWN, town); | ||||
|     } | ||||
|      | ||||
|     /** | ||||
|      * Gets the hometown of a character | ||||
|      * @param character The character | ||||
|      * @return The hometown if it exists, null otherwise | ||||
|      */ | ||||
|     public static Town getHometown(Character character){ | ||||
|         return (Town)character.getData(CharacterDataStrings.HOMETOWN); | ||||
|     } | ||||
|  | ||||
| @ -1,8 +1,13 @@ | ||||
| package electrosphere.server.macro.character.goal; | ||||
| 
 | ||||
| import org.joml.Vector3d; | ||||
| 
 | ||||
| import electrosphere.entity.Entity; | ||||
| import electrosphere.server.macro.character.Character; | ||||
| import electrosphere.server.macro.character.data.CharacterData; | ||||
| import electrosphere.server.macro.character.data.CharacterDataStrings; | ||||
| import electrosphere.server.macro.structure.Structure; | ||||
| import electrosphere.util.annotation.Exclude; | ||||
| 
 | ||||
| /** | ||||
|  * Utilities for working with goals on macro characters | ||||
| @ -32,6 +37,30 @@ public class CharacterGoal extends CharacterData { | ||||
|      */ | ||||
|     CharacterGoalType type; | ||||
| 
 | ||||
|     /** | ||||
|      * The target structure | ||||
|      */ | ||||
|     @Exclude | ||||
|     Structure structureTarget; | ||||
| 
 | ||||
|     /** | ||||
|      * The entity to target | ||||
|      */ | ||||
|     @Exclude | ||||
|     Entity entityTarget; | ||||
| 
 | ||||
|     /** | ||||
|      * The id of some piece of data to target | ||||
|      */ | ||||
|     @Exclude | ||||
|     String idTarget; | ||||
| 
 | ||||
|     /** | ||||
|      * The point to target | ||||
|      */ | ||||
|     @Exclude | ||||
|     Vector3d pointTarget; | ||||
| 
 | ||||
|     /** | ||||
|      * Constructor | ||||
|      * @param type The type of goal | ||||
| @ -41,6 +70,17 @@ public class CharacterGoal extends CharacterData { | ||||
|         this.type = type; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Constructor | ||||
|      * @param type The type of goal | ||||
|      * @param target The target of the goal | ||||
|      */ | ||||
|     public CharacterGoal(CharacterGoalType type, Object target){ | ||||
|         super(CharacterDataStrings.ENTITY_GOAL); | ||||
|         this.type = type; | ||||
|         this.setTarget(target); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Gets the type of goal that this is | ||||
|      * @return The type | ||||
| @ -49,6 +89,24 @@ public class CharacterGoal extends CharacterData { | ||||
|         return type; | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Sets the target of this tree | ||||
|      * @param target The target | ||||
|      */ | ||||
|     public void setTarget(Object target){ | ||||
|         if(target instanceof Structure){ | ||||
|             this.structureTarget = (Structure)target; | ||||
|         } else if(target instanceof Entity){ | ||||
|             this.entityTarget = (Entity)target; | ||||
|         } else if(target instanceof String){ | ||||
|             this.idTarget = (String)target; | ||||
|         } else if(target instanceof Vector3d){ | ||||
|             this.pointTarget = (Vector3d)target; | ||||
|         } else { | ||||
|             throw new Error("Trying to set target to unsupported type " + target); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * Sets the goal on a character | ||||
|      * @param character The character | ||||
|  | ||||
| @ -2,10 +2,20 @@ package electrosphere.server.simulation; | ||||
| 
 | ||||
| import java.util.List; | ||||
| 
 | ||||
| import org.joml.Vector3d; | ||||
| 
 | ||||
| import electrosphere.engine.Globals; | ||||
| import electrosphere.game.data.block.BlockFab; | ||||
| import electrosphere.game.data.struct.StructureData; | ||||
| import electrosphere.server.macro.MacroData; | ||||
| import electrosphere.server.macro.character.Character; | ||||
| import electrosphere.server.macro.character.CharacterUtils; | ||||
| import electrosphere.server.macro.character.data.CharacterDataStrings; | ||||
| import electrosphere.server.macro.character.goal.CharacterGoal; | ||||
| import electrosphere.server.macro.character.goal.CharacterGoal.CharacterGoalType; | ||||
| import electrosphere.server.macro.structure.Structure; | ||||
| import electrosphere.server.macro.utils.StructurePlacementUtils; | ||||
| import electrosphere.util.FileUtils; | ||||
| 
 | ||||
| /** | ||||
|  * Performs the macro-level (ie virtual, non-physics based) simulation | ||||
| @ -20,12 +30,12 @@ public class MacroSimulation { | ||||
|     /** | ||||
|      * Iterates the macro simulation | ||||
|      */ | ||||
|     public void simulate(){ | ||||
|     public static void simulate(MacroData macroData){ | ||||
|         List<Character> characters = Globals.characterService.getAllCharacters(); | ||||
|         if(characters != null && characters.size() > 0){ | ||||
|             for(Character character : Globals.characterService.getAllCharacters()){ | ||||
|                 //do something | ||||
|                 MacroSimulation.checkForShelter(character); | ||||
|                 MacroSimulation.checkForShelter(macroData, character); | ||||
|                 MacroSimulation.checkTownMembership(character); | ||||
|             } | ||||
|         } | ||||
| @ -52,7 +62,7 @@ public class MacroSimulation { | ||||
|      */ | ||||
|     static final int MAX_PLACE_ATTEMPTS = 10; | ||||
|      | ||||
|     protected static void checkForShelter(Character chara){ | ||||
|     protected static void checkForShelter(MacroData macroData, Character chara){ | ||||
| //        for(Character chara : Globals.macroData.getAliveCharacters()){ | ||||
|         /* | ||||
|         If doesn’t have shelter, check if in town | ||||
| @ -74,7 +84,21 @@ public class MacroSimulation { | ||||
|             //         //try to find a place to put down a structure | ||||
| 
 | ||||
|             //     } | ||||
|             // } else { | ||||
|         } else { | ||||
|             Vector3d position = chara.getPos(); | ||||
|             StructureData structureData = Globals.gameConfigCurrent.getStructureData().getTypes().iterator().next(); | ||||
| 
 | ||||
|             //solve where to place | ||||
|             Vector3d placementPos = StructurePlacementUtils.getPlacementPosition(macroData, structureData, position); | ||||
| 
 | ||||
|             //add to macro data | ||||
|             Structure struct = Structure.createStructure(structureData, placementPos); | ||||
|             struct.setRepairable(true); | ||||
|             struct.setFab(BlockFab.read(FileUtils.getAssetFile(struct.getFabPath()))); | ||||
|             CharacterUtils.addShelter(chara, struct); | ||||
| 
 | ||||
|             //target the struct | ||||
|             CharacterGoal.setCharacterGoal(chara, new CharacterGoal(CharacterGoalType.BUILD_STRUCTURE, struct)); | ||||
|             //     //cry | ||||
|             //     //TODO: Get building type to place | ||||
|             //     String buildingTypeToPlace = "building1"; | ||||
|  | ||||
| @ -4,7 +4,6 @@ import electrosphere.server.datacell.ServerWorldData; | ||||
| import electrosphere.server.physics.terrain.generation.OverworldChunkGenerator; | ||||
| import electrosphere.server.physics.terrain.manager.ServerTerrainManager; | ||||
| import electrosphere.server.physics.terrain.models.TerrainModel; | ||||
| import electrosphere.server.simulation.MacroSimulation; | ||||
| 
 | ||||
| import java.util.Random; | ||||
| import java.util.concurrent.TimeUnit; | ||||
| @ -28,8 +27,6 @@ public class TerrainViewer { | ||||
| //        Utilities.saveObjectToBakedJsonFile("/Config/testingTerrain.json", terrainModel); | ||||
| //        terrainModel = FileLoadingUtils.loadObjectFromAssetPath("/Config/testingTerrain.json", TerrainModel.class); | ||||
|          | ||||
|         MacroSimulation simulation = new MacroSimulation(); | ||||
|          | ||||
|         JFrame frame = new JFrame(); | ||||
|         TerrainViewerJComponent jComponent = new TerrainViewerJComponent(terrainModel); | ||||
|         frame.add(jComponent); | ||||
| @ -41,7 +38,6 @@ public class TerrainViewer { | ||||
|          | ||||
|         while(true){ | ||||
|             frame.repaint(); | ||||
|             simulation.simulate(); | ||||
|             try { | ||||
|                 TimeUnit.MILLISECONDS.sleep(10); | ||||
|             } catch (InterruptedException ex) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user