diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index d9235c87..0998defc 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1829,6 +1829,7 @@ Move fluidCellManager into clientState Move engine flags under engineState Move rendering flags under renderingEngine Move database connection into serverState +Move more services into engineState diff --git a/src/main/java/electrosphere/client/script/ClientScriptUtils.java b/src/main/java/electrosphere/client/script/ClientScriptUtils.java index c1eb9ba6..83885ef3 100644 --- a/src/main/java/electrosphere/client/script/ClientScriptUtils.java +++ b/src/main/java/electrosphere/client/script/ClientScriptUtils.java @@ -14,9 +14,9 @@ public class ClientScriptUtils { * @param args The arguments provided alongside the signal */ public static void fireSignal(String signalName, Object ... args){ - Globals.scriptEngine.getScriptContext().executeSynchronously(() -> { - if(Globals.scriptEngine != null && Globals.scriptEngine.isInitialized()){ - Globals.scriptEngine.getScriptContext().fireSignal(signalName, ScriptEngine.GLOBAL_SCENE, args); + Globals.engineState.scriptEngine.getScriptContext().executeSynchronously(() -> { + if(Globals.engineState.scriptEngine != null && Globals.engineState.scriptEngine.isInitialized()){ + Globals.engineState.scriptEngine.getScriptContext().fireSignal(signalName, ScriptEngine.GLOBAL_SCENE, args); } }); } diff --git a/src/main/java/electrosphere/engine/EngineState.java b/src/main/java/electrosphere/engine/EngineState.java index da252b94..57bf08be 100644 --- a/src/main/java/electrosphere/engine/EngineState.java +++ b/src/main/java/electrosphere/engine/EngineState.java @@ -2,12 +2,14 @@ package electrosphere.engine; import java.lang.management.ManagementFactory; +import electrosphere.engine.os.fs.FileWatcherService; import electrosphere.engine.service.ServiceManager; import electrosphere.engine.signal.SignalSystem; import electrosphere.engine.signal.sync.MainThreadSignalService; import electrosphere.engine.threads.ThreadManager; import electrosphere.engine.time.Timekeeper; import electrosphere.logger.LoggerInterface; +import electrosphere.script.ScriptEngine; /** * State of the engine @@ -44,6 +46,16 @@ public class EngineState { */ public final MainThreadSignalService mainThreadSignalService; + /** + * The scripting engine + */ + public final ScriptEngine scriptEngine; + + /** + * The file watcher service + */ + public final FileWatcherService fileWatcherService; + /** * Engine-wide flags */ @@ -63,6 +75,8 @@ public class EngineState { this.threadManager.init(); this.signalSystem = (SignalSystem)this.serviceManager.registerService(new SignalSystem()); this.mainThreadSignalService = (MainThreadSignalService)this.serviceManager.registerService(new MainThreadSignalService()); + this.scriptEngine = (ScriptEngine)this.serviceManager.registerService(new ScriptEngine()); + this.fileWatcherService = (FileWatcherService)this.serviceManager.registerService(new FileWatcherService()); } /** diff --git a/src/main/java/electrosphere/engine/Globals.java b/src/main/java/electrosphere/engine/Globals.java index 0cfd1a35..0e46c1f9 100644 --- a/src/main/java/electrosphere/engine/Globals.java +++ b/src/main/java/electrosphere/engine/Globals.java @@ -16,7 +16,6 @@ import electrosphere.controls.cursor.CursorState; import electrosphere.data.voxel.VoxelType; import electrosphere.engine.assetmanager.AssetDataStrings; import electrosphere.engine.assetmanager.AssetManager; -import electrosphere.engine.os.fs.FileWatcherService; import electrosphere.engine.profiler.Profiler; import electrosphere.logger.LoggerInterface; import electrosphere.net.config.NetConfig; @@ -32,7 +31,6 @@ import electrosphere.renderer.texture.TextureMap; import electrosphere.renderer.ui.ElementService; import electrosphere.renderer.ui.elements.ImagePanel; import electrosphere.renderer.ui.font.FontManager; -import electrosphere.script.ScriptEngine; import electrosphere.server.ServerState; import electrosphere.server.entity.poseactor.PoseModel; import electrosphere.util.FileUtils; @@ -71,6 +69,16 @@ public class Globals { * The audio engine */ public static AudioEngine audioEngine; + + /** + * The asset manager + */ + public static AssetManager assetManager; + + /** + * Authentication manager + */ + public static AuthenticationManager authenticationManager; // @@ -90,15 +98,6 @@ public class Globals { // public static int WINDOW_WIDTH; public static int WINDOW_HEIGHT; - - - // - //Engine-adjacent stuff to move into engine state eventually - // - public static AuthenticationManager authenticationManager; - public static AssetManager assetManager; - public static ScriptEngine scriptEngine; - public static FileWatcherService fileWatcherService; // @@ -181,8 +180,6 @@ public class Globals { //add services here Globals.elementService = (ElementService)Globals.engineState.serviceManager.registerService(new ElementService()); Globals.particleService = (ParticleService)Globals.engineState.serviceManager.registerService(new ParticleService()); - Globals.scriptEngine = (ScriptEngine)Globals.engineState.serviceManager.registerService(new ScriptEngine()); - Globals.fileWatcherService = (FileWatcherService)Globals.engineState.serviceManager.registerService(new FileWatcherService()); Globals.engineState.serviceManager.instantiate(); // //End service manager @@ -367,7 +364,6 @@ public class Globals { Globals.audioEngine = null; Globals.engineState = null; Globals.renderingEngine = null; - Globals.fileWatcherService = null; LoggerInterface.destroyLoggers(); } diff --git a/src/main/java/electrosphere/engine/Main.java b/src/main/java/electrosphere/engine/Main.java index 639e52e3..d2169887 100644 --- a/src/main/java/electrosphere/engine/Main.java +++ b/src/main/java/electrosphere/engine/Main.java @@ -264,11 +264,11 @@ public class Main { /// /// E N G I N E S E R V I C E S /// - if(Globals.fileWatcherService != null){ - Globals.fileWatcherService.poll(); + if(Globals.engineState.fileWatcherService != null){ + Globals.engineState.fileWatcherService.poll(); } - if(EngineState.EngineFlags.RUN_SCRIPTS && Globals.scriptEngine != null){ - Globals.scriptEngine.scanScriptDir(); + if(EngineState.EngineFlags.RUN_SCRIPTS && Globals.engineState.scriptEngine != null){ + Globals.engineState.scriptEngine.scanScriptDir(); } diff --git a/src/main/java/electrosphere/engine/loadingthreads/ChunkGenerationTestLoading.java b/src/main/java/electrosphere/engine/loadingthreads/ChunkGenerationTestLoading.java index 208d2ba5..b7e0dc20 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/ChunkGenerationTestLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/ChunkGenerationTestLoading.java @@ -46,7 +46,7 @@ public class ChunkGenerationTestLoading { //wait on script engine to load if(ProceduralChunkGenerator.DEFAULT_USE_JAVASCRIPT){ WindowUtils.updateLoadingWindow("Waiting on scripting engine"); - while(!Globals.scriptEngine.isInitialized()){ + while(!Globals.engineState.scriptEngine.isInitialized()){ try { TimeUnit.MILLISECONDS.sleep(1); } catch (InterruptedException ex) {} diff --git a/src/main/java/electrosphere/engine/loadingthreads/EngineInitLoading.java b/src/main/java/electrosphere/engine/loadingthreads/EngineInitLoading.java index 021bac32..25ad0e5b 100644 --- a/src/main/java/electrosphere/engine/loadingthreads/EngineInitLoading.java +++ b/src/main/java/electrosphere/engine/loadingthreads/EngineInitLoading.java @@ -11,7 +11,7 @@ public class EngineInitLoading { * Loads the core assets of the scripting engine from disk and initializes the engine */ protected static void loadScriptingEngine(Object[] params){ - Globals.scriptEngine.initScripts(); + Globals.engineState.scriptEngine.initScripts(); } } diff --git a/src/main/java/electrosphere/engine/os/OSDragAndDrop.java b/src/main/java/electrosphere/engine/os/OSDragAndDrop.java index 94dec9cf..858651a7 100644 --- a/src/main/java/electrosphere/engine/os/OSDragAndDrop.java +++ b/src/main/java/electrosphere/engine/os/OSDragAndDrop.java @@ -49,7 +49,7 @@ public class OSDragAndDrop { //watch the asset for file updates LoggerInterface.loggerEngine.WARNING("Tracking " + rawPath); - Globals.fileWatcherService.trackFile(new FileWatcher(rawPath).setOnWrite(updatedPath -> { + Globals.engineState.fileWatcherService.trackFile(new FileWatcher(rawPath).setOnWrite(updatedPath -> { LoggerInterface.loggerFileIO.WARNING("File updated: " + updatedPath.toString()); Globals.assetManager.updateAsset(updatedPath.toString()); }).setOnDelete(updatedPath -> { diff --git a/src/main/java/electrosphere/engine/signal/SynchronousSignalHandling.java b/src/main/java/electrosphere/engine/signal/SynchronousSignalHandling.java index 120669c4..ac5ec260 100644 --- a/src/main/java/electrosphere/engine/signal/SynchronousSignalHandling.java +++ b/src/main/java/electrosphere/engine/signal/SynchronousSignalHandling.java @@ -11,7 +11,7 @@ public class SynchronousSignalHandling { * Runs the main thread signal handlers */ public static void runMainThreadSignalHandlers(){ - Globals.scriptEngine.handleAllSignals(); + Globals.engineState.scriptEngine.handleAllSignals(); Globals.engineState.mainThreadSignalService.handleAllSignals(); } diff --git a/src/main/java/electrosphere/entity/scene/SceneLoader.java b/src/main/java/electrosphere/entity/scene/SceneLoader.java index a8a4ac16..fe39c7f4 100644 --- a/src/main/java/electrosphere/entity/scene/SceneLoader.java +++ b/src/main/java/electrosphere/entity/scene/SceneLoader.java @@ -156,8 +156,8 @@ public class SceneLoader { //load scripts if(!isLevelEditor && file.getInitScriptPath() != null){ Realm finalRealm = realm; - Globals.scriptEngine.getScriptContext().executeSynchronously(() -> { - int sceneInstanceId = Globals.scriptEngine.getScriptContext().initScene(file.getInitScriptPath()); + Globals.engineState.scriptEngine.getScriptContext().executeSynchronously(() -> { + int sceneInstanceId = Globals.engineState.scriptEngine.getScriptContext().initScene(file.getInitScriptPath()); finalRealm.setSceneInstanceId(sceneInstanceId); }); } diff --git a/src/main/java/electrosphere/script/ScriptContext.java b/src/main/java/electrosphere/script/ScriptContext.java index f670c538..07e45221 100644 --- a/src/main/java/electrosphere/script/ScriptContext.java +++ b/src/main/java/electrosphere/script/ScriptContext.java @@ -291,8 +291,8 @@ public class ScriptContext { */ protected void recompile(Runnable onCompletion){ Thread recompileThread = new Thread(() -> { - Globals.scriptEngine.getScriptContext().executeSynchronously(() -> { - Globals.scriptEngine.initScripts(); + Globals.engineState.scriptEngine.getScriptContext().executeSynchronously(() -> { + Globals.engineState.scriptEngine.initScripts(); }); if(onCompletion != null){ onCompletion.run(); diff --git a/src/main/java/electrosphere/script/ScriptEngine.java b/src/main/java/electrosphere/script/ScriptEngine.java index fa490169..1f1848fb 100644 --- a/src/main/java/electrosphere/script/ScriptEngine.java +++ b/src/main/java/electrosphere/script/ScriptEngine.java @@ -17,7 +17,6 @@ import electrosphere.client.script.ScriptClientVoxelUtils; import electrosphere.client.ui.menu.script.ScriptLevelEditorUtils; import electrosphere.client.ui.menu.script.ScriptMenuUtils; import electrosphere.client.ui.menu.tutorial.TutorialMenus; -import electrosphere.engine.Globals; import electrosphere.engine.Main; import electrosphere.engine.signal.Signal; import electrosphere.engine.signal.Signal.SignalType; @@ -126,8 +125,6 @@ public class ScriptEngine extends SignalServiceImpl { * singletons from the host that are provided to the javascript context */ public static final Object[][] hostSingletops = new Object[][]{ - {"timekeeper",Globals.engineState.timekeeper}, - {"currentPlayer",Globals.clientState.clientPlayer}, {"loggerScripts",LoggerInterface.loggerScripts}, }; diff --git a/src/main/java/electrosphere/server/datacell/Realm.java b/src/main/java/electrosphere/server/datacell/Realm.java index 2ba3252a..d612057c 100644 --- a/src/main/java/electrosphere/server/datacell/Realm.java +++ b/src/main/java/electrosphere/server/datacell/Realm.java @@ -345,12 +345,12 @@ public class Realm { * @param args The arguments provided alongside the signal */ public void fireSignal(String signalName, Object ... args){ - if(Globals.scriptEngine != null && Globals.scriptEngine.isInitialized()){ - Globals.scriptEngine.getScriptContext().executeSynchronously(() -> { + if(Globals.engineState.scriptEngine != null && Globals.engineState.scriptEngine.isInitialized()){ + Globals.engineState.scriptEngine.getScriptContext().executeSynchronously(() -> { if(this.sceneInstanceId != NO_SCENE_INSTANCE){ - Globals.scriptEngine.getScriptContext().fireSignal(signalName, sceneInstanceId, args); + Globals.engineState.scriptEngine.getScriptContext().fireSignal(signalName, sceneInstanceId, args); } else { - Globals.scriptEngine.getScriptContext().fireSignal(signalName, ScriptEngine.GLOBAL_SCENE, args); + Globals.engineState.scriptEngine.getScriptContext().fireSignal(signalName, ScriptEngine.GLOBAL_SCENE, args); } }); } diff --git a/src/main/java/electrosphere/server/physics/terrain/generation/JSChunkGenerator.java b/src/main/java/electrosphere/server/physics/terrain/generation/JSChunkGenerator.java index 26f69141..ea54babc 100644 --- a/src/main/java/electrosphere/server/physics/terrain/generation/JSChunkGenerator.java +++ b/src/main/java/electrosphere/server/physics/terrain/generation/JSChunkGenerator.java @@ -167,11 +167,11 @@ public class JSChunkGenerator implements ChunkGenerator { } } - Globals.scriptEngine.getScriptContext().executeSynchronously(() -> { + Globals.engineState.scriptEngine.getScriptContext().executeSynchronously(() -> { int firstType = -2; boolean homogenous = true; GeneratedVoxel voxel = new GeneratedVoxel(); - Value getVoxelFunc = Globals.scriptEngine.getScriptContext().invokeEngineMember("chunkGeneratorManager", "getVoxelFunction", SCRIPT_GEN_TEST_TAG); + Value getVoxelFunc = Globals.engineState.scriptEngine.getScriptContext().invokeEngineMember("chunkGeneratorManager", "getVoxelFunction", SCRIPT_GEN_TEST_TAG); for(int x = 0; x < ServerTerrainChunk.CHUNK_DATA_GENERATOR_SIZE; x++){ Globals.profiler.beginAggregateCpuSample("TestGenerationChunkGenerator - Generate slice"); for(int y = 0; y < ServerTerrainChunk.CHUNK_DATA_GENERATOR_SIZE; y++){