diff --git a/src/mightypork/gamecore/audio/SoundSystem.java b/src/mightypork/gamecore/audio/SoundSystem.java
index 5d7f626..712da35 100644
--- a/src/mightypork/gamecore/audio/SoundSystem.java
+++ b/src/mightypork/gamecore/audio/SoundSystem.java
@@ -8,7 +8,7 @@ import java.util.Set;
import mightypork.gamecore.audio.players.EffectPlayer;
import mightypork.gamecore.audio.players.LoopPlayer;
import mightypork.gamecore.control.AppAccess;
-import mightypork.gamecore.control.Subsystem;
+import mightypork.gamecore.control.RootBusNode;
import mightypork.gamecore.control.bus.events.ResourceLoadRequest;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.utils.math.Calc.Buffers;
@@ -26,7 +26,7 @@ import org.newdawn.slick.openal.SoundStore;
* @author MightyPork
*/
@SuppressWarnings("unchecked")
-public class SoundSystem extends Subsystem implements Updateable {
+public class SoundSystem extends RootBusNode implements Updateable {
private static final Coord INITIAL_LISTENER_POS = new Coord(0, 0, 0);
private static final int MAX_SOURCES = 256;
diff --git a/src/mightypork/gamecore/control/Subsystem.java b/src/mightypork/gamecore/control/AppModule.java
similarity index 87%
rename from src/mightypork/gamecore/control/Subsystem.java
rename to src/mightypork/gamecore/control/AppModule.java
index 5030d7f..556b322 100644
--- a/src/mightypork/gamecore/control/Subsystem.java
+++ b/src/mightypork/gamecore/control/AppModule.java
@@ -12,12 +12,12 @@ import mightypork.gamecore.render.DisplaySystem;
*
* @author MightyPork
*/
-public abstract class Subsystem extends ChildClient implements AppAccess {
+public abstract class AppModule extends RootBusNode implements AppAccess {
private final AppAccess app;
- public Subsystem(AppAccess app) {
+ public AppModule(AppAccess app) {
super(app);
this.app = app;
diff --git a/src/mightypork/gamecore/control/AppSubModule.java b/src/mightypork/gamecore/control/AppSubModule.java
new file mode 100644
index 0000000..021f3c4
--- /dev/null
+++ b/src/mightypork/gamecore/control/AppSubModule.java
@@ -0,0 +1,54 @@
+package mightypork.gamecore.control;
+
+
+import mightypork.gamecore.audio.SoundSystem;
+import mightypork.gamecore.input.InputSystem;
+import mightypork.gamecore.render.DisplaySystem;
+
+
+/**
+ * App event bus client, to be used for subsystems, screens and anything that
+ * needs access to the eventbus
+ *
+ * @author MightyPork
+ */
+public abstract class AppSubModule extends BusNode implements AppAccess {
+
+ private final AppAccess app;
+
+
+ public AppSubModule(AppAccess app) {
+ super(app);
+
+ this.app = app;
+ }
+
+
+ @Override
+ public final SoundSystem snd()
+ {
+ return app.snd();
+ }
+
+
+ @Override
+ public final InputSystem input()
+ {
+ return app.input();
+ }
+
+
+ @Override
+ public final DisplaySystem disp()
+ {
+ return app.disp();
+ }
+
+
+ @Override
+ public void shutdown()
+ {
+ app.shutdown();
+ }
+
+}
diff --git a/src/mightypork/gamecore/control/ChildClient.java b/src/mightypork/gamecore/control/BusNode.java
similarity index 80%
rename from src/mightypork/gamecore/control/ChildClient.java
rename to src/mightypork/gamecore/control/BusNode.java
index e6da963..f8815da 100644
--- a/src/mightypork/gamecore/control/ChildClient.java
+++ b/src/mightypork/gamecore/control/BusNode.java
@@ -8,7 +8,6 @@ import java.util.Set;
import mightypork.gamecore.control.bus.EventBus;
import mightypork.gamecore.control.bus.clients.DelegatingClient;
import mightypork.gamecore.control.bus.clients.ToggleableClient;
-import mightypork.gamecore.control.interf.Destroyable;
/**
@@ -17,7 +16,7 @@ import mightypork.gamecore.control.interf.Destroyable;
*
* @author MightyPork
*/
-public abstract class ChildClient implements BusAccess, DelegatingClient, ToggleableClient, Destroyable {
+public abstract class BusNode implements BusAccess, DelegatingClient, ToggleableClient {
private BusAccess busAccess;
@@ -26,29 +25,11 @@ public abstract class ChildClient implements BusAccess, DelegatingClient, Toggle
private boolean delegating = true;
- public ChildClient(BusAccess busAccess) {
+ public BusNode(BusAccess busAccess) {
this.busAccess = busAccess;
-
- bus().subscribe(this);
}
- @Override
- public final void destroy()
- {
- deinit();
-
- bus().unsubscribe(this);
- }
-
-
- /**
- * Deinitialize the subsystem
- * (called during destruction)
- */
- protected abstract void deinit();
-
-
@Override
public final Collection