diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index f26797a8..279dd208 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -634,7 +634,9 @@ public class Globals { Globals.clientScene = new Scene(); Globals.clientSceneWrapper = new ClientSceneWrapper(Globals.clientScene, new CollisionEngine()); Globals.clientSynchronizationManager = new ClientSynchronizationManager(); - Globals.realmManager = null; + if(Globals.realmManager != null){ + Globals.realmManager.reset(); + } } /** @@ -645,9 +647,13 @@ public class Globals { // //Actual globals to destroy Globals.assetManager = null; + Globals.elementService = null; + Globals.realmManager = null; // //Destroy services - Globals.serviceManager.destroy(); + if(Globals.serviceManager != null){ + Globals.serviceManager.destroy(); + } Globals.serviceManager = null; } diff --git a/src/main/java/electrosphere/server/datacell/RealmManager.java b/src/main/java/electrosphere/server/datacell/RealmManager.java index afd593f7..50e51cc7 100644 --- a/src/main/java/electrosphere/server/datacell/RealmManager.java +++ b/src/main/java/electrosphere/server/datacell/RealmManager.java @@ -171,5 +171,14 @@ public class RealmManager { return realms.iterator().next(); } + /** + * Resets the realm manager + */ + public void reset(){ + this.realms.clear(); + this.entityToRealmMap.clear(); + this.playerToRealmMap.clear(); + } + } diff --git a/src/test/java/electrosphere/engine/GlobalsTests.java b/src/test/java/electrosphere/engine/GlobalsTests.java new file mode 100644 index 00000000..3bceca6d --- /dev/null +++ b/src/test/java/electrosphere/engine/GlobalsTests.java @@ -0,0 +1,41 @@ +package electrosphere.engine; + +import static org.junit.jupiter.api.Assertions.*; + +import electrosphere.game.config.UserSettings; +import electrosphere.logger.LoggerInterface; +import electrosphere.test.annotations.IntegrationTest; + +/** + * Tests for globals + */ +public class GlobalsTests { + + @IntegrationTest + public void resetGlobals_Variables_null(){ + LoggerInterface.initLoggers(); + UserSettings.loadUserSettings(); + Globals.initGlobals(); + Globals.resetGlobals(); + assertNull(Globals.assetManager); + assertNull(Globals.elementService); + } + + @IntegrationTest + public void resetGlobalsWithoutInit_ThrowsError_false(){ + assertDoesNotThrow(() -> { + Globals.resetGlobals(); + }); + } + + @IntegrationTest + public void unloadScene_Variables_notNull(){ + LoggerInterface.initLoggers(); + UserSettings.loadUserSettings(); + Globals.initGlobals(); + Globals.unloadScene(); + assertNotNull(Globals.assetManager); + assertNotNull(Globals.realmManager); + } + +}