From 4ddb894e5c4b4d2349064d97c66b613d50bdf3a6 Mon Sep 17 00:00:00 2001 From: austin Date: Wed, 14 May 2025 19:16:53 -0400 Subject: [PATCH] fix engine not closing when x button --- docs/src/progress/renderertodo.md | 1 + src/main/java/electrosphere/engine/Main.java | 11 ++++---- .../engine/threads/ThreadManager.java | 13 +--------- .../server/datacell/RealmManager.java | 26 ++++++++++--------- 4 files changed, 21 insertions(+), 30 deletions(-) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 35c637fb..8380f5b7 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1775,6 +1775,7 @@ Interaction editing debug menu Fix chest physics&interaction data Break out collidable template edit into dedicated component Fix virtual scrollable +Fix engine not closing when X button is hit on main menu diff --git a/src/main/java/electrosphere/engine/Main.java b/src/main/java/electrosphere/engine/Main.java index a7b23b33..09a48a79 100644 --- a/src/main/java/electrosphere/engine/Main.java +++ b/src/main/java/electrosphere/engine/Main.java @@ -1,10 +1,9 @@ package electrosphere.engine; -import static org.lwjgl.glfw.GLFW.glfwWindowShouldClose; - import java.util.concurrent.TimeUnit; import org.graalvm.polyglot.HostAccess.Export; +import org.lwjgl.glfw.GLFW; import org.ode4j.ode.OdeHelper; import electrosphere.audio.AudioEngine; @@ -118,7 +117,7 @@ public class Main { //controls if(Globals.RUN_CLIENT){ - initControlHandler(); + Main.initControlHandler(); } //init ODE @@ -185,8 +184,8 @@ public class Main { * Runs the main loop indefinitely. Blocks the thread this is called in. */ public static void mainLoop(){ - mainLoop(0); - shutdown(); + Main.mainLoop(0); + Main.shutdown(); } /** @@ -369,7 +368,7 @@ public class Main { running = false; } } else { - if(Globals.ENGINE_SHUTDOWN_FLAG || (Globals.RUN_CLIENT && glfwWindowShouldClose(Globals.window))){ + if(Globals.ENGINE_SHUTDOWN_FLAG || (Globals.RUN_CLIENT && GLFW.glfwWindowShouldClose(Globals.window))){ running = false; } } diff --git a/src/main/java/electrosphere/engine/threads/ThreadManager.java b/src/main/java/electrosphere/engine/threads/ThreadManager.java index ff89d21a..33504522 100644 --- a/src/main/java/electrosphere/engine/threads/ThreadManager.java +++ b/src/main/java/electrosphere/engine/threads/ThreadManager.java @@ -13,7 +13,6 @@ import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.types.terrain.BlockChunkEntity; import electrosphere.entity.types.terrain.TerrainChunk; import electrosphere.server.ai.services.PathfindingService; -import electrosphere.server.datacell.Realm; import electrosphere.server.datacell.gridded.GriddedDataCellLoaderService; import electrosphere.util.CodeUtils; @@ -117,17 +116,7 @@ public class ThreadManager { } if(Globals.realmManager != null && Globals.realmManager.getRealms() != null){ - for(Realm realm : Globals.realmManager.getRealms()){ - if(realm.getServerWorldData() != null && realm.getServerWorldData().getServerTerrainManager() != null){ - realm.getServerWorldData().getServerTerrainManager().closeThreads(); - } - if(realm.getServerWorldData() != null && realm.getServerWorldData().getServerBlockManager() != null){ - realm.getServerWorldData().getServerBlockManager().closeThreads(); - } - if(realm.getDataCellManager() != null){ - realm.getDataCellManager().halt(); - } - } + Globals.realmManager.reset(); } /** diff --git a/src/main/java/electrosphere/server/datacell/RealmManager.java b/src/main/java/electrosphere/server/datacell/RealmManager.java index 6efa5982..25af0085 100644 --- a/src/main/java/electrosphere/server/datacell/RealmManager.java +++ b/src/main/java/electrosphere/server/datacell/RealmManager.java @@ -245,6 +245,11 @@ public class RealmManager { * Resets the realm manager */ public void reset(){ + for(Realm realm : this.realms){ + if(realm.getServerWorldData() != null && realm.getServerWorldData().getServerTerrainManager() != null){ + realm.getServerWorldData().getServerTerrainManager().closeThreads(); + } + } for(Realm realm : this.realms){ if( realm.getServerWorldData() != null && @@ -254,6 +259,15 @@ public class RealmManager { ){ FluidAcceleratedSimulator.cleanup(); } + if(realm.getServerWorldData() != null && realm.getServerWorldData().getServerTerrainManager() != null){ + realm.getServerWorldData().getServerTerrainManager().closeThreads(); + } + if(realm.getServerWorldData() != null && realm.getServerWorldData().getServerBlockManager() != null){ + realm.getServerWorldData().getServerBlockManager().closeThreads(); + } + if(realm.getDataCellManager() != null){ + realm.getDataCellManager().halt(); + } } this.realms.clear(); lock.lock(); @@ -262,17 +276,5 @@ public class RealmManager { lock.unlock(); } - /** - * Closes the realm manager, destroying all resources - */ - public void close(){ - for(Realm realm : this.realms){ - if(realm.getServerWorldData() != null && realm.getServerWorldData().getServerTerrainManager() != null){ - realm.getServerWorldData().getServerTerrainManager().closeThreads(); - } - } - this.reset(); - } - }