Made ModLoader opaque

This commit is contained in:
Natty 2022-04-18 12:53:18 +02:00
parent 249000c9d0
commit 8e079a9c36
No known key found for this signature in database
GPG Key ID: 40AB22FA416C7019
7 changed files with 25 additions and 38 deletions

View File

@ -1,3 +1,8 @@
## 22.2.0.0-alpha.1
* `plutoengine-demos/` Removed third-party fonts
* `[PlutoRuntime]` The `ModLoader` component is now opaque,
pre-added mods are now specified when creating the token
## 22.2.0.0-alpha.0 ## 22.2.0.0-alpha.0
* `[PlutoComponent]` **Added support for dependencies and strengtened type checks** * `[PlutoComponent]` **Added support for dependencies and strengtened type checks**
* `[PlutoComponent]` *Removed* `IComponent` as it was redundant to `AbstractComponent` * `[PlutoComponent]` *Removed* `IComponent` as it was redundant to `AbstractComponent`

View File

@ -201,9 +201,6 @@ public abstract class PlutoApplication
} }
} }
/**
* TODO: Start the application in a new thread
* */
public final void run(String[] args, StartupConfig config) public final void run(String[] args, StartupConfig config)
{ {
if (config == null) if (config == null)
@ -213,7 +210,7 @@ public abstract class PlutoApplication
var globalComponents = PlutoGlobal.COMPONENTS; var globalComponents = PlutoGlobal.COMPONENTS;
globalComponents.addComponent(Logger.TOKEN); var logger = globalComponents.addComponent(Logger.TOKEN);
Logger.log(SmartSeverity.INFO, "Debug mode: " + (Pluto.DEBUG_MODE ? "enabled" : "disabled")); Logger.log(SmartSeverity.INFO, "Debug mode: " + (Pluto.DEBUG_MODE ? "enabled" : "disabled"));
@ -264,12 +261,7 @@ public abstract class PlutoApplication
var inputBus = components.addComponent(InputBus.fromDisplay(this.display)); var inputBus = components.addComponent(InputBus.fromDisplay(this.display));
var audioEngine = components.addComponent(AudioEngine.TOKEN); var audioEngine = components.addComponent(AudioEngine.TOKEN);
var modLoader = components.addComponent(ModLoader.with(this.getMainModule()));
var modLoader = components.addComponent(ModLoader.TOKEN);
modLoader.registerMod(this.getMainModule());
modLoader.load();
if (config.icons != null) if (config.icons != null)
{ {
@ -295,12 +287,10 @@ public abstract class PlutoApplication
} }
components.removeComponent(audioEngine); components.removeComponent(audioEngine);
components.removeComponent(modLoader);
modLoader.unload();
GL.destroy(); GL.destroy();
components.removeComponent(modLoader);
components.removeComponent(inputBus); components.removeComponent(inputBus);
this.display.destroy(); this.display.destroy();
@ -309,7 +299,7 @@ public abstract class PlutoApplication
DisplayBuilder.destroyGLFW(); DisplayBuilder.destroyGLFW();
globalComponents.removeComponents(Logger.TOKEN); globalComponents.removeComponent(logger);
} }
public Display getDisplayInstance() public Display getDisplayInstance()

View File

@ -63,7 +63,7 @@ public class Display extends PlutoLocalComponent
throw new IllegalStateException("Failed to create a window..."); throw new IllegalStateException("Failed to create a window...");
} }
GLFWVidMode vidmode = GLFW.glfwGetVideoMode(GLFW.glfwGetPrimaryMonitor()); var vidmode = GLFW.glfwGetVideoMode(GLFW.glfwGetPrimaryMonitor());
if (vidmode == null) if (vidmode == null)
{ {

View File

@ -81,10 +81,8 @@ public class DisplayBuilder
public static void initGLFW() public static void initGLFW()
{ {
if (!GLFW.glfwInit()) if (!GLFW.glfwInit())
{
throw new IllegalStateException("Could not init GLFW!"); throw new IllegalStateException("Could not init GLFW!");
} }
}
public static void destroyGLFW() public static void destroyGLFW()
{ {

View File

@ -18,8 +18,6 @@ import java.util.*;
*/ */
public final class ModLoader extends PlutoLocalComponent public final class ModLoader extends PlutoLocalComponent
{ {
public static final ComponentToken<ModLoader> TOKEN = ComponentToken.create(ModLoader::new);
private EnumModLoadingPhase loadingPhase; private EnumModLoadingPhase loadingPhase;
private final Map<VirtualAddress, Mod> modNameLookup; private final Map<VirtualAddress, Mod> modNameLookup;
private final Map<Class<?>, Mod> modLookup; private final Map<Class<?>, Mod> modLookup;
@ -43,6 +41,16 @@ public final class ModLoader extends PlutoLocalComponent
this.entryPoints = new HashMap<>(); this.entryPoints = new HashMap<>();
} }
public static ComponentToken<ModLoader> with(Class<?>... modClasses)
{
return ComponentToken.create(() -> {
var ml = new ModLoader();
for (var modClass : modClasses)
ml.registerMod(modClass);
return ml;
});
}
/** /**
* Denotes whether this component should be unique. * Denotes whether this component should be unique.
* Unique components can only exist once per instance * Unique components can only exist once per instance
@ -68,7 +76,7 @@ public final class ModLoader extends PlutoLocalComponent
* @author 493msi * @author 493msi
* @since 20.2.0.0-alpha.3 * @since 20.2.0.0-alpha.3
*/ */
public void registerMod(Class<?> modClass) void registerMod(Class<?> modClass)
{ {
if (loadingPhase != EnumModLoadingPhase.INITIAL && loadingPhase != EnumModLoadingPhase.CLASSLOADING_EXTERNAL) if (loadingPhase != EnumModLoadingPhase.INITIAL && loadingPhase != EnumModLoadingPhase.CLASSLOADING_EXTERNAL)
{ {
@ -151,13 +159,8 @@ public final class ModLoader extends PlutoLocalComponent
return Optional.ofNullable(this.modNameLookup.get(modID)); return Optional.ofNullable(this.modNameLookup.get(modID));
} }
/** @Override
* protected void onMount(ComponentDependencyManager manager)
*
* @author 493msi
* @since 20.2.0.0-alpha.3
*/
public void load()
{ {
Logger.log(SmartSeverity.MODULE, "Number of pre-added mod/s: " + this.loadList.size()); Logger.log(SmartSeverity.MODULE, "Number of pre-added mod/s: " + this.loadList.size());
@ -229,13 +232,8 @@ public final class ModLoader extends PlutoLocalComponent
} }
} }
/** @Override
* protected void onUnmount()
*
* @author 493msi
* @since 20.2.0.0-alpha.3
*/
public void unload()
{ {
this.loadingPhase = EnumModLoadingPhase.UNLOADING; this.loadingPhase = EnumModLoadingPhase.UNLOADING;
Logger.log(SmartSeverity.MODULE_MINUS, "Unloading all mods."); Logger.log(SmartSeverity.MODULE_MINUS, "Unloading all mods.");

View File

@ -7,10 +7,6 @@
"path": "icons", "path": "icons",
"type": "open" "type": "open"
}, },
"fonts": {
"path": "fonts.zip",
"type": "zip"
},
"plutofonts": { "plutofonts": {
"path": "plutofonts", "path": "plutofonts",
"type": "open" "type": "open"