diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 5f4baf8a..d882377d 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1813,6 +1813,7 @@ Move global cursor entities into cursorState Move lots of global state to clientState Create ServerState global Move realmManager to serverState +Move characterService to serverState diff --git a/src/main/java/electrosphere/client/ui/menu/debug/server/ImGuiAI.java b/src/main/java/electrosphere/client/ui/menu/debug/server/ImGuiAI.java index b3a5d168..0c0dd2a0 100644 --- a/src/main/java/electrosphere/client/ui/menu/debug/server/ImGuiAI.java +++ b/src/main/java/electrosphere/client/ui/menu/debug/server/ImGuiAI.java @@ -84,7 +84,7 @@ public class ImGuiAI { if(ImGui.button("Send off map")){ Entity entity = ai.getParent(); ServerCharacterData serverCharacterData = ServerCharacterData.getServerCharacterData(entity); - Character character = Globals.characterService.getCharacter(serverCharacterData.getCharacterData().getId()); + Character character = Globals.serverState.characterService.getCharacter(serverCharacterData.getCharacterData().getId()); CharacterGoal.setCharacterGoal(character, new CharacterGoal(CharacterGoalType.LEAVE_SIM_RANGE)); } } diff --git a/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java b/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java index 7516c87d..8718c48a 100644 --- a/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java +++ b/src/main/java/electrosphere/client/ui/menu/ingame/MenuGeneratorsInGame.java @@ -107,7 +107,7 @@ public class MenuGeneratorsInGame { //Save { Button button = Button.createButton("Save and Quit", () -> { - SaveUtils.overwriteSave(Globals.currentSave.getName()); + SaveUtils.overwriteSave(Globals.serverState.currentSave.getName()); Globals.signalSystem.post(SignalType.ENGINE_RETURN_TO_TITLE); }); button.setMarginTop(BUTTON_MARGIN); diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 1495eb57..1c4b0c0e 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -61,7 +61,6 @@ import electrosphere.script.ScriptEngine; import electrosphere.server.ServerState; import electrosphere.server.db.DatabaseController; 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.MicroSimulation; @@ -85,7 +84,7 @@ public class Globals { // //Service manager // - static ServiceManager serviceManager; + public static ServiceManager serviceManager; // //Signal system @@ -181,12 +180,6 @@ public class Globals { public static CursorState cursorState = new CursorState(); - // - // Game Save stuff - // - public static Save currentSave = null; - - // // Game config // @@ -327,7 +320,6 @@ public class Globals { //services public static FileWatcherService fileWatcherService; public static StructureScanningService structureScanningService; - public static CharacterService characterService; //collision world data public static CollisionWorldData commonWorldData; @@ -400,11 +392,16 @@ public class Globals { RENDER_FLAG_RENDER_UI = true; RENDER_FLAG_RENDER_UI_BOUNDS = false; + // + //Service manager + serviceManager = ServiceManager.create(); + //client state Globals.clientState = new ClientState(); //server state Globals.serverState = new ServerState(); + Globals.serverState.characterService = (CharacterService)serviceManager.registerService(new CharacterService()); //load in default texture map textureMapDefault = TextureMap.construct("Textures/default_texture_map.json"); @@ -439,10 +436,7 @@ public class Globals { Globals.movementAudioService = new MovementAudioService(); Globals.hitboxAudioService = new HitboxAudioService(); - // - //Service manager - serviceManager = new ServiceManager(); - serviceManager.init(); + //add services here Globals.signalSystem = (SignalSystem)serviceManager.registerService(new SignalSystem()); Globals.elementService = (ElementService)serviceManager.registerService(new ElementService()); @@ -451,7 +445,6 @@ public class Globals { Globals.mainThreadSignalService = (MainThreadSignalService)serviceManager.registerService(new MainThreadSignalService()); Globals.fileWatcherService = (FileWatcherService)serviceManager.registerService(new FileWatcherService()); Globals.structureScanningService = (StructureScanningService)serviceManager.registerService(new StructureScanningService()); - Globals.characterService = (CharacterService)serviceManager.registerService(new CharacterService()); serviceManager.instantiate(); // //End service manager @@ -619,6 +612,9 @@ public class Globals { Globals.playerManager = new PlayerManager(); Globals.clientState = new ClientState(); Globals.serverState = new ServerState(); + if(Globals.serviceManager != null){ + Globals.serverState.characterService = (CharacterService)Globals.serviceManager.registerService(new CharacterService()); + } Globals.dbController.disconnect(); Globals.serviceManager.unloadScene(); } diff --git a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java index bb5022f3..9b78a222 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java +++ b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java @@ -180,7 +180,7 @@ public class LoadingUtils { } //set player character template serverPlayerConnection.setCreatureTemplate(template); - Character chara = Globals.characterService.createCharacter(template, serverPlayerConnection.getPlayerId()); + Character chara = Globals.serverState.characterService.createCharacter(template, serverPlayerConnection.getPlayerId()); Globals.clientState.clientConnection.queueOutgoingMessage(CharacterMessage.constructRequestSpawnCharacterMessage(chara.getId() + "")); //set player world-space coordinates diff --git a/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java b/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java index e9762d03..a9d50688 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java @@ -9,6 +9,7 @@ import electrosphere.engine.signal.Signal.SignalType; import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.renderer.ui.elements.Window; import electrosphere.server.ServerState; +import electrosphere.server.service.CharacterService; /** * Loading thread that returns the client to the main menu @@ -62,6 +63,7 @@ public class MainMenuLoading { private static void resetServerState(){ Globals.serverState.server.close(); Globals.serverState = new ServerState(); + Globals.serverState.characterService = (CharacterService)Globals.serviceManager.registerService(new CharacterService()); } /** diff --git a/src/main/java/electrosphere/engine/service/ServiceManager.java b/src/main/java/electrosphere/engine/service/ServiceManager.java index 4b1f4f69..3adcd7a7 100644 --- a/src/main/java/electrosphere/engine/service/ServiceManager.java +++ b/src/main/java/electrosphere/engine/service/ServiceManager.java @@ -17,12 +17,19 @@ public class ServiceManager { */ public List trackedServices; + /** + * Private constructor + */ + private ServiceManager(){ } + /** * Initializes the service manager */ - public void init(){ - LoggerInterface.loggerEngine.DEBUG("[ServiceManager] Init"); - trackedServices = new LinkedList(); + public static ServiceManager create(){ + LoggerInterface.loggerEngine.DEBUG("[ServiceManager] Create"); + ServiceManager rVal = new ServiceManager(); + rVal.trackedServices = new LinkedList(); + return rVal; } /** @@ -59,7 +66,7 @@ public class ServiceManager { LoggerInterface.loggerEngine.DEBUG("[ServiceManager] Destroy service " + service.getName()); service.destroy(); } - this.trackedServices = null; + this.trackedServices.clear(); } /** diff --git a/src/main/java/electrosphere/engine/signal/SignalServiceImpl.java b/src/main/java/electrosphere/engine/signal/SignalServiceImpl.java index 5557950f..208f7ab1 100644 --- a/src/main/java/electrosphere/engine/signal/SignalServiceImpl.java +++ b/src/main/java/electrosphere/engine/signal/SignalServiceImpl.java @@ -17,12 +17,12 @@ public class SignalServiceImpl implements SignalService { /** * Thread safe's the service */ - Semaphore threadLock; + Semaphore threadLock = new Semaphore(1); /** * The list of signals to handle */ - List signals; + List signals = new LinkedList(); /** * The name of the service @@ -48,15 +48,12 @@ public class SignalServiceImpl implements SignalService { @Override public void init() { LoggerInterface.loggerEngine.DEBUG("[" + this.getName() + "] Init"); - threadLock = new Semaphore(1); - signals = new LinkedList(); } @Override public void destroy() { LoggerInterface.loggerEngine.DEBUG("[" + this.getName() + "] Destroy"); - threadLock = null; - signals = null; + signals.clear(); serviceName = null; } diff --git a/src/main/java/electrosphere/entity/ServerEntityUtils.java b/src/main/java/electrosphere/entity/ServerEntityUtils.java index a4df7051..dc4e8cd1 100644 --- a/src/main/java/electrosphere/entity/ServerEntityUtils.java +++ b/src/main/java/electrosphere/entity/ServerEntityUtils.java @@ -168,7 +168,7 @@ public class ServerEntityUtils { Globals.serverState.aiManager.removeAI(entity); } if(ServerCharacterData.hasServerCharacterDataTree(entity)){ - Globals.characterService.removeEntity(ServerCharacterData.getServerCharacterData(entity).getCharacterData()); + Globals.serverState.characterService.removeEntity(ServerCharacterData.getServerCharacterData(entity).getCharacterData()); } // diff --git a/src/main/java/electrosphere/entity/state/server/ServerCharacterData.java b/src/main/java/electrosphere/entity/state/server/ServerCharacterData.java index b0bb1a8c..1a57e2a3 100644 --- a/src/main/java/electrosphere/entity/state/server/ServerCharacterData.java +++ b/src/main/java/electrosphere/entity/state/server/ServerCharacterData.java @@ -38,7 +38,7 @@ public class ServerCharacterData { public static void attachServerCharacterData(Entity entity, Character charaData){ ServerCharacterData tree = new ServerCharacterData(entity, charaData); entity.putData(EntityDataStrings.TREE_SERVERCHARACTERDATA, tree); - Globals.characterService.setEntity(charaData, entity); + Globals.serverState.characterService.setEntity(charaData, entity); } /** diff --git a/src/main/java/electrosphere/net/server/protocol/CharacterProtocol.java b/src/main/java/electrosphere/net/server/protocol/CharacterProtocol.java index c13a5437..4bc2550a 100644 --- a/src/main/java/electrosphere/net/server/protocol/CharacterProtocol.java +++ b/src/main/java/electrosphere/net/server/protocol/CharacterProtocol.java @@ -46,7 +46,7 @@ public class CharacterProtocol implements ServerProtocolTemplatecharacters = Globals.characterService.getCharacters(connectionHandler.getPlayer().getDBID()).stream().map((Character chara) -> { + Listcharacters = Globals.serverState.characterService.getCharacters(connectionHandler.getPlayer().getDBID()).stream().map((Character chara) -> { CharacterDescriptionDTO dtoObj = new CharacterDescriptionDTO(); dtoObj.setId(chara.getId() + ""); dtoObj.setTemplate(chara.getCreatureTemplate()); @@ -69,7 +69,7 @@ public class CharacterProtocol implements ServerProtocolTemplate nearbyCharacters = Globals.characterService.getCharacters(worldPos); + List nearbyCharacters = Globals.serverState.characterService.getCharacters(worldPos); for(Character character : nearbyCharacters){ this.spawnMacroObject(realm, character); } @@ -100,14 +100,14 @@ public class ServerContentManager { public void saveContentToDisk(Long locationKey, Collection entities){ //serialize all non-character entities ContentSerialization serialization = ContentSerialization.constructContentSerialization(entities); - String dirPath = SaveUtils.deriveSaveDirectoryPath(Globals.currentSave.getName()); + String dirPath = SaveUtils.deriveSaveDirectoryPath(Globals.serverState.currentSave.getName()); String fullPath = dirPath + "/content/" + locationKey + ".dat"; FileUtils.serializeObjectToFilePath(fullPath, serialization); //store all character entities in database for(Entity entity : entities){ if(ServerCharacterData.hasServerCharacterDataTree(entity)){ - Globals.characterService.saveCharacter(entity); + Globals.serverState.characterService.saveCharacter(entity); } } } @@ -118,7 +118,7 @@ public class ServerContentManager { * @param serialization The collection of entities to save */ public void saveSerializationToDisk(Long locationKey, ContentSerialization serialization){ - String dirPath = SaveUtils.deriveSaveDirectoryPath(Globals.currentSave.getName()); + String dirPath = SaveUtils.deriveSaveDirectoryPath(Globals.serverState.currentSave.getName()); String fullPath = dirPath + "/content/" + locationKey + ".dat"; FileUtils.serializeObjectToFilePath(fullPath, serialization); } diff --git a/src/main/java/electrosphere/server/macro/MacroData.java b/src/main/java/electrosphere/server/macro/MacroData.java index 0d6965b0..32acc0b0 100644 --- a/src/main/java/electrosphere/server/macro/MacroData.java +++ b/src/main/java/electrosphere/server/macro/MacroData.java @@ -249,7 +249,7 @@ public class MacroData { LoggerInterface.loggerEngine.WARNING(race.getName()); int numCharsOfRace = 0; //n*m complexity - yikes! - as long as we're not making a million chars at start this should be _ok_ - for(Character chara : Globals.characterService.getAllCharacters()){ + for(Character chara : Globals.serverState.characterService.getAllCharacters()){ if(chara.containsKey(CharacterDataStrings.RACE)){ if(Race.getRace(chara).equals(race)){ numCharsOfRace++; diff --git a/src/main/java/electrosphere/server/macro/character/CharacterUtils.java b/src/main/java/electrosphere/server/macro/character/CharacterUtils.java index ff961dc3..a0666ea7 100644 --- a/src/main/java/electrosphere/server/macro/character/CharacterUtils.java +++ b/src/main/java/electrosphere/server/macro/character/CharacterUtils.java @@ -94,7 +94,7 @@ public class CharacterUtils { public static Character spawnCharacter(Realm realm, Vector3d position, String race){ Race raceData = Globals.gameConfigCurrent.getRaceMap().getRace(race); String creatureType = raceData.getAssociatedCreature(); - Character rVal = Globals.characterService.createCharacter(ObjectTemplate.createDefault(EntityType.CREATURE, creatureType), CharacterService.NO_PLAYER); + Character rVal = Globals.serverState.characterService.createCharacter(ObjectTemplate.createDefault(EntityType.CREATURE, creatureType), CharacterService.NO_PLAYER); rVal.setPos(position); Race.setRace(rVal, Race.create(race, creatureType)); realm.getDataCellManager().evaluateMacroObject(rVal); diff --git a/src/main/java/electrosphere/server/macro/character/PlayerCharacterCreation.java b/src/main/java/electrosphere/server/macro/character/PlayerCharacterCreation.java index f1ff580b..428354b5 100644 --- a/src/main/java/electrosphere/server/macro/character/PlayerCharacterCreation.java +++ b/src/main/java/electrosphere/server/macro/character/PlayerCharacterCreation.java @@ -31,7 +31,7 @@ public class PlayerCharacterCreation { // //get template - Character charaData = Globals.characterService.getCharacter(connectionHandler.getCharacterId()); + Character charaData = Globals.serverState.characterService.getCharacter(connectionHandler.getCharacterId()); ObjectTemplate template = charaData.getCreatureTemplate(); if(connectionHandler.getCharacterId() == CharacterProtocol.SPAWN_EXISTING_TEMPLATE){ template = connectionHandler.getCurrentCreatureTemplate(); @@ -90,7 +90,7 @@ public class PlayerCharacterCreation { */ static void addPlayerServerBTrees(Entity entity, ServerConnectionHandler serverConnectionHandler){ ServerPlayerViewDirTree.attachServerPlayerViewDirTree(entity); - ServerCharacterData.attachServerCharacterData(entity, Globals.characterService.getCharacter(serverConnectionHandler.getCharacterId())); + ServerCharacterData.attachServerCharacterData(entity, Globals.serverState.characterService.getCharacter(serverConnectionHandler.getCharacterId())); } /** @@ -100,7 +100,7 @@ public class PlayerCharacterCreation { * @return The spawn point for the player */ public static Vector3d solveSpawnPoint(Realm realm, ServerConnectionHandler connectionHandler){ - Vector3d spawnPoint = Globals.characterService.getCharacter(connectionHandler.getCharacterId()).getPos(); + Vector3d spawnPoint = Globals.serverState.characterService.getCharacter(connectionHandler.getCharacterId()).getPos(); if(spawnPoint == null){ spawnPoint = realm.getSpawnPoint(); } diff --git a/src/main/java/electrosphere/server/physics/block/diskmap/ServerBlockChunkDiskMap.java b/src/main/java/electrosphere/server/physics/block/diskmap/ServerBlockChunkDiskMap.java index 82ae9048..a696ca93 100644 --- a/src/main/java/electrosphere/server/physics/block/diskmap/ServerBlockChunkDiskMap.java +++ b/src/main/java/electrosphere/server/physics/block/diskmap/ServerBlockChunkDiskMap.java @@ -104,7 +104,7 @@ public class ServerBlockChunkDiskMap { * Saves the disk map to disk */ public void save(){ - FileUtils.serializeObjectToSavePath(Globals.currentSave.getName(), MAP_FILE_NAME, this); + FileUtils.serializeObjectToSavePath(Globals.serverState.currentSave.getName(), MAP_FILE_NAME, this); } /** @@ -136,7 +136,7 @@ public class ServerBlockChunkDiskMap { if(this.containsBlocksAtPosition(worldX, worldY, worldZ)){ //read file String fileName = worldPosFileMap.get(getBlockChunkKey(worldX, worldY, worldZ)); - byte[] rawDataCompressed = FileUtils.loadBinaryFromSavePath(Globals.currentSave.getName(), fileName); + byte[] rawDataCompressed = FileUtils.loadBinaryFromSavePath(Globals.serverState.currentSave.getName(), fileName); //decompress byte[] rawData = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -251,7 +251,7 @@ public class ServerBlockChunkDiskMap { deflaterInputStream.flush(); deflaterInputStream.close(); //write to disk - FileUtils.saveBinaryToSavePath(Globals.currentSave.getName(), fileName, out.toByteArray()); + FileUtils.saveBinaryToSavePath(Globals.serverState.currentSave.getName(), fileName, out.toByteArray()); //save to the map of filenames worldPosFileMap.put(chunkKey,fileName); } catch (IOException e) { diff --git a/src/main/java/electrosphere/server/physics/fluid/diskmap/FluidDiskMap.java b/src/main/java/electrosphere/server/physics/fluid/diskmap/FluidDiskMap.java index de48d899..0bb5bb0d 100644 --- a/src/main/java/electrosphere/server/physics/fluid/diskmap/FluidDiskMap.java +++ b/src/main/java/electrosphere/server/physics/fluid/diskmap/FluidDiskMap.java @@ -59,7 +59,7 @@ public class FluidDiskMap { * Saves the disk map to disk */ public void save(){ - FileUtils.serializeObjectToSavePath(Globals.currentSave.getName(), "fluid.map", this); + FileUtils.serializeObjectToSavePath(Globals.serverState.currentSave.getName(), "fluid.map", this); } /** @@ -86,7 +86,7 @@ public class FluidDiskMap { if(containsFluidAtPosition(worldX, worldY, worldZ)){ //read file String fileName = worldPosFileMap.get(getFluidChunkKey(worldX, worldY, worldZ)); - byte[] rawDataCompressed = FileUtils.loadBinaryFromSavePath(Globals.currentSave.getName(), fileName); + byte[] rawDataCompressed = FileUtils.loadBinaryFromSavePath(Globals.serverState.currentSave.getName(), fileName); //decompress byte[] rawData = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -192,7 +192,7 @@ public class FluidDiskMap { deflaterInputStream.flush(); deflaterInputStream.close(); //write to disk - FileUtils.saveBinaryToSavePath(Globals.currentSave.getName(), fileName, out.toByteArray()); + FileUtils.saveBinaryToSavePath(Globals.serverState.currentSave.getName(), fileName, out.toByteArray()); //save to the map of filenames worldPosFileMap.put(chunkKey,fileName); } catch (IOException e) { diff --git a/src/main/java/electrosphere/server/physics/terrain/diskmap/ChunkDiskMap.java b/src/main/java/electrosphere/server/physics/terrain/diskmap/ChunkDiskMap.java index cda2a9a0..e02c242c 100644 --- a/src/main/java/electrosphere/server/physics/terrain/diskmap/ChunkDiskMap.java +++ b/src/main/java/electrosphere/server/physics/terrain/diskmap/ChunkDiskMap.java @@ -89,7 +89,7 @@ public class ChunkDiskMap { LoggerInterface.loggerEngine.DEBUG("POS FILE MAP: " + rVal.worldPosFileMap.keySet()); //make sure the subfolder for chunk files exists - String dirPath = SaveUtils.deriveSaveDirectoryPath(Globals.currentSave.getName()); + String dirPath = SaveUtils.deriveSaveDirectoryPath(Globals.serverState.currentSave.getName()); if(!Files.exists(new File(dirPath + VOXEL_DATA_DIR).toPath())){ try { Files.createDirectories(new File(dirPath + VOXEL_DATA_DIR).toPath()); @@ -115,7 +115,7 @@ public class ChunkDiskMap { * Saves the disk map to disk */ public void save(){ - FileUtils.serializeObjectToSavePath(Globals.currentSave.getName(), MAP_FILE_NAME, this); + FileUtils.serializeObjectToSavePath(Globals.serverState.currentSave.getName(), MAP_FILE_NAME, this); } /** @@ -167,7 +167,7 @@ public class ChunkDiskMap { if(this.containsTerrainAtPosition(worldX, worldY, worldZ, stride)){ //read file String fileName = worldPosFileMap.get(ChunkDiskMap.getTerrainChunkKey(worldX, worldY, worldZ)); - byte[] rawDataCompressed = FileUtils.loadBinaryFromSavePath(Globals.currentSave.getName(), fileName); + byte[] rawDataCompressed = FileUtils.loadBinaryFromSavePath(Globals.serverState.currentSave.getName(), fileName); //decompress byte[] rawData = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -262,7 +262,7 @@ public class ChunkDiskMap { deflaterInputStream.flush(); deflaterInputStream.close(); //write to disk - FileUtils.saveBinaryToSavePath(Globals.currentSave.getName(), fileName, out.toByteArray()); + FileUtils.saveBinaryToSavePath(Globals.serverState.currentSave.getName(), fileName, out.toByteArray()); //save to the map of filenames worldPosFileMap.put(chunkKey,fileName); } catch (IOException e) { diff --git a/src/main/java/electrosphere/server/saves/SaveUtils.java b/src/main/java/electrosphere/server/saves/SaveUtils.java index 3a6cfe22..09dcc1f6 100644 --- a/src/main/java/electrosphere/server/saves/SaveUtils.java +++ b/src/main/java/electrosphere/server/saves/SaveUtils.java @@ -101,7 +101,7 @@ public class SaveUtils { //create save file Save save = new Save(saveName); - Globals.currentSave = save; //chunk map saving requires global save to be set + Globals.serverState.currentSave = save; //chunk map saving requires global save to be set FileUtils.serializeObjectToSavePath(saveName, "/save.json", save); //write scene file @@ -160,13 +160,13 @@ public class SaveUtils { public static void overwriteSave(String saveName){ //write save file - FileUtils.serializeObjectToSavePath(saveName, "/save.json", Globals.currentSave); + FileUtils.serializeObjectToSavePath(saveName, "/save.json", Globals.serverState.currentSave); //write server structures Globals.serverState.realmManager.save(saveName); //store character service - Globals.characterService.saveAll(); + Globals.serverState.characterService.saveAll(); LoggerInterface.loggerEngine.WARNING("Finished saving " + saveName); } @@ -192,7 +192,7 @@ public class SaveUtils { String dirPath = deriveSaveDirectoryPath(saveName); //load save file - Globals.currentSave = FileUtils.loadObjectFromSavePath(saveName, "/save.json", Save.class); + Globals.serverState.currentSave = FileUtils.loadObjectFromSavePath(saveName, "/save.json", Save.class); //load world data diff --git a/src/main/java/electrosphere/server/simulation/MacroSimulation.java b/src/main/java/electrosphere/server/simulation/MacroSimulation.java index f7a744cb..ccbab94b 100644 --- a/src/main/java/electrosphere/server/simulation/MacroSimulation.java +++ b/src/main/java/electrosphere/server/simulation/MacroSimulation.java @@ -22,16 +22,16 @@ public class MacroSimulation { * Iterates the macro simulation */ public static void simulate(Realm realm){ - List characters = Globals.characterService.getAllCharacters(); + List characters = Globals.serverState.characterService.getAllCharacters(); if(characters != null && characters.size() > 0){ - for(Character character : Globals.characterService.getAllCharacters()){ + for(Character character : Globals.serverState.characterService.getAllCharacters()){ if(character.getPlayerId() != CharacterService.NO_PLAYER){ continue; } //update the goal of the character CharaSimulation.setGoal(realm, character); //if the character doesn't have an entity, simulate it at the macro level - if(Globals.characterService.getEntity(character) == null){ + if(Globals.serverState.characterService.getEntity(character) == null){ CharaSimulation.performGoal(realm, character); } } diff --git a/src/main/java/electrosphere/server/simulation/chara/CharaInventoryUtils.java b/src/main/java/electrosphere/server/simulation/chara/CharaInventoryUtils.java index 2d768000..1d9c945c 100644 --- a/src/main/java/electrosphere/server/simulation/chara/CharaInventoryUtils.java +++ b/src/main/java/electrosphere/server/simulation/chara/CharaInventoryUtils.java @@ -24,7 +24,7 @@ public class CharaInventoryUtils { public static List getInventoryContents(Character chara){ ObjectTemplate template = chara.getCreatureTemplate(); if(CharaMacroUtils.isMicroSim(chara)){ - Entity creature = Globals.characterService.getEntity(chara); + Entity creature = Globals.serverState.characterService.getEntity(chara); template = CommonEntityUtils.getObjectTemplate(creature); } ObjectInventoryData inventoryData = template.getInventoryData(); diff --git a/src/main/java/electrosphere/server/simulation/chara/CharaMacroUtils.java b/src/main/java/electrosphere/server/simulation/chara/CharaMacroUtils.java index 769da4a7..7b9af10a 100644 --- a/src/main/java/electrosphere/server/simulation/chara/CharaMacroUtils.java +++ b/src/main/java/electrosphere/server/simulation/chara/CharaMacroUtils.java @@ -14,7 +14,7 @@ public class CharaMacroUtils { * @return true if it is being handled by micro simulation, false otherwise */ public static boolean isMicroSim(Character chara){ - return Globals.characterService.getEntity(chara) != null; + return Globals.serverState.characterService.getEntity(chara) != null; } } diff --git a/src/test/java/electrosphere/engine/service/ServiceManagerTests.java b/src/test/java/electrosphere/engine/service/ServiceManagerTests.java index 48ef1626..05824f9a 100644 --- a/src/test/java/electrosphere/engine/service/ServiceManagerTests.java +++ b/src/test/java/electrosphere/engine/service/ServiceManagerTests.java @@ -21,14 +21,12 @@ public class ServiceManagerTests { @UnitTest public void testInit(){ - ServiceManager serviceManager = new ServiceManager(); - serviceManager.init(); + ServiceManager.create(); } @UnitTest public void testRegisterService(){ - ServiceManager serviceManager = new ServiceManager(); - serviceManager.init(); + ServiceManager serviceManager = ServiceManager.create(); Service service1Mock = Mockito.mock(Service.class); Service service1 = serviceManager.registerService(service1Mock); assertEquals(service1Mock,service1); @@ -36,8 +34,7 @@ public class ServiceManagerTests { @UnitTest public void testRegisterTwoServices(){ - ServiceManager serviceManager = new ServiceManager(); - serviceManager.init(); + ServiceManager serviceManager = ServiceManager.create(); Service service1Mock = Mockito.mock(Service.class); Service service1 = serviceManager.registerService(service1Mock); Service service2Mock = Mockito.mock(Service.class); @@ -48,8 +45,7 @@ public class ServiceManagerTests { @UnitTest public void testRegisterManyServices(){ - ServiceManager serviceManager = new ServiceManager(); - serviceManager.init(); + ServiceManager serviceManager = ServiceManager.create(); for(int i = 0; i < 10; i++){ serviceManager.registerService(Mockito.mock(Service.class)); } @@ -60,8 +56,7 @@ public class ServiceManagerTests { @UnitTest public void testInstantiate(){ - ServiceManager serviceManager = new ServiceManager(); - serviceManager.init(); + ServiceManager serviceManager = ServiceManager.create(); //register service Service service1Mock = Mockito.spy(Service.class); @@ -77,8 +72,7 @@ public class ServiceManagerTests { @UnitTest public void testDestroy(){ - ServiceManager serviceManager = new ServiceManager(); - serviceManager.init(); + ServiceManager serviceManager = ServiceManager.create(); //register service Service service1Mock = Mockito.spy(Service.class); diff --git a/src/test/java/electrosphere/entity/ServerEntityUtilsUnitTests.java b/src/test/java/electrosphere/entity/ServerEntityUtilsUnitTests.java index 88ad8556..df2ebd85 100644 --- a/src/test/java/electrosphere/entity/ServerEntityUtilsUnitTests.java +++ b/src/test/java/electrosphere/entity/ServerEntityUtilsUnitTests.java @@ -8,6 +8,7 @@ import electrosphere.test.annotations.UnitTest; import electrosphere.engine.Globals; import electrosphere.server.ServerState; import electrosphere.server.datacell.Realm; +import electrosphere.server.service.CharacterService; /** * Unit tests for the server entity utils @@ -18,6 +19,7 @@ public class ServerEntityUtilsUnitTests { public void destroyEntity_ValidEntity_NoRealm(){ //setup Globals.serverState = new ServerState(); + Globals.serverState.characterService = (CharacterService)Globals.serviceManager.registerService(new CharacterService()); Realm realm = Globals.serverState.realmManager.createViewportRealm(new Vector3d(0,0,0), new Vector3d(1,1,1)); Entity entity = EntityCreationUtils.createServerEntity(realm, new Vector3d()); diff --git a/src/test/java/electrosphere/test/testutils/TestEngineUtils.java b/src/test/java/electrosphere/test/testutils/TestEngineUtils.java index 28e448ca..24b47003 100644 --- a/src/test/java/electrosphere/test/testutils/TestEngineUtils.java +++ b/src/test/java/electrosphere/test/testutils/TestEngineUtils.java @@ -165,7 +165,7 @@ public class TestEngineUtils { ObjectTemplate creatureTemplate = ObjectTemplate.createDefault(EntityType.CREATURE, "human"); ServerConnectionHandler serverConnection = Globals.serverState.server.getFirstConnection(); serverConnection.setCreatureTemplate(creatureTemplate); - Character chara = Globals.characterService.createCharacter(creatureTemplate, serverConnection.getPlayerId()); + Character chara = Globals.serverState.characterService.createCharacter(creatureTemplate, serverConnection.getPlayerId()); serverConnection.setCharacterId(chara.getId()); PlayerCharacterCreation.spawnPlayerCharacter(serverConnection); }