From 9bd2b6b38f1a8acbfe14bde5b2dde575bc96f14e Mon Sep 17 00:00:00 2001 From: austin Date: Sat, 24 Aug 2024 17:24:20 -0400 Subject: [PATCH] work on resetting scene on escaping to main menu --- docs/src/progress/renderertodo.md | 5 +- .../java/electrosphere/engine/Globals.java | 10 +++ src/main/java/electrosphere/engine/Main.java | 10 +-- .../engine/loadingthreads/ClientLoading.java | 19 +---- .../loadingthreads/LevelEditorLoading.java | 6 +- .../engine/loadingthreads/LoadingThread.java | 11 ++- .../engine/loadingthreads/LoadingUtils.java | 11 +-- .../loadingthreads/MainMenuLoading.java | 83 +++++++++++++++++++ .../engine/threads/LabeledThread.java | 54 ++++++++++++ .../engine/{ => threads}/ThreadManager.java | 32 +++++-- .../java/electrosphere/logger/Logger.java | 13 +++ .../menu/ingame/MenuGeneratorsInGame.java | 4 +- .../net/client/ClientNetworking.java | 26 +++++- .../java/electrosphere/net/server/Server.java | 9 +- .../net/server/ServerConnectionHandler.java | 8 +- .../net/server/player/Player.java | 3 + .../renderer/pipelines/CompositePipeline.java | 24 +++--- .../datacell/GriddedDataCellManager.java | 3 +- 18 files changed, 269 insertions(+), 62 deletions(-) create mode 100644 src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java create mode 100644 src/main/java/electrosphere/engine/threads/LabeledThread.java rename src/main/java/electrosphere/engine/{ => threads}/ThreadManager.java (75%) diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index e2c690d0..ce2fef6a 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -626,7 +626,10 @@ Fix entity scene test spinup by preventing networking sockets from closing Thread manager/tracker + properly closing threads on engine close (08/24/2024) -Disable anime outlines effect +Resetting globals for multiple test runs from coding environment +Return to main menu from ingame +Tagging threads in manager +Quitting to main menu # TODO diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 334520f3..a41f73cc 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -31,6 +31,7 @@ import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.engine.assetmanager.AssetManager; import electrosphere.engine.loadingthreads.InitialAssetLoading; import electrosphere.engine.profiler.Profiler; +import electrosphere.engine.threads.ThreadManager; import electrosphere.engine.time.Timekeeper; import electrosphere.entity.Entity; import electrosphere.entity.Scene; @@ -587,6 +588,15 @@ public class Globals { Globals.assetManager.loadAssetsInQueue(); } + /** + * Resets global values + */ + public static void resetGlobals(){ + Globals.playerEntity = null; + Globals.playerCamera = null; + Globals.firstPersonEntity = null; + } + } diff --git a/src/main/java/electrosphere/engine/Main.java b/src/main/java/electrosphere/engine/Main.java index ca0d1e35..3af1c30d 100644 --- a/src/main/java/electrosphere/engine/Main.java +++ b/src/main/java/electrosphere/engine/Main.java @@ -17,6 +17,7 @@ import electrosphere.controls.ControlHandler.ControlsState; import electrosphere.engine.cli.CLIParser; import electrosphere.engine.loadingthreads.LoadingThread; import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.engine.time.Timekeeper; import electrosphere.game.config.UserSettings; import electrosphere.game.server.world.MacroData; @@ -80,7 +81,8 @@ public class Main { Globals.initGlobals(); //init scripting engine - Globals.threadManager.start(new LoadingThread(LoadingThreadType.SCRIPT_ENGINE)); + Globals.scriptEngine.init(); + // Globals.threadManager.start(new LoadingThread(LoadingThreadType.SCRIPT_ENGINE)); //controls if(Globals.RUN_CLIENT){ @@ -154,7 +156,7 @@ public class Main { Globals.controlHandler.hintUpdateControlState(ControlsState.TITLE_MENU); //start initial asset loading - Globals.threadManager.start(new Thread(Globals.initialAssetLoadingThread)); + Globals.threadManager.start(ThreadLabel.ASSET_LOADING, new Thread(Globals.initialAssetLoadingThread)); } //Sets a hook that fires when the engine process stops @@ -443,9 +445,7 @@ public class Main { //shutdown ode OdeHelper.closeODE(); //reset globals - Globals.playerEntity = null; - Globals.playerCamera = null; - Globals.firstPersonEntity = null; + Globals.resetGlobals(); } static void sleep(int i) { diff --git a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java index cdca9561..81e0d443 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ClientLoading.java @@ -11,6 +11,7 @@ import electrosphere.client.targeting.crosshair.Crosshair; import electrosphere.client.terrain.cells.DrawCellManager; import electrosphere.controls.ControlHandler; import electrosphere.engine.Globals; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.DrawableUtils; import electrosphere.entity.Entity; import electrosphere.entity.EntityCreationUtils; @@ -26,22 +27,6 @@ import electrosphere.net.client.ClientNetworking; import electrosphere.renderer.ui.elements.Window; public class ClientLoading { - - /** - * Loads the main menu - * @param params Params (this thread type does not accept any) - */ - protected static void loadMainMenu(Object[] params){ - Window loadingWindow = (Window)Globals.elementManager.getWindow(WindowStrings.WINDOW_LOADING); - if(loadingWindow != null){ - WindowUtils.recursiveSetVisible(loadingWindow,false); - } - WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_MAIN); - Window mainMenuWindow = (Window)Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN); - if(mainMenuWindow != null){ - WindowUtils.recursiveSetVisible(mainMenuWindow, true); - } - } protected static void loadCharacterServer(Object[] params){ @@ -129,7 +114,7 @@ public class ClientLoading { //start client networking if(Globals.RUN_CLIENT){ Globals.clientConnection = new ClientNetworking(NetUtils.getAddress(),NetUtils.getPort()); - Globals.threadManager.start(new Thread(Globals.clientConnection)); + Globals.threadManager.start(ThreadLabel.NETWORKING_CLIENT, new Thread(Globals.clientConnection)); } } diff --git a/src/main/java/electrosphere/engine/loadingthreads/LevelEditorLoading.java b/src/main/java/electrosphere/engine/loadingthreads/LevelEditorLoading.java index 864bf9f4..f83709d9 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/LevelEditorLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/LevelEditorLoading.java @@ -74,9 +74,9 @@ public class LevelEditorLoading { Globals.clientPassword = AuthenticationManager.getHashedString("leveleditor"); ServerConnectionHandler serverPlayerConnection = LoadingUtils.initLocalConnection(true); //wait for player object creation - while(Globals.playerManager.getPlayers().size() < 1){ + while(Globals.playerManager.getPlayers().size() < 1 || !Globals.clientConnection.isInitialized()){ try { - TimeUnit.MILLISECONDS.sleep(10); + TimeUnit.MILLISECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } @@ -93,7 +93,7 @@ public class LevelEditorLoading { //the less juicy client setup part while(Globals.gameConfigCurrent.getCreatureTypeLoader().getPlayableRaces().size() == 0){ try { - TimeUnit.MILLISECONDS.sleep(5); + TimeUnit.MILLISECONDS.sleep(1); } catch (InterruptedException ex) {} } diff --git a/src/main/java/electrosphere/engine/loadingthreads/LoadingThread.java b/src/main/java/electrosphere/engine/loadingthreads/LoadingThread.java index 8e9ec6a7..d6de4cb9 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/LoadingThread.java +++ b/src/main/java/electrosphere/engine/loadingthreads/LoadingThread.java @@ -15,6 +15,11 @@ public class LoadingThread extends Thread { */ TITLE_MENU, + /** + * Loads the main game title menu + */ + RETURN_TITLE_MENU, + /** * Loads the main game */ @@ -83,7 +88,11 @@ public class LoadingThread extends Thread { switch(threadType){ case TITLE_MENU: { - ClientLoading.loadMainMenu(this.params); + MainMenuLoading.loadMainMenu(this.params); + } break; + + case RETURN_TITLE_MENU: { + MainMenuLoading.returnToMainMenu(this.params); } break; case MAIN_GAME: { diff --git a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java index ecbadd4f..ac086213 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java +++ b/src/main/java/electrosphere/engine/loadingthreads/LoadingUtils.java @@ -10,10 +10,12 @@ import org.joml.Vector3i; import electrosphere.auth.AuthenticationManager; import electrosphere.engine.Globals; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.types.creature.CreatureTemplate; import electrosphere.game.data.creature.type.CreatureData; import electrosphere.game.data.creature.type.visualattribute.VisualAttribute; import electrosphere.game.server.world.MacroData; +import electrosphere.logger.LoggerInterface; import electrosphere.net.NetUtils; import electrosphere.net.client.ClientNetworking; import electrosphere.net.parser.net.message.CharacterMessage; @@ -64,7 +66,7 @@ public class LoadingUtils { if(Globals.RUN_SERVER){ Globals.server = new Server(NetUtils.getPort()); Thread serverThread = new Thread(Globals.server); - Globals.threadManager.start(serverThread); + Globals.threadManager.start(ThreadLabel.NETWORKING_SERVER, serverThread); } } @@ -80,7 +82,7 @@ public class LoadingUtils { //start client networking if(Globals.RUN_CLIENT){ Globals.clientConnection = new ClientNetworking(NetUtils.getAddress(),NetUtils.getPort()); - Globals.threadManager.start(new Thread(Globals.clientConnection)); + Globals.threadManager.start(ThreadLabel.NETWORKING_CLIENT, new Thread(Globals.clientConnection)); } } @@ -104,10 +106,9 @@ public class LoadingUtils { rVal = Globals.server.addLocalPlayer(serverInput, serverOutput); //start client communication thread Globals.clientConnection = new ClientNetworking(clientInput,clientOutput); - Globals.threadManager.start(new Thread(Globals.clientConnection)); + Globals.threadManager.start(ThreadLabel.NETWORKING_CLIENT, new Thread(Globals.clientConnection)); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + LoggerInterface.loggerNetworking.ERROR(e); } return rVal; } diff --git a/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java b/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java new file mode 100644 index 00000000..1900d84f --- /dev/null +++ b/src/main/java/electrosphere/engine/loadingthreads/MainMenuLoading.java @@ -0,0 +1,83 @@ +package electrosphere.engine.loadingthreads; + +import electrosphere.engine.Globals; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; +import electrosphere.menu.WindowStrings; +import electrosphere.menu.WindowUtils; +import electrosphere.menu.mainmenu.MenuGeneratorsTitleMenu; +import electrosphere.renderer.ui.elements.Window; +import electrosphere.server.datacell.RealmManager; + +/** + * Loading thread that returns the client to the main menu + */ +public class MainMenuLoading { + + + /** + * Resets all state to main menu + * @param params not necessary + */ + protected static void returnToMainMenu(Object[] params){ + // + //stop rendering game + Globals.RENDER_FLAG_RENDER_SHADOW_MAP = false; + Globals.RENDER_FLAG_RENDER_SCREEN_FRAMEBUFFER_CONTENT = false; + Globals.RENDER_FLAG_RENDER_SCREEN_FRAMEBUFFER = false; + Globals.RENDER_FLAG_RENDER_UI = true; + Globals.RENDER_FLAG_RENDER_BLACK_BACKGROUND = true; + + // + //reset state + MainMenuLoading.resetClientState(); + MainMenuLoading.resetServerState(); + Globals.resetGlobals(); + Globals.threadManager.interruptLabel(ThreadLabel.NETWORKING_CLIENT); + Globals.threadManager.interruptLabel(ThreadLabel.NETWORKING_SERVER); + + // + //reveal in game main menu + Window inGameMainMenu = (Window)Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_INGAME_MAIN); + if(inGameMainMenu != null){ + WindowUtils.recursiveSetVisible(inGameMainMenu,false); + } + MainMenuLoading.loadMainMenu(params); + } + + /** + * Resets the client state + */ + private static void resetClientState(){ + Globals.clientSimulation = null; + Globals.clientConnection.setShouldDisconnect(true); + } + + /** + * Resets the server state + */ + private static void resetServerState(){ + Globals.server.close(); + Globals.server = null; + Globals.serverSynchronizationManager = null; + Globals.realmManager = new RealmManager(); + Globals.macroSimulation = null; + } + + /** + * Loads the main menu + * @param params Params (this thread type does not accept any) + */ + protected static void loadMainMenu(Object[] params){ + Window loadingWindow = (Window)Globals.elementManager.getWindow(WindowStrings.WINDOW_LOADING); + if(loadingWindow != null){ + WindowUtils.recursiveSetVisible(loadingWindow,false); + } + WindowUtils.focusWindow(WindowStrings.WINDOW_MENU_MAIN); + Window mainMenuWindow = (Window)Globals.elementManager.getWindow(WindowStrings.WINDOW_MENU_MAIN); + WindowUtils.replaceMainMenuContents(MenuGeneratorsTitleMenu.createTitleMenu()); + if(mainMenuWindow != null){ + WindowUtils.recursiveSetVisible(mainMenuWindow, true); + } + } + +} diff --git a/src/main/java/electrosphere/engine/threads/LabeledThread.java b/src/main/java/electrosphere/engine/threads/LabeledThread.java new file mode 100644 index 00000000..a40be5f2 --- /dev/null +++ b/src/main/java/electrosphere/engine/threads/LabeledThread.java @@ -0,0 +1,54 @@ +package electrosphere.engine.threads; + +/** + * A thread with an associated label + */ +public class LabeledThread { + + /** + * The label associated with the thread + */ + public static enum ThreadLabel { + NETWORKING_SERVER, + NETWORKING_CLIENT, + ASSET_LOADING, + LOADING, + } + + /** + * The label + */ + ThreadLabel label; + + /** + * The actual thread + */ + Thread thread; + + /** + * Constructor + * @param label + * @param thread + */ + public LabeledThread(ThreadLabel label, Thread thread){ + this.label = label; + this.thread = thread; + } + + /** + * Gets the label + * @return The label + */ + public ThreadLabel getLabel(){ + return label; + } + + /** + * Gets the thread + * @return The thread + */ + public Thread getThread(){ + return thread; + } + +} diff --git a/src/main/java/electrosphere/engine/ThreadManager.java b/src/main/java/electrosphere/engine/threads/ThreadManager.java similarity index 75% rename from src/main/java/electrosphere/engine/ThreadManager.java rename to src/main/java/electrosphere/engine/threads/ThreadManager.java index d7d6007f..b07d02be 100644 --- a/src/main/java/electrosphere/engine/ThreadManager.java +++ b/src/main/java/electrosphere/engine/threads/ThreadManager.java @@ -1,11 +1,13 @@ -package electrosphere.engine; +package electrosphere.engine.threads; import java.util.LinkedList; import java.util.List; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; +import electrosphere.engine.Globals; import electrosphere.engine.loadingthreads.LoadingThread; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.util.CodeUtils; /** @@ -17,7 +19,7 @@ public class ThreadManager { Semaphore threadLock = new Semaphore(1); //All threads that are actively running - private List activeThreads = new LinkedList(); + private List activeThreads = new LinkedList(); //All loading threads that are actively running private List loadingThreads = new LinkedList(); @@ -53,9 +55,9 @@ public class ThreadManager { * Starts a new thread with tracking * @param thread The thread to start */ - public void start(Thread thread){ + public void start(ThreadLabel label, Thread thread){ threadLock.acquireUninterruptibly(); - activeThreads.add(thread); + activeThreads.add(new LabeledThread(label, thread)); thread.start(); threadLock.release(); } @@ -66,7 +68,7 @@ public class ThreadManager { */ public void start(LoadingThread thread){ threadLock.acquireUninterruptibly(); - activeThreads.add(thread); + activeThreads.add(new LabeledThread(ThreadLabel.LOADING, thread)); loadingThreads.add(thread); thread.start(); threadLock.release(); @@ -95,8 +97,8 @@ public class ThreadManager { // //interrupt all threads for(int i = 0; i < 3; i++){ - for(Thread thread : activeThreads){ - thread.interrupt(); + for(LabeledThread thread : activeThreads){ + thread.getThread().interrupt(); } try { TimeUnit.MILLISECONDS.sleep(3); @@ -115,4 +117,20 @@ public class ThreadManager { return this.shouldKeepRunning; } + /** + * Interrupts all thread under a label + * @param label The label + */ + public void interruptLabel(ThreadLabel label){ + threadLock.acquireUninterruptibly(); + // + //interrupt threads + for(LabeledThread thread : activeThreads){ + if(thread.getLabel() == label){ + thread.getThread().interrupt(); + } + } + threadLock.release(); + } + } diff --git a/src/main/java/electrosphere/logger/Logger.java b/src/main/java/electrosphere/logger/Logger.java index 431f0db4..30f8ccc0 100644 --- a/src/main/java/electrosphere/logger/Logger.java +++ b/src/main/java/electrosphere/logger/Logger.java @@ -66,6 +66,19 @@ public class Logger { System.out.println(message); } } + + /** + * Logs a debug message. + * This should be used for debugging messages that are executed on a given condition that won't necessarily be every loop (ie all network messages) + * @param message The message to report + * @param e The exception to also log + */ + public void DEBUG(String message, Exception e){ + if(level == LogLevel.LOOP_DEBUG || level == LogLevel.DEBUG){ + System.out.println(message); + e.printStackTrace(); + } + } /** diff --git a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java index 7e29a5cc..9fdcf532 100644 --- a/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java +++ b/src/main/java/electrosphere/menu/ingame/MenuGeneratorsInGame.java @@ -5,6 +5,8 @@ import org.joml.Vector3f; import electrosphere.controls.ControlHandler.ControlsState; import electrosphere.engine.Globals; import electrosphere.engine.Main; +import electrosphere.engine.loadingthreads.LoadingThread; +import electrosphere.engine.loadingthreads.LoadingThread.LoadingThreadType; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; @@ -104,7 +106,7 @@ public class MenuGeneratorsInGame { quitButton.addChild(quitLabel); div.addChild(quitButton); quitButton.setOnClick(new ClickableElement.ClickEventCallback(){public boolean execute(ClickEvent event){ - Main.running = false; + Globals.threadManager.start(new LoadingThread(LoadingThreadType.RETURN_TITLE_MENU)); return false; }}); diff --git a/src/main/java/electrosphere/net/client/ClientNetworking.java b/src/main/java/electrosphere/net/client/ClientNetworking.java index 7ca1c75a..4ab49e9a 100644 --- a/src/main/java/electrosphere/net/client/ClientNetworking.java +++ b/src/main/java/electrosphere/net/client/ClientNetworking.java @@ -44,7 +44,7 @@ public class ClientNetworking implements Runnable { // CryptoOutputStream outputStream; InputStream inputStream; OutputStream outputStream; - boolean initialized; + boolean initialized = false; NetworkParser parser; /** @@ -69,6 +69,9 @@ public class ClientNetworking implements Runnable { //debugging stuff String netMonitorHandle = null; + + //Signals the thread to stop + boolean shouldDisconnect = false; /** * Creates a ClientNetworking object with a server address and port @@ -76,6 +79,7 @@ public class ClientNetworking implements Runnable { * @param port The port to connect to on the server */ public ClientNetworking(String address, int port){ + this.shouldDisconnect = false; this.address = address; this.port = port; } @@ -87,6 +91,7 @@ public class ClientNetworking implements Runnable { */ public ClientNetworking(InputStream clientInputStream, OutputStream clientOutputStream){ this.local = true; + this.shouldDisconnect = false; this.inputStream = clientInputStream; this.outputStream = clientOutputStream; } @@ -168,7 +173,7 @@ public class ClientNetworking implements Runnable { //start parsing messages initialized = true; - while(Globals.threadManager.shouldKeepRunning()){ + while(Globals.threadManager.shouldKeepRunning() && !this.shouldDisconnect){ //attempt poll incoming messages parser.readMessagesIn(); //outgoing messages @@ -293,5 +298,22 @@ public class ClientNetworking implements Runnable { public void markReceivedPongMessage(){ lastPongTime = System.currentTimeMillis(); } + + /** + * Alerts the client networking that it should stop + * @param shouldDisconnect true to disconnect, false to stay connected + */ + public void setShouldDisconnect(boolean shouldDisconnect){ + this.shouldDisconnect = shouldDisconnect; + } + + /** + * Gets whether the client networking is intiialized or not + * @return true if initialized, false otherwise + */ + public boolean isInitialized(){ + return initialized; + } + } diff --git a/src/main/java/electrosphere/net/server/Server.java b/src/main/java/electrosphere/net/server/Server.java index 82647060..1b77b205 100644 --- a/src/main/java/electrosphere/net/server/Server.java +++ b/src/main/java/electrosphere/net/server/Server.java @@ -1,6 +1,7 @@ package electrosphere.net.server; import electrosphere.engine.Globals; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.ServerEntityUtils; import electrosphere.logger.LoggerInterface; import electrosphere.net.NetUtils; @@ -74,7 +75,7 @@ public class Server implements Runnable { } catch (IOException ex) { LoggerInterface.loggerNetworking.ERROR("Failed to start server socket!",ex); } - while(Globals.threadManager.shouldKeepRunning()){ + while(Globals.threadManager.shouldKeepRunning() && !serverSocket.isClosed()){ Socket newSocket; try { newSocket = serverSocket.accept(); @@ -83,10 +84,10 @@ public class Server implements Runnable { // clientMap.put(newSocket.getInetAddress().getHostAddress(), newClient); socketConnectionMap.put(newSocket, newClient); activeConnections.add(newClient); - Globals.threadManager.start(new Thread(newClient)); + Globals.threadManager.start(ThreadLabel.NETWORKING_SERVER, new Thread(newClient)); connectListLock.release(); } catch (SocketException ex){ - LoggerInterface.loggerNetworking.ERROR("Socket closed!",ex); + LoggerInterface.loggerNetworking.DEBUG("Server Socket closed!",ex); } catch (IOException ex) { LoggerInterface.loggerNetworking.ERROR("Socket error on client socket!",ex); } @@ -142,7 +143,7 @@ public class Server implements Runnable { connectListLock.acquireUninterruptibly(); ServerConnectionHandler newClient = new ServerConnectionHandler(serverInputStream,serverOutputStream); activeConnections.add(newClient); - Globals.threadManager.start(new Thread(newClient)); + Globals.threadManager.start(ThreadLabel.NETWORKING_SERVER, new Thread(newClient)); connectListLock.release(); return newClient; } diff --git a/src/main/java/electrosphere/net/server/ServerConnectionHandler.java b/src/main/java/electrosphere/net/server/ServerConnectionHandler.java index d97c0276..4cd7e990 100644 --- a/src/main/java/electrosphere/net/server/ServerConnectionHandler.java +++ b/src/main/java/electrosphere/net/server/ServerConnectionHandler.java @@ -8,7 +8,6 @@ import electrosphere.net.parser.net.message.NetworkMessage; import electrosphere.net.parser.net.message.ServerMessage; import electrosphere.net.parser.net.raw.NetworkParser; import electrosphere.net.server.player.Player; -import electrosphere.util.CodeUtils; import java.io.IOException; import java.io.InputStream; @@ -308,7 +307,8 @@ public class ServerConnectionHandler implements Runnable { //sleep TimeUnit.MILLISECONDS.sleep(1); } catch (InterruptedException ex) { - CodeUtils.todo(ex, "Handle sleep interrupt on server connection"); + //silently ignore + // CodeUtils.todo(ex, "Handle sleep interrupt on server connection"); } } @@ -411,7 +411,9 @@ public class ServerConnectionHandler implements Runnable { } this.isConnected = false; //add connection to server list of connections to cleanup - Globals.server.addClientToCleanup(this); + if(Globals.server != null){ + Globals.server.addClientToCleanup(this); + } } } diff --git a/src/main/java/electrosphere/net/server/player/Player.java b/src/main/java/electrosphere/net/server/player/Player.java index 1b0efdcc..5dce9041 100644 --- a/src/main/java/electrosphere/net/server/player/Player.java +++ b/src/main/java/electrosphere/net/server/player/Player.java @@ -38,6 +38,9 @@ public class Player { } public int getId() { + if(connectionHandler != null){ + return this.connectionHandler.getPlayerId(); + } return id; } diff --git a/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java b/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java index 163577c4..a934e4fa 100644 --- a/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java +++ b/src/main/java/electrosphere/renderer/pipelines/CompositePipeline.java @@ -28,20 +28,20 @@ public class CompositePipeline implements RenderPipeline { // //Draw anime outline // - // openGLState.setActiveShader(renderPipelineState, RenderingEngine.compositeAnimeOutline); + openGLState.setActiveShader(renderPipelineState, RenderingEngine.compositeAnimeOutline); - // openGLState.glActiveTexture(GL40.GL_TEXTURE0); - // openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); - // openGLState.glActiveTexture(GL40.GL_TEXTURE1); - // openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); - // openGLState.glActiveTexture(GL40.GL_TEXTURE2); - // openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); - // openGLState.glActiveTexture(GL40.GL_TEXTURE3); - // openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); - // openGLState.glActiveTexture(GL40.GL_TEXTURE0); - // openGLState.glBindTexture(GL40.GL_TEXTURE_2D, RenderingEngine.normalsOutlineTexture.getTexturePointer()); + openGLState.glActiveTexture(GL40.GL_TEXTURE0); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE1); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE2); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE3); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, 0); + openGLState.glActiveTexture(GL40.GL_TEXTURE0); + openGLState.glBindTexture(GL40.GL_TEXTURE_2D, RenderingEngine.normalsOutlineTexture.getTexturePointer()); - // GL40.glDrawArrays(GL40.GL_TRIANGLES, 0, 6); + GL40.glDrawArrays(GL40.GL_TRIANGLES, 0, 6); // //Composite transparency on top of solids diff --git a/src/main/java/electrosphere/server/datacell/GriddedDataCellManager.java b/src/main/java/electrosphere/server/datacell/GriddedDataCellManager.java index ef717462..2f55d395 100644 --- a/src/main/java/electrosphere/server/datacell/GriddedDataCellManager.java +++ b/src/main/java/electrosphere/server/datacell/GriddedDataCellManager.java @@ -11,6 +11,7 @@ import org.joml.Vector3d; import org.joml.Vector3i; import electrosphere.engine.Globals; +import electrosphere.engine.threads.LabeledThread.ThreadLabel; import electrosphere.entity.Entity; import electrosphere.entity.EntityUtils; import electrosphere.game.server.world.ServerWorldData; @@ -439,7 +440,7 @@ public class GriddedDataCellManager implements DataCellManager, VoxelCellManager } }); groundDataCells.get(getServerDataCellKey(worldPos)).setReady(false); - Globals.threadManager.start(thread); + Globals.threadManager.start(ThreadLabel.ASSET_LOADING, thread); } /**