diff --git a/src/main/java/electrosphere/collision/CollisionEngine.java b/src/main/java/electrosphere/collision/CollisionEngine.java index 4955d566..8d10a713 100644 --- a/src/main/java/electrosphere/collision/CollisionEngine.java +++ b/src/main/java/electrosphere/collision/CollisionEngine.java @@ -455,17 +455,19 @@ public class CollisionEngine { public void updateDynamicObjectTransforms(){ Globals.profiler.beginCpuSample("updateDynamicObjectTransforms"); spaceLock.acquireUninterruptibly(); - for(Collidable collidable : collidableList){ - if(collidable.getParentTracksCollidable()){ - Entity physicsEntity = collidable.getParent(); - DBody rigidBody = PhysicsEntityUtils.getDBody(physicsEntity); - Matrix4d inverseTransform = new Matrix4d(); - Vector4d rawPos = inverseTransform.transform(new Vector4d(PhysicsUtils.getRigidBodyPosition(rigidBody),1)); - Vector3d newPosition = new Vector3d(rawPos.x,rawPos.y,rawPos.z); - newPosition = this.suggestMovementPosition(collisionWorldData, newPosition); - Quaterniond newRotation = PhysicsUtils.getRigidBodyRotation(rigidBody); - EntityUtils.getPosition(physicsEntity).set(newPosition); - EntityUtils.getRotation(physicsEntity).set(newRotation); + if(this.collisionWorldData != null){ + for(Collidable collidable : collidableList){ + if(collidable.getParentTracksCollidable()){ + Entity physicsEntity = collidable.getParent(); + DBody rigidBody = PhysicsEntityUtils.getDBody(physicsEntity); + Matrix4d inverseTransform = new Matrix4d(); + Vector4d rawPos = inverseTransform.transform(new Vector4d(PhysicsUtils.getRigidBodyPosition(rigidBody),1)); + Vector3d newPosition = new Vector3d(rawPos.x,rawPos.y,rawPos.z); + newPosition = this.suggestMovementPosition(collisionWorldData, newPosition); + Quaterniond newRotation = PhysicsUtils.getRigidBodyRotation(rigidBody); + EntityUtils.getPosition(physicsEntity).set(newPosition); + EntityUtils.getRotation(physicsEntity).set(newRotation); + } } } spaceLock.release(); diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index fe929ede..334520f3 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -88,7 +88,7 @@ public class Globals { // //Thread manager // - public static ThreadManager threadManager = new ThreadManager(); + public static ThreadManager threadManager; // //Top level user settings object @@ -420,6 +420,7 @@ public class Globals { LoggerInterface.loggerStartup.INFO("Initialize global variables"); //timekeeper timekeeper = new Timekeeper(); + threadManager = new ThreadManager(); //load in default texture map textureMapDefault = TextureMap.construct("Textures/default_texture_map.json"); //load model pretransforms diff --git a/src/main/java/electrosphere/engine/Main.java b/src/main/java/electrosphere/engine/Main.java index e9abbadb..ca0d1e35 100644 --- a/src/main/java/electrosphere/engine/Main.java +++ b/src/main/java/electrosphere/engine/Main.java @@ -442,6 +442,10 @@ public class Main { } //shutdown ode OdeHelper.closeODE(); + //reset globals + Globals.playerEntity = null; + Globals.playerCamera = null; + Globals.firstPersonEntity = null; } static void sleep(int i) { diff --git a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java index dfb73f76..ecbadd4f 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java +++ b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java @@ -170,7 +170,7 @@ public class LoadingUtils { Globals.clientConnection.queueOutgoingMessage(CharacterMessage.constructRequestSpawnCharacterMessage()); //set player world-space coordinates - Player playerObject = Globals.playerManager.getPlayerFromId(0); + Player playerObject = Globals.playerManager.getFirstPlayer(); Realm realm = Globals.realmManager.getRealms().iterator().next(); Vector3d spawnPoint = realm.getSpawnPoint(); playerObject.setWorldPos(new Vector3i( diff --git a/src/main/java/electrosphere/logger/Logger.java b/src/main/java/electrosphere/logger/Logger.java index 431f0db4..d96b34af 100644 --- a/src/main/java/electrosphere/logger/Logger.java +++ b/src/main/java/electrosphere/logger/Logger.java @@ -40,7 +40,7 @@ public class Logger { */ public void setLevel(LogLevel level){ this.level = level; - new Exception("Changing log level to " + level + "!").printStackTrace(); + // new Exception("Changing log level to " + level + "!").printStackTrace(); } /** diff --git a/src/main/java/electrosphere/logger/LoggerInterface.java b/src/main/java/electrosphere/logger/LoggerInterface.java index bf0abfa5..9a697adf 100644 --- a/src/main/java/electrosphere/logger/LoggerInterface.java +++ b/src/main/java/electrosphere/logger/LoggerInterface.java @@ -66,4 +66,14 @@ public class LoggerInterface { return Arrays.asList(loggerList); } + /** + * Sets the log level for all loggers + * @param level The level + */ + public static void setLogLevel(LogLevel level){ + for(Logger logger : getLoggers()){ + logger.setLevel(level); + } + } + } diff --git a/src/main/java/electrosphere/net/server/player/PlayerManager.java b/src/main/java/electrosphere/net/server/player/PlayerManager.java index 89258bca..b64718b3 100644 --- a/src/main/java/electrosphere/net/server/player/PlayerManager.java +++ b/src/main/java/electrosphere/net/server/player/PlayerManager.java @@ -28,6 +28,17 @@ public class PlayerManager { return idMap.get(id); } + /** + * Gets the first registered player + * @return The first registered player if it exists, null otherwise + */ + public Player getFirstPlayer(){ + if(idMap.values().size() > 0){ + return idMap.values().iterator().next(); + } + return null; + } + public List getPlayers(){ return new LinkedList(idMap.values()); } diff --git a/src/test/java/electrosphere/entity/state/equip/ClientEquipStateTests.java b/src/test/java/electrosphere/entity/state/equip/ClientEquipStateTests.java index 7c070911..1e2f2605 100644 --- a/src/test/java/electrosphere/entity/state/equip/ClientEquipStateTests.java +++ b/src/test/java/electrosphere/entity/state/equip/ClientEquipStateTests.java @@ -7,9 +7,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Set; import org.joml.Vector3d; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import annotations.IntegrationTest; import electrosphere.engine.Globals; @@ -27,9 +24,7 @@ import testutils.TestEngineUtils; /** * Tests for client side equip state */ -@ExtendWith(EntityTestTemplate.class) -@Execution(ExecutionMode.SAME_THREAD) -public class ClientEquipStateTests { +public class ClientEquipStateTests extends EntityTestTemplate { /** diff --git a/src/test/java/electrosphere/entity/state/equip/ServerEquipStateTests.java b/src/test/java/electrosphere/entity/state/equip/ServerEquipStateTests.java index a96adec0..0f4384d2 100644 --- a/src/test/java/electrosphere/entity/state/equip/ServerEquipStateTests.java +++ b/src/test/java/electrosphere/entity/state/equip/ServerEquipStateTests.java @@ -7,9 +7,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import org.joml.Vector3d; -import org.junit.jupiter.api.extension.ExtendWith; -import org.junit.jupiter.api.parallel.Execution; -import org.junit.jupiter.api.parallel.ExecutionMode; import annotations.IntegrationTest; import electrosphere.engine.Globals; @@ -25,9 +22,7 @@ import testutils.TestEngineUtils; /** * Server equip state tests */ -@ExtendWith(EntityTestTemplate.class) -@Execution(ExecutionMode.SAME_THREAD) -public class ServerEquipStateTests { +public class ServerEquipStateTests extends EntityTestTemplate { /** * Try equipping an item diff --git a/src/test/java/electrosphere/renderer/ui/elements/WindowTest.java b/src/test/java/electrosphere/renderer/ui/elements/WindowTest.java index 38ced0d6..bf4878be 100644 --- a/src/test/java/electrosphere/renderer/ui/elements/WindowTest.java +++ b/src/test/java/electrosphere/renderer/ui/elements/WindowTest.java @@ -1,7 +1,5 @@ package electrosphere.renderer.ui.elements; -import org.junit.jupiter.api.extension.ExtendWith; - import annotations.IntegrationTest; import electrosphere.menu.WindowUtils; import electrosphere.menu.mainmenu.MenuGeneratorsUITesting; @@ -11,7 +9,6 @@ import testutils.TestEngineUtils; /** * Tests for the window class */ -@ExtendWith(RenderingTestTemplate.class) public class WindowTest extends RenderingTestTemplate { /** @@ -25,7 +22,7 @@ public class WindowTest extends RenderingTestTemplate { //only simulating 1 frame after updating ui contents does not trigger re-render in local dev environment, but DOES in CI env //2 frames seems to fix this - TestEngineUtils.simulateFrames(2); + TestEngineUtils.simulateFrames(60); // TestRenderingUtils.saveTestRender("./test/java/electrosphere/renderer/ui/elements/window.png"); this.checkRender("Basic", "./test/java/electrosphere/renderer/ui/elements/window.png"); } diff --git a/src/test/java/template/EntityTestTemplate.java b/src/test/java/template/EntityTestTemplate.java index 9b2c608c..78a1a9e0 100644 --- a/src/test/java/template/EntityTestTemplate.java +++ b/src/test/java/template/EntityTestTemplate.java @@ -1,24 +1,17 @@ package template; import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ExtendWith; -import testutils.EngineInit; -import testutils.TestEngineUtils; +import template.extensions.EntityExtension; -@Tag("Entity") /** * Template for writing tests that do stuff with entities in a proper scene */ -public class EntityTestTemplate extends RenderingTestTemplate { - - @Override - public void beforeEach(ExtensionContext context) throws Exception { - //init engine - TestEngineUtils.initGraphicalEngine(); - - //load scene - EngineInit.setupConnectedTestScene(); - } +@Tag("integration") +@Tag("graphical") +@Tag("entity") +@ExtendWith(EntityExtension.class) +public class EntityTestTemplate { } diff --git a/src/test/java/template/RenderingTestTemplate.java b/src/test/java/template/RenderingTestTemplate.java index b92b91de..0df17ffe 100644 --- a/src/test/java/template/RenderingTestTemplate.java +++ b/src/test/java/template/RenderingTestTemplate.java @@ -3,21 +3,18 @@ package template; import java.io.File; import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.extension.AfterEachCallback; -import org.junit.jupiter.api.extension.BeforeEachCallback; -import org.junit.jupiter.api.extension.ExtensionContext; +import org.junit.jupiter.api.extension.ExtendWith; -import electrosphere.engine.Globals; -import electrosphere.engine.Main; -import testutils.TestEngineUtils; +import template.extensions.RenderingExtension; import testutils.TestRenderingUtils; -@Tag("integration") -@Tag("graphical") /** * A test class that involves testing renders */ -public class RenderingTestTemplate implements BeforeEachCallback, AfterEachCallback { +@Tag("integration") +@Tag("graphical") +@ExtendWith(RenderingExtension.class) +public class RenderingTestTemplate { /** * Checks the most recent render versus an existing image @@ -39,18 +36,4 @@ public class RenderingTestTemplate implements BeforeEachCallback, AfterEachCallb }); } - @Override - public void afterEach(ExtensionContext context) throws Exception { - Globals.WINDOW_DECORATED = false; - Globals.WINDOW_FULLSCREEN = true; - Globals.WINDOW_WIDTH = 1920; - Globals.WINDOW_HEIGHT = 1080; - TestEngineUtils.initGraphicalEngine(); - } - - @Override - public void beforeEach(ExtensionContext context) throws Exception { - Main.shutdown(); - } - } diff --git a/src/test/java/template/extensions/EntityExtension.java b/src/test/java/template/extensions/EntityExtension.java new file mode 100644 index 00000000..c56bb279 --- /dev/null +++ b/src/test/java/template/extensions/EntityExtension.java @@ -0,0 +1,30 @@ +package template.extensions; + +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +import electrosphere.engine.Main; +import testutils.EngineInit; +import testutils.TestEngineUtils; + +/** + * Spins up and tears down entity testing environment + */ +public class EntityExtension implements BeforeEachCallback, AfterEachCallback { + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + //init engine + TestEngineUtils.initGraphicalEngine(); + + //load scene + EngineInit.setupConnectedTestScene(); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + Main.shutdown(); + } + +} diff --git a/src/test/java/template/extensions/RenderingExtension.java b/src/test/java/template/extensions/RenderingExtension.java new file mode 100644 index 00000000..5bac1da6 --- /dev/null +++ b/src/test/java/template/extensions/RenderingExtension.java @@ -0,0 +1,30 @@ +package template.extensions; + +import org.junit.jupiter.api.extension.AfterEachCallback; +import org.junit.jupiter.api.extension.BeforeEachCallback; +import org.junit.jupiter.api.extension.ExtensionContext; + +import electrosphere.engine.Globals; +import electrosphere.engine.Main; +import testutils.TestEngineUtils; + +/** + * Spins up an tears down generic rendering environment + */ +public class RenderingExtension implements BeforeEachCallback, AfterEachCallback { + + @Override + public void beforeEach(ExtensionContext context) throws Exception { + Globals.WINDOW_DECORATED = false; + Globals.WINDOW_FULLSCREEN = true; + Globals.WINDOW_WIDTH = 1920; + Globals.WINDOW_HEIGHT = 1080; + TestEngineUtils.initGraphicalEngine(); + } + + @Override + public void afterEach(ExtensionContext context) throws Exception { + Main.shutdown(); + } + +} \ No newline at end of file