diff --git a/src/mightypork/gamecore/Config.java b/src/mightypork/gamecore/Config.java
index 9917097..800e278 100644
--- a/src/mightypork/gamecore/Config.java
+++ b/src/mightypork/gamecore/Config.java
@@ -13,6 +13,14 @@ import mightypork.gamecore.util.files.config.PropertyManager;
*/
public class Config {
+ /**
+ * Config setup. Used to populate the config file.
+ */
+ public static interface ConfigSetup {
+
+ void addOptions(PropertyManager prop);
+ }
+
private static PropertyManager cfg;
@@ -22,9 +30,9 @@ public class Config {
}
- public static PropertyManager getProp()
+ public static void registerOptions(ConfigSetup cfgl)
{
- return cfg;
+ cfgl.addOptions(cfg);
}
diff --git a/src/mightypork/gamecore/ConfigSetup.java b/src/mightypork/gamecore/ConfigSetup.java
deleted file mode 100644
index 9d1af28..0000000
--- a/src/mightypork/gamecore/ConfigSetup.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package mightypork.gamecore;
-
-
-import mightypork.gamecore.util.files.config.PropertyManager;
-
-
-public interface ConfigSetup {
-
- void addOptions(PropertyManager prop);
-}
diff --git a/src/mightypork/gamecore/WorkDir.java b/src/mightypork/gamecore/WorkDir.java
index 1daabbd..bcfc552 100644
--- a/src/mightypork/gamecore/WorkDir.java
+++ b/src/mightypork/gamecore/WorkDir.java
@@ -2,6 +2,8 @@ package mightypork.gamecore;
import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
import mightypork.gamecore.logging.Log;
@@ -13,7 +15,28 @@ import mightypork.gamecore.logging.Log;
*/
public class WorkDir {
+ /**
+ * Route configurator.
+ */
+ public static interface RouteSetup {
+
+ public void addRoutes(RouteOpts routeOpts);
+ }
+
+ /**
+ * Route configurator access
+ */
+ public static class RouteOpts {
+
+ public void addPath(String alias, String path)
+ {
+ WorkDir.addPath(alias, path);
+ }
+ }
+
+ public static RouteOpts routeOpts = new RouteOpts();
private static File workdir;
+ private static Map namedPaths = new HashMap<>();
public static void init(File workdir)
@@ -22,6 +45,18 @@ public class WorkDir {
}
+ public static void addPath(String alias, String path)
+ {
+ namedPaths.put(alias, path);
+ }
+
+
+ public static void registerRoutes(RouteSetup rs)
+ {
+ rs.addRoutes(routeOpts);
+ }
+
+
/**
* Get workdir folder, create if not exists.
*
@@ -30,9 +65,13 @@ public class WorkDir {
*/
public static File getDir(String path)
{
+ if (namedPaths.containsKey(path)) path = namedPaths.get(path);
+
final File f = new File(workdir, path);
- if (!f.exists() && !f.mkdirs()) {
- Log.w("Could not create a directory: " + f);
+ if (!f.exists()) {
+ if (!f.mkdirs()) {
+ Log.w("Could not create a directory: " + f + " (path: " + path + ")");
+ }
}
return f;
@@ -47,10 +86,14 @@ public class WorkDir {
*/
public static File getFile(String path)
{
+ if (namedPaths.containsKey(path)) path = namedPaths.get(path);
+
final File f = new File(workdir, path);
// create the parent dir
- getDir(f.getParent());
+ if (!f.getParent().equals(workdir)) {
+ f.getParentFile().mkdirs();
+ }
return f;
@@ -61,4 +104,5 @@ public class WorkDir {
{
return workdir;
}
+
}
diff --git a/src/mightypork/gamecore/app/MainLoopRequestListener.java b/src/mightypork/gamecore/app/MainLoopRequestListener.java
deleted file mode 100644
index b6c4f01..0000000
--- a/src/mightypork/gamecore/app/MainLoopRequestListener.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package mightypork.gamecore.app;
-
-
-/**
- * {@link MainLoopRequest} listener
- *
- * @author MightyPork
- */
-public interface MainLoopRequestListener {
-
- /**
- * Perform the requested action
- *
- * @param request
- */
- void queueTask(Runnable request);
-}
diff --git a/src/mightypork/gamecore/app/AppAccess.java b/src/mightypork/gamecore/core/AppAccess.java
similarity index 94%
rename from src/mightypork/gamecore/app/AppAccess.java
rename to src/mightypork/gamecore/core/AppAccess.java
index cb24f23..1e354da 100644
--- a/src/mightypork/gamecore/app/AppAccess.java
+++ b/src/mightypork/gamecore/core/AppAccess.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import mightypork.gamecore.eventbus.BusAccess;
diff --git a/src/mightypork/gamecore/app/LightAppModule.java b/src/mightypork/gamecore/core/AppAccessAdapter.java
similarity index 87%
rename from src/mightypork/gamecore/app/LightAppModule.java
rename to src/mightypork/gamecore/core/AppAccessAdapter.java
index 3c1eeac..6bb6ca0 100644
--- a/src/mightypork/gamecore/app/LightAppModule.java
+++ b/src/mightypork/gamecore/core/AppAccessAdapter.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import mightypork.gamecore.eventbus.EventBus;
@@ -12,7 +12,7 @@ import mightypork.gamecore.resources.audio.SoundSystem;
*
* @author MightyPork
*/
-public class LightAppModule implements AppAccess {
+public class AppAccessAdapter implements AppAccess {
private final AppAccess app;
@@ -20,7 +20,7 @@ public class LightAppModule implements AppAccess {
/**
* @param app app access
*/
- public LightAppModule(AppAccess app)
+ public AppAccessAdapter(AppAccess app)
{
if (app == null) throw new NullPointerException("AppAccess instance cannot be null.");
diff --git a/src/mightypork/gamecore/app/AppModule.java b/src/mightypork/gamecore/core/AppModule.java
similarity index 96%
rename from src/mightypork/gamecore/app/AppModule.java
rename to src/mightypork/gamecore/core/AppModule.java
index 2da80c2..35e73bc 100644
--- a/src/mightypork/gamecore/app/AppModule.java
+++ b/src/mightypork/gamecore/core/AppModule.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import mightypork.gamecore.eventbus.clients.RootBusNode;
diff --git a/src/mightypork/gamecore/app/AppSubModule.java b/src/mightypork/gamecore/core/AppSubModule.java
similarity index 96%
rename from src/mightypork/gamecore/app/AppSubModule.java
rename to src/mightypork/gamecore/core/AppSubModule.java
index c9d7558..8080966 100644
--- a/src/mightypork/gamecore/app/AppSubModule.java
+++ b/src/mightypork/gamecore/core/AppSubModule.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import mightypork.gamecore.eventbus.clients.BusNode;
diff --git a/src/mightypork/gamecore/app/BaseApp.java b/src/mightypork/gamecore/core/BaseApp.java
similarity index 65%
rename from src/mightypork/gamecore/app/BaseApp.java
rename to src/mightypork/gamecore/core/BaseApp.java
index fb454b5..2ac6dfc 100644
--- a/src/mightypork/gamecore/app/BaseApp.java
+++ b/src/mightypork/gamecore/core/BaseApp.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import java.io.File;
@@ -10,15 +10,16 @@ import java.util.logging.Level;
import javax.swing.JOptionPane;
import mightypork.gamecore.Config;
-import mightypork.gamecore.ConfigSetup;
+import mightypork.gamecore.Config.ConfigSetup;
import mightypork.gamecore.WorkDir;
+import mightypork.gamecore.WorkDir.RouteSetup;
import mightypork.gamecore.eventbus.EventBus;
import mightypork.gamecore.eventbus.events.DestroyEvent;
import mightypork.gamecore.gui.screens.ScreenRegistry;
import mightypork.gamecore.gui.screens.impl.CrossfadeOverlay;
import mightypork.gamecore.input.InputSystem;
import mightypork.gamecore.input.KeyConfig;
-import mightypork.gamecore.input.KeySetup;
+import mightypork.gamecore.input.KeyConfig.KeySetup;
import mightypork.gamecore.logging.Log;
import mightypork.gamecore.logging.SlickLogRedirector;
import mightypork.gamecore.logging.writers.LogWriter;
@@ -43,6 +44,86 @@ import mightypork.gamecore.util.math.algo.Move;
*/
public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
+ /**
+ * Init options holder class
+ */
+ public class AppInitOptions {
+
+ private String logDir = "log";
+ private String logFilePrefix = "runtime";
+ private String screenshotDir = "screenshots";
+ private int logArchiveCount = 0;
+ private boolean busLogging = false;
+ private String configFile = "settings.cfg";
+ private String configComment = "Main config file";
+
+ private final List resourceLists = new ArrayList<>();
+ private final List keyLists = new ArrayList<>();
+ private final List configLists = new ArrayList<>();
+ private final List routeLists = new ArrayList<>();
+
+ private ResourceLoader resourceLoader = new AsyncResourceLoader();
+ private Level logLevel = Level.ALL;
+
+
+ public void setConfigFile(BaseApp baseApp, String filename, String comment)
+ {
+ configFile = filename;
+ configComment = comment;
+ }
+
+
+ public void addConfig(ConfigSetup cfg)
+ {
+ configLists.add(cfg);
+ }
+
+
+ public void addKeys(KeySetup keys)
+ {
+ keyLists.add(keys);
+ }
+
+
+ public void addRoutes(RouteSetup keys)
+ {
+ routeLists.add(keys);
+ }
+
+
+ public void addResources(ResourceSetup res)
+ {
+ resourceLists.add(res);
+ }
+
+
+ public void setBusLogging(boolean yes)
+ {
+ busLogging = yes;
+ }
+
+
+ public void setLogOptions(String logDir, String filePrefix, int archivedCount, Level logLevel)
+ {
+ this.logDir = logDir;
+ this.logFilePrefix = filePrefix;
+ this.logArchiveCount = archivedCount;
+ this.logLevel = logLevel;
+ }
+
+
+ public void setResourceLoader(ResourceLoader resLoader)
+ {
+ resourceLoader = resLoader;
+ }
+
+
+ public void setScreenshotDir(String path)
+ {
+ this.screenshotDir = path;
+ }
+ }
+
// modules
private InputSystem inputSystem;
private DisplaySystem displaySystem;
@@ -50,71 +131,34 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
private EventBus eventBus;
private MainLoop gameLoop;
private ScreenRegistry screenRegistry;
+ private boolean started = false;
- private String logDirName = "log";
- private String logFilePrefix = "runtime";
- private int logArchiveCount = 0;
- private boolean busLogging = false;
- private String configFile = "settings.cfg";
- private String configComment = "Main config file";
- private final List resourcesToLoad = new ArrayList<>();
- private final List keysToLoad = new ArrayList<>();
- private final List cfgsToLoad = new ArrayList<>();
- private ResourceLoader resourceLoader = new AsyncResourceLoader();
- private Level logLevel = Level.ALL;
+ // init opt holder
+ private final AppInitOptions opt = new AppInitOptions();
- public BaseApp(File workdir, boolean singleInstance)
+ /**
+ * Get init options
+ *
+ * @return opt holder
+ */
+ public AppInitOptions opt()
{
- WorkDir.init(workdir);
+ if (started) {
+ throw new IllegalStateException("Cannot alter init options after starting the App.");
+ }
- if (singleInstance) initLock();
- }
-
-
- public void setConfigFile(String filename, String comment)
- {
- this.configFile = filename;
- this.configComment = comment;
+ return opt;
}
- public void setLogOptions(String logDir, String filePrefix, int archived, Level logLevel)
- {
- this.logDirName = logDir;
- this.logFilePrefix = filePrefix;
- this.logArchiveCount = archived;
- this.logLevel = logLevel;
- }
-
-
- public void setBusLogging(boolean yes)
- {
- this.busLogging = yes;
- }
-
-
- public void addResources(ResourceSetup res)
- {
- this.resourcesToLoad.add(res);
- }
-
-
- public void addKeys(KeySetup keys)
- {
- this.keysToLoad.add(keys);
- }
-
-
- public void addConfig(ConfigSetup cfg)
- {
- this.cfgsToLoad.add(cfg);
- }
-
-
- public void setResourceLoader(ResourceLoader resLoader)
+ public BaseApp(File workdir, boolean singleInstance)
{
- this.resourceLoader = resLoader;
+ WorkDir.init(workdir);
+
+ Log.i("Using workdir: " + WorkDir.getWorkDir());
+
+ if (singleInstance) initLock();
}
@@ -125,13 +169,12 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
{
Thread.setDefaultUncaughtExceptionHandler(this);
- Log.i("Using workdir: " + WorkDir.getWorkDir());
-
initialize();
Log.i("Starting main loop...");
- // open first screen
+ // open first screen
+ started = true;
gameLoop.start();
}
@@ -141,13 +184,25 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
*/
protected void initialize()
{
- Config.init(WorkDir.getFile(configFile), configComment);
- for (final KeySetup l : keysToLoad) {
- KeyConfig.addKeyLayout(l);
+ WorkDir.addPath("screenshots", opt.screenshotDir);
+ WorkDir.addPath("config", opt.configFile);
+ WorkDir.addPath("logs", opt.logDir);
+
+
+ for (final RouteSetup rs : opt.routeLists) {
+ WorkDir.registerRoutes(rs);
}
- KeyConfig.inst().addOptions(Config.getProp());
- for (final ConfigSetup cfgl : cfgsToLoad) {
- cfgl.addOptions(Config.getProp());
+
+ // apply configurations
+ Config.init(WorkDir.getFile(opt.configFile), opt.configComment);
+ for (final KeySetup l : opt.keyLists) {
+ KeyConfig.registerKeys(l);
+ }
+
+ // add keys to config
+ Config.registerOptions(KeyConfig.inst());
+ for (final ConfigSetup cfgl : opt.configLists) {
+ Config.registerOptions(cfgl);
}
Config.load();
@@ -155,8 +210,8 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
/*
* Setup logging
*/
- final LogWriter log = Log.create(logFilePrefix, new File(WorkDir.getDir(logDirName), logFilePrefix + ".log"), logArchiveCount);
- log.setLevel(logLevel);
+ final LogWriter log = Log.create(opt.logFilePrefix, new File(WorkDir.getDir(opt.logDir), opt.logFilePrefix + ".log"), opt.logArchiveCount);
+ log.setLevel(opt.logLevel);
Log.setMainLogger(log);
org.newdawn.slick.util.Log.setLogSystem(new SlickLogRedirector(log));
@@ -164,16 +219,18 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
Log.i("=== Starting initialization sequence ===");
- // hook
+ // pre-init hook
Log.f2("Calling pre-init hook...");
preInit();
+
/*
* Event bus
*/
Log.f2("Starting Event Bus...");
eventBus = new EventBus();
- eventBus.detailedLogging = busLogging;
+ eventBus.subscribe(this);
+ eventBus.detailedLogging = opt.busLogging;
/*
* Ionizables
@@ -181,6 +238,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
Log.f3("initializing ION...");
registerIonizables();
+
/*
* Display
*/
@@ -188,6 +246,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
displaySystem = new DisplaySystem(this);
initDisplay(displaySystem);
+
/*
* Audio
*/
@@ -195,6 +254,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
soundSystem = new SoundSystem(this);
initSoundSystem(soundSystem);
+
/*
* Input
*/
@@ -202,6 +262,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
inputSystem = new InputSystem(this);
initInputSystem(inputSystem);
+
/*
* Prepare main loop
*/
@@ -210,18 +271,24 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
gameLoop = createMainLoop();
gameLoop.setRootRenderable(screenRegistry);
+
/*
* Load resources
*
- * Resources should be registered to banks, and AsyncResourceLoader will load them.
+ * Resources should be registered to registries, and AsyncResourceLoader will load them.
*/
Log.f1("Loading resources...");
- resourceLoader.init(this);
+ if (opt.resourceLoader != null) {
+ opt.resourceLoader.init(this);
+ }
+
Res.init(this);
- for (final ResourceSetup rl : resourcesToLoad) {
+
+ for (final ResourceSetup rl : opt.resourceLists) {
Res.load(rl);
}
+
/*
* Screen registry
*
@@ -303,7 +370,10 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
*
* @return the game loop.
*/
- protected abstract MainLoop createMainLoop();
+ protected MainLoop createMainLoop()
+ {
+ return new MainLoop(this);
+ }
/*
@@ -408,7 +478,7 @@ public abstract class BaseApp implements AppAccess, UncaughtExceptionHandler {
getEventBus().destroy();
}
} catch (final Exception e) {
- // ignore it
+ Log.e(e);
}
Log.i("Terminating...");
diff --git a/src/mightypork/gamecore/app/MainLoop.java b/src/mightypork/gamecore/core/MainLoop.java
similarity index 84%
rename from src/mightypork/gamecore/app/MainLoop.java
rename to src/mightypork/gamecore/core/MainLoop.java
index 787f4da..6233242 100644
--- a/src/mightypork/gamecore/app/MainLoop.java
+++ b/src/mightypork/gamecore/core/MainLoop.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import java.util.Queue;
@@ -7,6 +7,8 @@ import java.util.concurrent.ConcurrentLinkedQueue;
import mightypork.gamecore.eventbus.events.UpdateEvent;
import mightypork.gamecore.gui.screens.ScreenRegistry;
import mightypork.gamecore.render.Renderable;
+import mightypork.gamecore.render.TaskTakeScreenshot;
+import mightypork.gamecore.render.events.ScreenshotRequestListener;
import mightypork.gamecore.util.annot.DefaultImpl;
import mightypork.gamecore.util.math.timing.TimerDelta;
@@ -16,7 +18,7 @@ import mightypork.gamecore.util.math.timing.TimerDelta;
*
* @author MightyPork
*/
-public abstract class MainLoop extends AppModule implements MainLoopRequestListener {
+public class MainLoop extends AppModule implements ScreenshotRequestListener {
private final Queue taskQueue = new ConcurrentLinkedQueue<>();
private TimerDelta timer;
@@ -102,10 +104,16 @@ public abstract class MainLoop extends AppModule implements MainLoopRequestListe
}
- @Override
public synchronized void queueTask(Runnable request)
{
taskQueue.add(request);
}
+
+ @Override
+ public void onScreenshotRequest()
+ {
+ queueTask(new TaskTakeScreenshot());
+ }
+
}
diff --git a/src/mightypork/gamecore/app/MainLoopRequest.java b/src/mightypork/gamecore/core/MainLoopRequest.java
similarity index 73%
rename from src/mightypork/gamecore/app/MainLoopRequest.java
rename to src/mightypork/gamecore/core/MainLoopRequest.java
index e251325..b251272 100644
--- a/src/mightypork/gamecore/app/MainLoopRequest.java
+++ b/src/mightypork/gamecore/core/MainLoopRequest.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.app;
+package mightypork.gamecore.core;
import mightypork.gamecore.eventbus.BusEvent;
@@ -11,7 +11,7 @@ import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent;
* @author MightyPork
*/
@SingleReceiverEvent
-public class MainLoopRequest extends BusEvent {
+public class MainLoopRequest extends BusEvent {
private final Runnable task;
@@ -26,7 +26,7 @@ public class MainLoopRequest extends BusEvent {
@Override
- public void handleBy(MainLoopRequestListener handler)
+ public void handleBy(MainLoop handler)
{
handler.queueTask(task);
}
diff --git a/src/mightypork/gamecore/core/ShudownRequest.java b/src/mightypork/gamecore/core/ShudownRequest.java
new file mode 100644
index 0000000..82e9667
--- /dev/null
+++ b/src/mightypork/gamecore/core/ShudownRequest.java
@@ -0,0 +1,29 @@
+package mightypork.gamecore.core;
+
+
+import mightypork.gamecore.eventbus.BusEvent;
+import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent;
+
+
+/**
+ * Shutdown request. Shutdown needs to execute on GL thread for display to
+ * deinit properly.
+ *
+ * @author MightyPork
+ */
+@SingleReceiverEvent
+public class ShudownRequest extends BusEvent {
+
+ @Override
+ public void handleBy(final MainLoop handler)
+ {
+ handler.queueTask(new Runnable() {
+
+ @Override
+ public void run()
+ {
+ handler.shutdown();
+ }
+ });
+ }
+}
diff --git a/src/mightypork/gamecore/eventbus/BusEvent.java b/src/mightypork/gamecore/eventbus/BusEvent.java
index 772fade..99e36c5 100644
--- a/src/mightypork/gamecore/eventbus/BusEvent.java
+++ b/src/mightypork/gamecore/eventbus/BusEvent.java
@@ -2,7 +2,7 @@ package mightypork.gamecore.eventbus;
import mightypork.gamecore.eventbus.event_flags.DelayedEvent;
-import mightypork.gamecore.eventbus.event_flags.ImmediateEvent;
+import mightypork.gamecore.eventbus.event_flags.DirectEvent;
import mightypork.gamecore.eventbus.event_flags.NonConsumableEvent;
import mightypork.gamecore.eventbus.event_flags.NotLoggedEvent;
import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent;
@@ -14,7 +14,7 @@ import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent;
*
*
* Can be annotated as {@link SingleReceiverEvent} to be delivered once only,
- * and {@link DelayedEvent} or {@link ImmediateEvent} to specify default sending
+ * and {@link DelayedEvent} or {@link DirectEvent} to specify default sending
* mode. When marked as {@link NotLoggedEvent}, it will not appear in detailed
* bus logging (useful for very frequent events, such as UpdateEvent).
*
@@ -111,4 +111,11 @@ public abstract class BusEvent {
consumed = false;
}
+
+ /**
+ * Called after all clients have received the event.
+ */
+ public void onDispatchComplete(EventBus bus)
+ {
+ }
}
diff --git a/src/mightypork/gamecore/eventbus/EventBus.java b/src/mightypork/gamecore/eventbus/EventBus.java
index 8f55824..784fe7f 100644
--- a/src/mightypork/gamecore/eventbus/EventBus.java
+++ b/src/mightypork/gamecore/eventbus/EventBus.java
@@ -11,7 +11,7 @@ import java.util.concurrent.TimeUnit;
import mightypork.gamecore.eventbus.clients.DelegatingClient;
import mightypork.gamecore.eventbus.event_flags.DelayedEvent;
-import mightypork.gamecore.eventbus.event_flags.ImmediateEvent;
+import mightypork.gamecore.eventbus.event_flags.DirectEvent;
import mightypork.gamecore.eventbus.event_flags.NotLoggedEvent;
import mightypork.gamecore.eventbus.events.Destroyable;
import mightypork.gamecore.logging.Log;
@@ -183,7 +183,7 @@ final public class EventBus implements Destroyable, BusAccess {
return;
}
- if (Utils.hasAnnotation(event, ImmediateEvent.class)) {
+ if (Utils.hasAnnotation(event, DirectEvent.class)) {
sendDirect(event);
return;
}
@@ -342,7 +342,10 @@ final public class EventBus implements Destroyable, BusAccess {
assertLive();
clients.setBuffering(true);
+
doDispatch(clients, event);
+ event.onDispatchComplete(this);
+
clients.setBuffering(false);
}
diff --git a/src/mightypork/gamecore/eventbus/event_flags/ImmediateEvent.java b/src/mightypork/gamecore/eventbus/event_flags/DirectEvent.java
similarity index 86%
rename from src/mightypork/gamecore/eventbus/event_flags/ImmediateEvent.java
rename to src/mightypork/gamecore/eventbus/event_flags/DirectEvent.java
index 5564b7c..5961b2e 100644
--- a/src/mightypork/gamecore/eventbus/event_flags/ImmediateEvent.java
+++ b/src/mightypork/gamecore/eventbus/event_flags/DirectEvent.java
@@ -13,4 +13,4 @@ import java.lang.annotation.*;
@Target(ElementType.TYPE)
@Inherited
@Documented
-public @interface ImmediateEvent {}
+public @interface DirectEvent {}
diff --git a/src/mightypork/gamecore/eventbus/events/DestroyEvent.java b/src/mightypork/gamecore/eventbus/events/DestroyEvent.java
index 7e6e206..e334f62 100644
--- a/src/mightypork/gamecore/eventbus/events/DestroyEvent.java
+++ b/src/mightypork/gamecore/eventbus/events/DestroyEvent.java
@@ -2,7 +2,7 @@ package mightypork.gamecore.eventbus.events;
import mightypork.gamecore.eventbus.BusEvent;
-import mightypork.gamecore.eventbus.event_flags.ImmediateEvent;
+import mightypork.gamecore.eventbus.event_flags.DirectEvent;
import mightypork.gamecore.eventbus.event_flags.NonConsumableEvent;
@@ -11,7 +11,7 @@ import mightypork.gamecore.eventbus.event_flags.NonConsumableEvent;
*
* @author MightyPork
*/
-@ImmediateEvent
+@DirectEvent
@NonConsumableEvent
public class DestroyEvent extends BusEvent {
diff --git a/src/mightypork/gamecore/eventbus/events/UpdateEvent.java b/src/mightypork/gamecore/eventbus/events/UpdateEvent.java
index 7962e66..422ab34 100644
--- a/src/mightypork/gamecore/eventbus/events/UpdateEvent.java
+++ b/src/mightypork/gamecore/eventbus/events/UpdateEvent.java
@@ -2,7 +2,7 @@ package mightypork.gamecore.eventbus.events;
import mightypork.gamecore.eventbus.BusEvent;
-import mightypork.gamecore.eventbus.event_flags.ImmediateEvent;
+import mightypork.gamecore.eventbus.event_flags.DirectEvent;
import mightypork.gamecore.eventbus.event_flags.NonConsumableEvent;
import mightypork.gamecore.eventbus.event_flags.NotLoggedEvent;
@@ -13,7 +13,7 @@ import mightypork.gamecore.eventbus.event_flags.NotLoggedEvent;
* @author MightyPork
*/
@NotLoggedEvent
-@ImmediateEvent
+@DirectEvent
@NonConsumableEvent
public class UpdateEvent extends BusEvent {
diff --git a/src/mightypork/gamecore/gui/components/LayoutComponent.java b/src/mightypork/gamecore/gui/components/LayoutComponent.java
index 5b24634..ad4c6b9 100644
--- a/src/mightypork/gamecore/gui/components/LayoutComponent.java
+++ b/src/mightypork/gamecore/gui/components/LayoutComponent.java
@@ -4,8 +4,8 @@ package mightypork.gamecore.gui.components;
import java.util.Collection;
import java.util.LinkedList;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.AppSubModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppSubModule;
import mightypork.gamecore.eventbus.EventBus;
import mightypork.gamecore.eventbus.clients.ClientHub;
import mightypork.gamecore.input.InputSystem;
diff --git a/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java b/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java
index 1408dee..efcd1bc 100644
--- a/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/ColumnLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.components.Component;
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
diff --git a/src/mightypork/gamecore/gui/components/layout/ConstraintLayout.java b/src/mightypork/gamecore/gui/components/layout/ConstraintLayout.java
index 4ad6557..6183156 100644
--- a/src/mightypork/gamecore/gui/components/layout/ConstraintLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/ConstraintLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.components.Component;
import mightypork.gamecore.gui.components.LayoutComponent;
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
diff --git a/src/mightypork/gamecore/gui/components/layout/FlowColumnLayout.java b/src/mightypork/gamecore/gui/components/layout/FlowColumnLayout.java
index fc76762..e58714d 100644
--- a/src/mightypork/gamecore/gui/components/layout/FlowColumnLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/FlowColumnLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.Component;
import mightypork.gamecore.gui.components.LayoutComponent;
diff --git a/src/mightypork/gamecore/gui/components/layout/FlowRowLayout.java b/src/mightypork/gamecore/gui/components/layout/FlowRowLayout.java
index 65a52ef..e8f5d33 100644
--- a/src/mightypork/gamecore/gui/components/layout/FlowRowLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/FlowRowLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignY;
import mightypork.gamecore.gui.components.Component;
import mightypork.gamecore.gui.components.LayoutComponent;
diff --git a/src/mightypork/gamecore/gui/components/layout/GridLayout.java b/src/mightypork/gamecore/gui/components/layout/GridLayout.java
index 945655b..1389ee0 100644
--- a/src/mightypork/gamecore/gui/components/layout/GridLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/GridLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.components.Component;
import mightypork.gamecore.gui.components.LayoutComponent;
import mightypork.gamecore.util.math.constraints.rect.builders.TiledRect;
diff --git a/src/mightypork/gamecore/gui/components/layout/RowLayout.java b/src/mightypork/gamecore/gui/components/layout/RowLayout.java
index af0efc8..712f960 100644
--- a/src/mightypork/gamecore/gui/components/layout/RowLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/RowLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.components.Component;
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
diff --git a/src/mightypork/gamecore/gui/components/layout/linear/LinearLayout.java b/src/mightypork/gamecore/gui/components/layout/linear/LinearLayout.java
index 4c4225e..1d86803 100644
--- a/src/mightypork/gamecore/gui/components/layout/linear/LinearLayout.java
+++ b/src/mightypork/gamecore/gui/components/layout/linear/LinearLayout.java
@@ -1,7 +1,7 @@
package mightypork.gamecore.gui.components.layout.linear;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.DynamicWidthComponent;
import mightypork.gamecore.gui.components.LayoutComponent;
diff --git a/src/mightypork/gamecore/gui/events/LayoutChangeEvent.java b/src/mightypork/gamecore/gui/events/LayoutChangeEvent.java
index cfc9c6d..5ac51a8 100644
--- a/src/mightypork/gamecore/gui/events/LayoutChangeEvent.java
+++ b/src/mightypork/gamecore/gui/events/LayoutChangeEvent.java
@@ -2,7 +2,7 @@ package mightypork.gamecore.gui.events;
import mightypork.gamecore.eventbus.BusEvent;
-import mightypork.gamecore.eventbus.event_flags.ImmediateEvent;
+import mightypork.gamecore.eventbus.event_flags.DirectEvent;
import mightypork.gamecore.eventbus.event_flags.NonConsumableEvent;
@@ -12,7 +12,7 @@ import mightypork.gamecore.eventbus.event_flags.NonConsumableEvent;
*
* @author MightyPork
*/
-@ImmediateEvent
+@DirectEvent
@NonConsumableEvent
public class LayoutChangeEvent extends BusEvent {
diff --git a/src/mightypork/gamecore/gui/events/ViewportChangeEvent.java b/src/mightypork/gamecore/gui/events/ViewportChangeEvent.java
index bef507d..dfcee18 100644
--- a/src/mightypork/gamecore/gui/events/ViewportChangeEvent.java
+++ b/src/mightypork/gamecore/gui/events/ViewportChangeEvent.java
@@ -16,39 +16,15 @@ import mightypork.gamecore.util.math.constraints.vect.Vect;
@NotLoggedEvent
public class ViewportChangeEvent extends BusEvent {
- private final boolean fullscreen;
private final Vect screenSize;
- private final boolean fsChanged;
/**
- * @param fsChanged fullscreen change triggered the event
- * @param fullscreen is now fullscreen
* @param size new screen size
*/
- public ViewportChangeEvent(boolean fsChanged, boolean fullscreen, Vect size)
+ public ViewportChangeEvent(Vect size)
{
- this.fullscreen = fullscreen;
this.screenSize = size;
- this.fsChanged = fsChanged;
- }
-
-
- /**
- * @return true if screen is now fullscreen
- */
- public boolean isFullscreen()
- {
- return fullscreen;
- }
-
-
- /**
- * @return true if event was triggered by fullscreen toggle
- */
- public boolean fullscreenChanged()
- {
- return fsChanged;
}
diff --git a/src/mightypork/gamecore/gui/screens/LayeredScreen.java b/src/mightypork/gamecore/gui/screens/LayeredScreen.java
index ab948b4..022f60e 100644
--- a/src/mightypork/gamecore/gui/screens/LayeredScreen.java
+++ b/src/mightypork/gamecore/gui/screens/LayeredScreen.java
@@ -5,7 +5,7 @@ import java.util.Collection;
import java.util.Comparator;
import java.util.TreeSet;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.eventbus.clients.DelegatingClient;
diff --git a/src/mightypork/gamecore/gui/screens/Overlay.java b/src/mightypork/gamecore/gui/screens/Overlay.java
index c062403..4bc7a15 100644
--- a/src/mightypork/gamecore/gui/screens/Overlay.java
+++ b/src/mightypork/gamecore/gui/screens/Overlay.java
@@ -4,8 +4,8 @@ package mightypork.gamecore.gui.screens;
import java.util.Collection;
import java.util.LinkedHashSet;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.AppSubModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppSubModule;
import mightypork.gamecore.eventbus.events.Updateable;
import mightypork.gamecore.gui.Enableable;
import mightypork.gamecore.gui.Hideable;
diff --git a/src/mightypork/gamecore/gui/screens/Screen.java b/src/mightypork/gamecore/gui/screens/Screen.java
index 4854f00..fc3a522 100644
--- a/src/mightypork/gamecore/gui/screens/Screen.java
+++ b/src/mightypork/gamecore/gui/screens/Screen.java
@@ -1,8 +1,8 @@
package mightypork.gamecore.gui.screens;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.AppSubModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppSubModule;
import mightypork.gamecore.gui.events.LayoutChangeEvent;
import mightypork.gamecore.gui.events.LayoutChangeListener;
import mightypork.gamecore.input.KeyBinder;
diff --git a/src/mightypork/gamecore/gui/screens/ScreenRegistry.java b/src/mightypork/gamecore/gui/screens/ScreenRegistry.java
index 8680ddf..cd13bdd 100644
--- a/src/mightypork/gamecore/gui/screens/ScreenRegistry.java
+++ b/src/mightypork/gamecore/gui/screens/ScreenRegistry.java
@@ -6,8 +6,8 @@ import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.AppModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppModule;
import mightypork.gamecore.gui.events.LayoutChangeEvent;
import mightypork.gamecore.gui.events.ScreenRequestListener;
import mightypork.gamecore.gui.events.ViewportChangeEvent;
diff --git a/src/mightypork/gamecore/gui/screens/impl/CrossfadeOverlay.java b/src/mightypork/gamecore/gui/screens/impl/CrossfadeOverlay.java
index d05d288..89ca07a 100644
--- a/src/mightypork/gamecore/gui/screens/impl/CrossfadeOverlay.java
+++ b/src/mightypork/gamecore/gui/screens/impl/CrossfadeOverlay.java
@@ -1,7 +1,8 @@
package mightypork.gamecore.gui.screens.impl;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.ShudownRequest;
import mightypork.gamecore.gui.components.painters.QuadPainter;
import mightypork.gamecore.gui.events.ScreenRequest;
import mightypork.gamecore.gui.screens.Overlay;
@@ -9,8 +10,6 @@ import mightypork.gamecore.util.math.Easing;
import mightypork.gamecore.util.math.color.pal.RGB;
import mightypork.gamecore.util.math.constraints.num.mutable.NumAnimated;
import mightypork.gamecore.util.math.timing.TimedTask;
-import mightypork.rogue.events.ActionRequest;
-import mightypork.rogue.events.ActionRequest.RequestType;
public class CrossfadeOverlay extends Overlay {
@@ -27,7 +26,7 @@ public class CrossfadeOverlay extends Overlay {
public void run()
{
if (requestedScreenName == null) {
- getEventBus().send(new ActionRequest(RequestType.SHUTDOWN));
+ getEventBus().send(new ShudownRequest());
} else {
getEventBus().send(new ScreenRequest(requestedScreenName));
}
diff --git a/src/mightypork/gamecore/input/InputSystem.java b/src/mightypork/gamecore/input/InputSystem.java
index f3764dc..b1efb62 100644
--- a/src/mightypork/gamecore/input/InputSystem.java
+++ b/src/mightypork/gamecore/input/InputSystem.java
@@ -1,7 +1,8 @@
package mightypork.gamecore.input;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.ShudownRequest;
import mightypork.gamecore.eventbus.clients.RootBusNode;
import mightypork.gamecore.eventbus.events.Updateable;
import mightypork.gamecore.input.KeyStroke.Edge;
@@ -11,8 +12,6 @@ import mightypork.gamecore.input.events.MouseButtonEvent;
import mightypork.gamecore.input.events.MouseMotionEvent;
import mightypork.gamecore.util.math.constraints.vect.Vect;
import mightypork.gamecore.util.math.constraints.vect.mutable.VectVar;
-import mightypork.rogue.events.ActionRequest;
-import mightypork.rogue.events.ActionRequest.RequestType;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
@@ -140,7 +139,7 @@ public class InputSystem extends RootBusNode implements Updateable, KeyBinder {
}
if (Display.isCloseRequested()) {
- getEventBus().send(new ActionRequest(RequestType.SHUTDOWN));
+ getEventBus().send(new ShudownRequest());
}
}
diff --git a/src/mightypork/gamecore/input/KeyConfig.java b/src/mightypork/gamecore/input/KeyConfig.java
index 1f147ee..2eab30f 100644
--- a/src/mightypork/gamecore/input/KeyConfig.java
+++ b/src/mightypork/gamecore/input/KeyConfig.java
@@ -4,14 +4,32 @@ package mightypork.gamecore.input;
import java.util.HashMap;
import java.util.Map;
-import mightypork.gamecore.ConfigSetup;
+import mightypork.gamecore.Config.ConfigSetup;
import mightypork.gamecore.util.files.config.Property;
import mightypork.gamecore.util.files.config.PropertyManager;
public class KeyConfig implements ConfigSetup {
- private static KeyConfig inst = new KeyConfig();
+ /**
+ * Key configurator
+ */
+ public static interface KeySetup {
+
+ public void addKeys(KeyOpts keys);
+ }
+
+ /**
+ * Key configurator access
+ */
+ public static class KeyOpts {
+
+ public void add(String cfgKey, String dataString)
+ {
+ strokes.put(prefixKey(cfgKey), new KeyProperty(prefixKey(cfgKey), KeyStroke.createFromDataString(dataString), null));
+ }
+ }
+
/**
* Key property.
@@ -62,16 +80,28 @@ public class KeyConfig implements ConfigSetup {
}
+ private static KeyConfig inst = new KeyConfig();
+ public static KeyOpts keyOpts = new KeyOpts();
+
private static Map strokes = new HashMap<>();
private static PropertyManager prop;
- public static void addKeyLayout(KeySetup layout)
+ public static void registerKeys(KeySetup layout)
+ {
+ layout.addKeys(keyOpts);
+ }
+
+
+ public static String prefixKey(String cfgKey)
{
- layout.addKeys(inst);
+ return "key." + cfgKey;
}
+ /**
+ * Add key options to a config manager
+ */
@Override
public void addOptions(PropertyManager prop)
{
@@ -83,15 +113,9 @@ public class KeyConfig implements ConfigSetup {
}
- public void add(String cfgKey, String dataString)
- {
- strokes.put(cfgKey, new KeyProperty(cfgKey, KeyStroke.createFromDataString(dataString), null));
- }
-
-
public static KeyStroke get(String cfgKey)
{
- final KeyProperty kp = strokes.get(cfgKey);
+ final KeyProperty kp = strokes.get(prefixKey(cfgKey));
if (kp == null) throw new IllegalArgumentException("No such stroke: " + cfgKey);
return kp.getValue();
}
@@ -99,7 +123,7 @@ public class KeyConfig implements ConfigSetup {
public static void set(String cfgKey, int key, int mod)
{
- final KeyProperty kp = strokes.get(cfgKey);
+ final KeyProperty kp = strokes.get(prefixKey(cfgKey));
if (kp == null) throw new IllegalArgumentException("No such stroke: " + cfgKey);
kp.getValue().setTo(key, mod);
diff --git a/src/mightypork/gamecore/input/KeySetup.java b/src/mightypork/gamecore/input/KeySetup.java
deleted file mode 100644
index bdd3396..0000000
--- a/src/mightypork/gamecore/input/KeySetup.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package mightypork.gamecore.input;
-
-
-public interface KeySetup {
-
- public void addKeys(KeyConfig keys);
-}
diff --git a/src/mightypork/gamecore/logging/Log.java b/src/mightypork/gamecore/logging/Log.java
index 6e344ac..8895280 100644
--- a/src/mightypork/gamecore/logging/Log.java
+++ b/src/mightypork/gamecore/logging/Log.java
@@ -292,15 +292,18 @@ public class Log {
public static String formatMessage(Level level, String message, Throwable throwable, long start_ms)
{
+ if (message == null) message = "";
final String nl = System.getProperty("line.separator");
- if (message.equals("\n")) {
- return nl;
- }
-
- if (message.charAt(0) == '\n') {
- message = nl + message.substring(1);
+ if (message.length() > 0) {
+ if (message.equals("\n")) {
+ return nl;
+ }
+
+ if (message.charAt(0) == '\n') {
+ message = nl + message.substring(1);
+ }
}
final long time_ms = (System.currentTimeMillis() - start_ms);
diff --git a/src/mightypork/gamecore/render/DisplaySystem.java b/src/mightypork/gamecore/render/DisplaySystem.java
index ee77f96..5c41e78 100644
--- a/src/mightypork/gamecore/render/DisplaySystem.java
+++ b/src/mightypork/gamecore/render/DisplaySystem.java
@@ -5,10 +5,11 @@ import static org.lwjgl.opengl.GL11.*;
import java.nio.ByteBuffer;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.AppModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppModule;
import mightypork.gamecore.gui.events.ViewportChangeEvent;
import mightypork.gamecore.logging.Log;
+import mightypork.gamecore.render.events.DisplayReadyEvent;
import mightypork.gamecore.util.math.constraints.rect.Rect;
import mightypork.gamecore.util.math.constraints.rect.proxy.RectBound;
import mightypork.gamecore.util.math.constraints.vect.Vect;
@@ -30,6 +31,7 @@ public class DisplaySystem extends AppModule implements RectBound {
private DisplayMode windowDisplayMode;
private int targetFps;
private FpsMeter fpsMeter;
+ private boolean fullscreenSwitchRequested;
/** Current screen size */
private static final Vect screenSize = new Vect() {
@@ -116,6 +118,12 @@ public class DisplaySystem extends AppModule implements RectBound {
* Toggle FS if possible
*/
public void switchFullscreen()
+ {
+ fullscreenSwitchRequested = true;
+ }
+
+
+ private void doSwitchFullscreen()
{
try {
@@ -133,7 +141,7 @@ public class DisplaySystem extends AppModule implements RectBound {
Display.update();
}
- getEventBus().send(new ViewportChangeEvent(true, Display.isFullscreen(), getSize()));
+ getEventBus().send(new ViewportChangeEvent(getSize()));
} catch (final Throwable t) {
Log.e("Failed to toggle fullscreen mode.", t);
@@ -153,7 +161,7 @@ public class DisplaySystem extends AppModule implements RectBound {
*
* @return screenshot object
*/
- public Screenshot takeScreenshot()
+ public static Screenshot prepareScreenshot()
{
glReadBuffer(GL_FRONT);
final int width = Display.getWidth();
@@ -235,9 +243,11 @@ public class DisplaySystem extends AppModule implements RectBound {
{
// handle resize
if (Display.wasResized()) {
- getEventBus().send(new ViewportChangeEvent(false, Display.isFullscreen(), getSize()));
+ getEventBus().send(new ViewportChangeEvent(getSize()));
}
+ if (fullscreenSwitchRequested) doSwitchFullscreen();
+
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
fpsMeter.frame();
diff --git a/src/mightypork/gamecore/render/Render.java b/src/mightypork/gamecore/render/Render.java
index ba5e512..d005697 100644
--- a/src/mightypork/gamecore/render/Render.java
+++ b/src/mightypork/gamecore/render/Render.java
@@ -241,7 +241,7 @@ public class Render {
{
pushed++;
- if (pushed >= 20) {
+ if (pushed >= 100) {
Log.w("Suspicious number of state pushes: " + pushed);
}
@@ -528,14 +528,14 @@ public class Render {
public static void enterBatchTexturedQuadMode(GLTexture texture)
{
texture.bind();
- GL11.glBegin(GL11.GL_QUADS);
+ glBegin(GL11.GL_QUADS);
batchTexturedQuadMode = true;
}
public static void leaveBatchTexturedQuadMode()
{
- GL11.glEnd();
+ glEnd();
batchTexturedQuadMode = false;
}
}
diff --git a/src/mightypork/gamecore/render/TaskTakeScreenshot.java b/src/mightypork/gamecore/render/TaskTakeScreenshot.java
new file mode 100644
index 0000000..aab8759
--- /dev/null
+++ b/src/mightypork/gamecore/render/TaskTakeScreenshot.java
@@ -0,0 +1,53 @@
+package mightypork.gamecore.render;
+
+
+import java.io.File;
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import mightypork.gamecore.WorkDir;
+import mightypork.gamecore.logging.Log;
+
+import org.newdawn.slick.opengl.GLUtils;
+
+
+public class TaskTakeScreenshot implements Runnable {
+
+ private final Screenshot scr;
+
+
+ public TaskTakeScreenshot()
+ {
+ GLUtils.checkGLContext();
+ scr = DisplaySystem.prepareScreenshot();
+ }
+
+
+ @Override
+ public void run()
+ {
+ final DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
+ final String fname = df.format(new Date());
+
+ // generate unique filename
+ File file;
+ int index = 0;
+ while (true) {
+ file = new File(WorkDir.getDir("screenshots"), fname + (index > 0 ? "-" + index : "") + ".png");
+ if (!file.exists()) break;
+ index++;
+ }
+
+ Log.f3("Saving screenshot to file: " + file);
+
+ // save to disk
+ try {
+ scr.save(file);
+ } catch (final IOException e) {
+ Log.e("Failed to save screenshot.", e);
+ }
+ }
+
+}
diff --git a/src/mightypork/gamecore/render/DisplayReadyEvent.java b/src/mightypork/gamecore/render/events/DisplayReadyEvent.java
similarity index 84%
rename from src/mightypork/gamecore/render/DisplayReadyEvent.java
rename to src/mightypork/gamecore/render/events/DisplayReadyEvent.java
index 3e87fdb..778d9b8 100644
--- a/src/mightypork/gamecore/render/DisplayReadyEvent.java
+++ b/src/mightypork/gamecore/render/events/DisplayReadyEvent.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.render;
+package mightypork.gamecore.render.events;
import mightypork.gamecore.eventbus.BusEvent;
diff --git a/src/mightypork/gamecore/render/DisplayReadyListener.java b/src/mightypork/gamecore/render/events/DisplayReadyListener.java
similarity index 61%
rename from src/mightypork/gamecore/render/DisplayReadyListener.java
rename to src/mightypork/gamecore/render/events/DisplayReadyListener.java
index 90716d2..36f3e1b 100644
--- a/src/mightypork/gamecore/render/DisplayReadyListener.java
+++ b/src/mightypork/gamecore/render/events/DisplayReadyListener.java
@@ -1,4 +1,4 @@
-package mightypork.gamecore.render;
+package mightypork.gamecore.render.events;
public interface DisplayReadyListener {
diff --git a/src/mightypork/gamecore/render/events/FullscreenToggleRequest.java b/src/mightypork/gamecore/render/events/FullscreenToggleRequest.java
new file mode 100644
index 0000000..1410692
--- /dev/null
+++ b/src/mightypork/gamecore/render/events/FullscreenToggleRequest.java
@@ -0,0 +1,17 @@
+package mightypork.gamecore.render.events;
+
+
+import mightypork.gamecore.eventbus.BusEvent;
+import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent;
+import mightypork.gamecore.render.DisplaySystem;
+
+
+@SingleReceiverEvent
+public class FullscreenToggleRequest extends BusEvent {
+
+ @Override
+ protected void handleBy(DisplaySystem handler)
+ {
+ handler.switchFullscreen();
+ }
+}
diff --git a/src/mightypork/gamecore/render/events/ScreenshotRequest.java b/src/mightypork/gamecore/render/events/ScreenshotRequest.java
new file mode 100644
index 0000000..a7ea0b6
--- /dev/null
+++ b/src/mightypork/gamecore/render/events/ScreenshotRequest.java
@@ -0,0 +1,15 @@
+package mightypork.gamecore.render.events;
+
+
+import mightypork.gamecore.eventbus.BusEvent;
+
+
+public class ScreenshotRequest extends BusEvent {
+
+ @Override
+ protected void handleBy(ScreenshotRequestListener handler)
+ {
+ handler.onScreenshotRequest();
+ }
+
+}
diff --git a/src/mightypork/gamecore/render/events/ScreenshotRequestListener.java b/src/mightypork/gamecore/render/events/ScreenshotRequestListener.java
new file mode 100644
index 0000000..1850540
--- /dev/null
+++ b/src/mightypork/gamecore/render/events/ScreenshotRequestListener.java
@@ -0,0 +1,7 @@
+package mightypork.gamecore.render.events;
+
+
+public interface ScreenshotRequestListener {
+
+ public void onScreenshotRequest();
+}
diff --git a/src/mightypork/gamecore/resources/AsyncResourceLoader.java b/src/mightypork/gamecore/resources/AsyncResourceLoader.java
index a49e0dd..37b7730 100644
--- a/src/mightypork/gamecore/resources/AsyncResourceLoader.java
+++ b/src/mightypork/gamecore/resources/AsyncResourceLoader.java
@@ -5,7 +5,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
-import mightypork.gamecore.app.MainLoopRequest;
+import mightypork.gamecore.core.MainLoopRequest;
import mightypork.gamecore.eventbus.BusAccess;
import mightypork.gamecore.eventbus.events.Destroyable;
import mightypork.gamecore.logging.Log;
diff --git a/src/mightypork/gamecore/resources/Res.java b/src/mightypork/gamecore/resources/Res.java
index 544dc27..9cd4b32 100644
--- a/src/mightypork/gamecore/resources/Res.java
+++ b/src/mightypork/gamecore/resources/Res.java
@@ -1,14 +1,14 @@
package mightypork.gamecore.resources;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.resources.audio.SoundBank;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.resources.audio.SoundRegistry;
import mightypork.gamecore.resources.audio.players.EffectPlayer;
import mightypork.gamecore.resources.audio.players.LoopPlayer;
-import mightypork.gamecore.resources.fonts.FontBank;
+import mightypork.gamecore.resources.fonts.FontRegistry;
import mightypork.gamecore.resources.fonts.GLFont;
import mightypork.gamecore.resources.textures.GLTexture;
-import mightypork.gamecore.resources.textures.TextureBank;
+import mightypork.gamecore.resources.textures.TextureRegistry;
import mightypork.gamecore.resources.textures.TxQuad;
import mightypork.gamecore.resources.textures.TxSheet;
@@ -20,9 +20,9 @@ import mightypork.gamecore.resources.textures.TxSheet;
*/
public final class Res {
- private static TextureBank textures;
- private static SoundBank sounds;
- private static FontBank fonts;
+ private static TextureRegistry textures;
+ private static SoundRegistry sounds;
+ private static FontRegistry fonts;
private static boolean initialized = false;
@@ -37,9 +37,9 @@ public final class Res {
if (initialized) return;
initialized = true;
- textures = new TextureBank(app);
- sounds = new SoundBank(app);
- fonts = new FontBank(app);
+ textures = new TextureRegistry(app);
+ sounds = new SoundRegistry(app);
+ fonts = new FontRegistry(app);
}
diff --git a/src/mightypork/gamecore/resources/ResourceLoader.java b/src/mightypork/gamecore/resources/ResourceLoader.java
index 671383c..3dc14b0 100644
--- a/src/mightypork/gamecore/resources/ResourceLoader.java
+++ b/src/mightypork/gamecore/resources/ResourceLoader.java
@@ -20,7 +20,7 @@ public interface ResourceLoader {
/**
- * Initialize the loader (async loader may start a stread)
+ * Initialize the loader (Join the bus, start a stread etc)
*
* @param app app the loader works for. The event bus must already be
* initialized.
diff --git a/src/mightypork/gamecore/resources/ResourceSetup.java b/src/mightypork/gamecore/resources/ResourceSetup.java
index 1e3ac10..b7e7ba0 100644
--- a/src/mightypork/gamecore/resources/ResourceSetup.java
+++ b/src/mightypork/gamecore/resources/ResourceSetup.java
@@ -1,9 +1,9 @@
package mightypork.gamecore.resources;
-import mightypork.gamecore.resources.audio.SoundBank;
-import mightypork.gamecore.resources.fonts.FontBank;
-import mightypork.gamecore.resources.textures.TextureBank;
+import mightypork.gamecore.resources.audio.SoundRegistry;
+import mightypork.gamecore.resources.fonts.FontRegistry;
+import mightypork.gamecore.resources.textures.TextureRegistry;
/**
@@ -18,7 +18,7 @@ public interface ResourceSetup {
*
* @param fonts font registry
*/
- void addFonts(FontBank fonts);
+ void addFonts(FontRegistry fonts);
/**
@@ -26,7 +26,7 @@ public interface ResourceSetup {
*
* @param sounds sound registry
*/
- void addSounds(SoundBank sounds);
+ void addSounds(SoundRegistry sounds);
/**
@@ -34,5 +34,5 @@ public interface ResourceSetup {
*
* @param textures texture registry
*/
- void addTextures(TextureBank textures);
+ void addTextures(TextureRegistry textures);
}
diff --git a/src/mightypork/gamecore/resources/audio/SoundBank.java b/src/mightypork/gamecore/resources/audio/SoundRegistry.java
similarity index 91%
rename from src/mightypork/gamecore/resources/audio/SoundBank.java
rename to src/mightypork/gamecore/resources/audio/SoundRegistry.java
index 82167f6..7cef233 100644
--- a/src/mightypork/gamecore/resources/audio/SoundBank.java
+++ b/src/mightypork/gamecore/resources/audio/SoundRegistry.java
@@ -4,8 +4,8 @@ package mightypork.gamecore.resources.audio;
import java.util.HashMap;
import java.util.Map;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.LightAppModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppAccessAdapter;
import mightypork.gamecore.resources.audio.players.EffectPlayer;
import mightypork.gamecore.resources.audio.players.LoopPlayer;
@@ -15,7 +15,7 @@ import mightypork.gamecore.resources.audio.players.LoopPlayer;
*
* @author MightyPork
*/
-public class SoundBank extends LightAppModule {
+public class SoundRegistry extends AppAccessAdapter {
private final Map effects = new HashMap<>();
private final Map loops = new HashMap<>();
@@ -24,7 +24,7 @@ public class SoundBank extends LightAppModule {
/**
* @param app app access
*/
- public SoundBank(AppAccess app)
+ public SoundRegistry(AppAccess app)
{
super(app);
if (getSoundSystem() == null) throw new NullPointerException("SoundSystem cannot be null.");
diff --git a/src/mightypork/gamecore/resources/audio/SoundSystem.java b/src/mightypork/gamecore/resources/audio/SoundSystem.java
index 8f6d7fa..b70b504 100644
--- a/src/mightypork/gamecore/resources/audio/SoundSystem.java
+++ b/src/mightypork/gamecore/resources/audio/SoundSystem.java
@@ -5,7 +5,7 @@ import java.nio.FloatBuffer;
import java.util.HashSet;
import java.util.Set;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.eventbus.clients.RootBusNode;
import mightypork.gamecore.eventbus.events.Updateable;
import mightypork.gamecore.resources.ResourceLoadRequest;
diff --git a/src/mightypork/gamecore/resources/fonts/FontBank.java b/src/mightypork/gamecore/resources/fonts/FontRegistry.java
similarity index 88%
rename from src/mightypork/gamecore/resources/fonts/FontBank.java
rename to src/mightypork/gamecore/resources/fonts/FontRegistry.java
index cf4ab63..896a602 100644
--- a/src/mightypork/gamecore/resources/fonts/FontBank.java
+++ b/src/mightypork/gamecore/resources/fonts/FontRegistry.java
@@ -3,8 +3,8 @@ package mightypork.gamecore.resources.fonts;
import java.util.HashMap;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.LightAppModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppAccessAdapter;
import mightypork.gamecore.resources.ResourceLoadRequest;
import mightypork.gamecore.resources.fonts.impl.DeferredFont;
@@ -16,12 +16,12 @@ import org.newdawn.slick.opengl.Texture;
*
* @author MightyPork
*/
-public class FontBank extends LightAppModule {
+public class FontRegistry extends AppAccessAdapter {
/**
* @param app app access
*/
- public FontBank(AppAccess app)
+ public FontRegistry(AppAccess app)
{
super(app);
}
diff --git a/src/mightypork/gamecore/resources/textures/TextureBank.java b/src/mightypork/gamecore/resources/textures/TextureRegistry.java
similarity index 94%
rename from src/mightypork/gamecore/resources/textures/TextureBank.java
rename to src/mightypork/gamecore/resources/textures/TextureRegistry.java
index c03b77c..d1fb9a3 100644
--- a/src/mightypork/gamecore/resources/textures/TextureBank.java
+++ b/src/mightypork/gamecore/resources/textures/TextureRegistry.java
@@ -4,8 +4,8 @@ package mightypork.gamecore.resources.textures;
import java.util.HashMap;
import java.util.Map;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.LightAppModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppAccessAdapter;
import mightypork.gamecore.resources.ResourceLoadRequest;
import mightypork.gamecore.util.error.KeyAlreadyExistsException;
import mightypork.gamecore.util.math.constraints.rect.Rect;
@@ -17,7 +17,7 @@ import mightypork.gamecore.util.math.constraints.rect.Rect;
*
* @author MightyPork
*/
-public class TextureBank extends LightAppModule {
+public class TextureRegistry extends AppAccessAdapter {
private final Map textures = new HashMap<>();
private final Map sheets = new HashMap<>();
@@ -26,7 +26,7 @@ public class TextureBank extends LightAppModule {
/**
* @param app app access
*/
- public TextureBank(AppAccess app)
+ public TextureRegistry(AppAccess app)
{
super(app);
}
diff --git a/src/mightypork/rogue/Launcher.java b/src/mightypork/rogue/Launcher.java
index 9e482c4..19652da 100644
--- a/src/mightypork/rogue/Launcher.java
+++ b/src/mightypork/rogue/Launcher.java
@@ -4,7 +4,7 @@ package mightypork.rogue;
import java.io.File;
import java.util.Arrays;
-import mightypork.gamecore.app.BaseApp;
+import mightypork.gamecore.core.BaseApp;
import mightypork.gamecore.logging.Log;
import mightypork.gamecore.util.files.OsUtils;
@@ -46,13 +46,8 @@ public class Launcher {
final BaseApp app = new RogueApp(workdir, true);
- app.addResources(new RogueResources());
- app.addKeys(new RogueKeys());
- app.addConfig(new RogueConfig());
-
- app.setBusLogging(false);
- app.setConfigFile("config.ini", "Rogue config file");
- app.setLogOptions("/", "runtime", 5, java.util.logging.Level.ALL);
+ // configure the app
+ app.opt().setBusLogging(true);
app.start();
}
diff --git a/src/mightypork/rogue/RogueApp.java b/src/mightypork/rogue/RogueApp.java
index d5e0733..b6c0a08 100644
--- a/src/mightypork/rogue/RogueApp.java
+++ b/src/mightypork/rogue/RogueApp.java
@@ -4,20 +4,19 @@ package mightypork.rogue;
import java.io.File;
import mightypork.gamecore.Config;
-import mightypork.gamecore.app.BaseApp;
-import mightypork.gamecore.app.MainLoop;
-import mightypork.gamecore.app.MainLoopRequest;
+import mightypork.gamecore.core.BaseApp;
+import mightypork.gamecore.core.MainLoopRequest;
import mightypork.gamecore.eventbus.BusEvent;
import mightypork.gamecore.gui.screens.ScreenRegistry;
import mightypork.gamecore.input.InputSystem;
import mightypork.gamecore.input.KeyConfig;
import mightypork.gamecore.input.KeyStroke.Edge;
import mightypork.gamecore.render.DisplaySystem;
+import mightypork.gamecore.render.events.FullscreenToggleRequest;
+import mightypork.gamecore.render.events.ScreenshotRequest;
import mightypork.gamecore.util.ion.Ion;
import mightypork.rogue.RogueStateManager.RogueState;
-import mightypork.rogue.events.ActionRequest;
-import mightypork.rogue.events.ActionRequest.RequestType;
-import mightypork.rogue.events.GameStateRequest;
+import mightypork.rogue.events.RogueStateRequest;
import mightypork.rogue.screens.FpsOverlay;
import mightypork.rogue.screens.LoadingOverlay;
import mightypork.rogue.screens.game.ScreenGame;
@@ -39,6 +38,14 @@ public final class RogueApp extends BaseApp {
public RogueApp(File workdir, boolean singleInstance)
{
super(workdir, singleInstance);
+
+ opt().addRoutes(new RogueRoutes());
+ opt().addResources(new RogueResources());
+ opt().addKeys(new RogueKeys());
+ opt().addConfig(new RogueConfig());
+
+ opt().setConfigFile(this, "config.ini", "Rogue config file");
+ opt().setLogOptions("/", "runtime", 5, java.util.logging.Level.ALL);
}
@@ -84,11 +91,11 @@ public final class RogueApp extends BaseApp {
protected void initInputSystem(InputSystem input)
{
// this will work only with reusable events (such as requests)
- bindEventToKey(new ActionRequest(RequestType.FULLSCREEN), "key.global.fullscreen");
- bindEventToKey(new ActionRequest(RequestType.SCREENSHOT), "key.global.screenshot");
+ bindEventToKey(new FullscreenToggleRequest(), "global.fullscreen");
+ bindEventToKey(new ScreenshotRequest(), "global.screenshot");
- bindEventToKey(new GameStateRequest(RogueState.EXIT), "key.global.quit");
- bindEventToKey(new GameStateRequest(RogueState.MAIN_MENU), "key.global.menu");
+ bindEventToKey(new RogueStateRequest(RogueState.EXIT), "global.quit");
+ bindEventToKey(new RogueStateRequest(RogueState.MAIN_MENU), "global.menu");
}
@@ -105,13 +112,6 @@ public final class RogueApp extends BaseApp {
}
- @Override
- protected MainLoop createMainLoop()
- {
- return new RogueMainLoop(this);
- }
-
-
@Override
protected void postInit()
{
@@ -120,7 +120,7 @@ public final class RogueApp extends BaseApp {
@Override
public void run()
{
- getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU));
+ getEventBus().send(new RogueStateRequest(RogueState.MAIN_MENU));
//getEventBus().send(new CrossfadeRequest("test.layout", true));
}
}));
diff --git a/src/mightypork/rogue/RogueConfig.java b/src/mightypork/rogue/RogueConfig.java
index 4eb58de..b2a553e 100644
--- a/src/mightypork/rogue/RogueConfig.java
+++ b/src/mightypork/rogue/RogueConfig.java
@@ -1,7 +1,7 @@
package mightypork.rogue;
-import mightypork.gamecore.ConfigSetup;
+import mightypork.gamecore.Config.ConfigSetup;
import mightypork.gamecore.util.files.config.PropertyManager;
diff --git a/src/mightypork/rogue/RogueKeys.java b/src/mightypork/rogue/RogueKeys.java
index 4b6caef..f5415de 100644
--- a/src/mightypork/rogue/RogueKeys.java
+++ b/src/mightypork/rogue/RogueKeys.java
@@ -1,23 +1,23 @@
package mightypork.rogue;
-import mightypork.gamecore.input.KeyConfig;
-import mightypork.gamecore.input.KeySetup;
+import mightypork.gamecore.input.KeyConfig.KeyOpts;
+import mightypork.gamecore.input.KeyConfig.KeySetup;
public class RogueKeys implements KeySetup {
@Override
- public void addKeys(KeyConfig keys)
+ public void addKeys(KeyOpts keys)
{
- keys.add("key.global.quit", "CTRL+SHIFT+Q");
- keys.add("key.global.menu", "CTRL+SHIFT+M");
- keys.add("key.global.screenshot", "F2");
- keys.add("key.global.fullscreen", "F11");
+ keys.add("global.quit", "CTRL+Q");
+ keys.add("global.menu", "CTRL+M");
+ keys.add("global.screenshot", "F2");
+ keys.add("global.fullscreen", "F11");
- keys.add("key.general.cancel", "ESC");
- keys.add("key.general.confirm", "ENTER");
- keys.add("key.general.yes", "Y");
- keys.add("key.general.no", "N");
+ keys.add("general.cancel", "ESC");
+ keys.add("general.confirm", "ENTER");
+ keys.add("general.yes", "Y");
+ keys.add("general.no", "N");
}
}
diff --git a/src/mightypork/rogue/RogueMainLoop.java b/src/mightypork/rogue/RogueMainLoop.java
deleted file mode 100644
index 2049bcc..0000000
--- a/src/mightypork/rogue/RogueMainLoop.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package mightypork.rogue;
-
-
-import java.io.File;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import mightypork.gamecore.WorkDir;
-import mightypork.gamecore.app.BaseApp;
-import mightypork.gamecore.app.MainLoop;
-import mightypork.gamecore.gui.Action;
-import mightypork.gamecore.logging.Log;
-import mightypork.gamecore.render.Screenshot;
-import mightypork.gamecore.resources.Res;
-import mightypork.gamecore.util.Utils;
-import mightypork.rogue.events.ActionRequest;
-import mightypork.rogue.events.ActionRequest.RequestType;
-
-
-public final class RogueMainLoop extends MainLoop implements ActionRequest.Listener {
-
- public RogueMainLoop(BaseApp app)
- {
- super(app);
- }
-
-
- @Override
- public void requestAction(RequestType request)
- {
- switch (request) {
- case FULLSCREEN:
- queueTask(taskFullscreen);
- break;
-
- case SCREENSHOT:
- queueTask(taskScreenshot);
- break;
-
- case SHUTDOWN:
- queueTask(taskShutdown);
- }
- }
-
- /*
- * Take a screenshot
- */
- private final Action taskScreenshot = new Action() {
-
- @Override
- public void execute()
- {
- Res.getSoundEffect("gui.shutter").play(1);
- Utils.runAsThread(new TaskTakeScreenshot());
- }
- };
-
- /*
- * Shutdown the application
- */
- private final Action taskShutdown = new Action() {
-
- @Override
- public void execute()
- {
- shutdown();
- }
- };
-
- /*
- * Toggle fullscreen
- */
- private final Action taskFullscreen = new Action() {
-
- @Override
- public void execute()
- {
- getDisplay().switchFullscreen();
- }
- };
-
- // TODO factor into gamecore
- private class TaskTakeScreenshot implements Runnable {
-
- private final Screenshot scr;
-
-
- public TaskTakeScreenshot()
- {
- scr = getDisplay().takeScreenshot();
- }
-
-
- @Override
- public void run()
- {
- final DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
- final String fname = df.format(new Date());
-
- // generate unique filename
- File file;
- int index = 0;
- while (true) {
- file = new File(WorkDir.getDir("screenshots"), fname + (index > 0 ? "-" + index : "") + ".png");
- if (!file.exists()) break;
- index++;
- }
-
- Log.f3("Saving screenshot to file: " + file);
-
- // save to disk
- try {
- scr.save(file);
- } catch (final IOException e) {
- Log.e("Failed to save screenshot.", e);
- }
- }
-
- }
-
-}
diff --git a/src/mightypork/rogue/RogueResources.java b/src/mightypork/rogue/RogueResources.java
index d354175..e67b756 100644
--- a/src/mightypork/rogue/RogueResources.java
+++ b/src/mightypork/rogue/RogueResources.java
@@ -2,14 +2,14 @@ package mightypork.rogue;
import mightypork.gamecore.resources.ResourceSetup;
-import mightypork.gamecore.resources.audio.SoundBank;
-import mightypork.gamecore.resources.fonts.FontBank;
+import mightypork.gamecore.resources.audio.SoundRegistry;
+import mightypork.gamecore.resources.fonts.FontRegistry;
import mightypork.gamecore.resources.fonts.Glyphs;
import mightypork.gamecore.resources.fonts.impl.DeferredFont;
import mightypork.gamecore.resources.textures.FilterMode;
import mightypork.gamecore.resources.textures.GLTexture;
import mightypork.gamecore.resources.textures.QuadGrid;
-import mightypork.gamecore.resources.textures.TextureBank;
+import mightypork.gamecore.resources.textures.TextureRegistry;
import mightypork.gamecore.resources.textures.WrapMode;
import mightypork.gamecore.util.math.constraints.rect.Rect;
@@ -18,7 +18,7 @@ public class RogueResources implements ResourceSetup {
@Override
- public void addFonts(FontBank fonts)
+ public void addFonts(FontRegistry fonts)
{
DeferredFont font;
@@ -39,14 +39,14 @@ public class RogueResources implements ResourceSetup {
@Override
- public void addSounds(SoundBank sounds)
+ public void addSounds(SoundRegistry sounds)
{
sounds.addEffect("gui.shutter", "/res/audio/shutter.ogg", 1, 1);
}
@Override
- public void addTextures(TextureBank textures)
+ public void addTextures(TextureRegistry textures)
{
GLTexture texture;
QuadGrid grid;
diff --git a/src/mightypork/rogue/RogueRoutes.java b/src/mightypork/rogue/RogueRoutes.java
new file mode 100644
index 0000000..2240e23
--- /dev/null
+++ b/src/mightypork/rogue/RogueRoutes.java
@@ -0,0 +1,18 @@
+package mightypork.rogue;
+
+
+import mightypork.gamecore.WorkDir.RouteOpts;
+import mightypork.gamecore.WorkDir.RouteSetup;
+
+
+public class RogueRoutes implements RouteSetup {
+
+ @Override
+ public void addRoutes(RouteOpts routeOpts)
+ {
+ routeOpts.addPath("slot1", "saves/slot_1.ion");
+ routeOpts.addPath("slot2", "saves/slot_2.ion");
+ routeOpts.addPath("slot3", "saves/slot_3.ion");
+ }
+
+}
diff --git a/src/mightypork/rogue/RogueStateManager.java b/src/mightypork/rogue/RogueStateManager.java
index d808e7b..c96d1a9 100644
--- a/src/mightypork/rogue/RogueStateManager.java
+++ b/src/mightypork/rogue/RogueStateManager.java
@@ -1,8 +1,8 @@
package mightypork.rogue;
-import mightypork.gamecore.app.AppAccess;
-import mightypork.gamecore.app.AppModule;
+import mightypork.gamecore.core.AppAccess;
+import mightypork.gamecore.core.AppModule;
import mightypork.gamecore.gui.events.CrossfadeRequest;
import mightypork.gamecore.logging.Log;
diff --git a/src/mightypork/rogue/events/ActionRequest.java b/src/mightypork/rogue/events/ActionRequest.java
deleted file mode 100644
index a1265aa..0000000
--- a/src/mightypork/rogue/events/ActionRequest.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package mightypork.rogue.events;
-
-
-import mightypork.gamecore.eventbus.BusEvent;
-import mightypork.gamecore.eventbus.event_flags.SingleReceiverEvent;
-
-
-/**
- * Request for a global action to be done in the main loop.
- *
- * @author MightyPork
- */
-@SingleReceiverEvent
-public class ActionRequest extends BusEvent {
-
- private final RequestType type;
-
-
- public ActionRequest(RequestType request)
- {
- type = request;
- }
-
-
- @Override
- public void handleBy(Listener handler)
- {
- handler.requestAction(type);
- }
-
- public interface Listener {
-
- /**
- * Perform the requested action
- *
- * @param request
- */
- void requestAction(RequestType request);
- }
-
-
- @Override
- public String toString()
- {
- return "ActionRequest(" + type + ")";
- }
-
- public static enum RequestType
- {
- FULLSCREEN, SCREENSHOT, SHUTDOWN;
- }
-}
diff --git a/src/mightypork/rogue/events/GameStateRequest.java b/src/mightypork/rogue/events/RogueStateRequest.java
similarity index 78%
rename from src/mightypork/rogue/events/GameStateRequest.java
rename to src/mightypork/rogue/events/RogueStateRequest.java
index 14c0438..678c23b 100644
--- a/src/mightypork/rogue/events/GameStateRequest.java
+++ b/src/mightypork/rogue/events/RogueStateRequest.java
@@ -11,12 +11,12 @@ import mightypork.rogue.RogueStateManager.RogueState;
*
* @author MightyPork
*/
-public class GameStateRequest extends BusEvent {
+public class RogueStateRequest extends BusEvent {
final private RogueState requested;
- public GameStateRequest(RogueState requested)
+ public RogueStateRequest(RogueState requested)
{
this.requested = requested;
}
diff --git a/src/mightypork/rogue/screens/FpsOverlay.java b/src/mightypork/rogue/screens/FpsOverlay.java
index 04b72df..4f07702 100644
--- a/src/mightypork/rogue/screens/FpsOverlay.java
+++ b/src/mightypork/rogue/screens/FpsOverlay.java
@@ -1,7 +1,7 @@
package mightypork.rogue.screens;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.Action;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.painters.TextPainter;
diff --git a/src/mightypork/rogue/screens/LoadingOverlay.java b/src/mightypork/rogue/screens/LoadingOverlay.java
index a2f8ded..8e73c8c 100644
--- a/src/mightypork/rogue/screens/LoadingOverlay.java
+++ b/src/mightypork/rogue/screens/LoadingOverlay.java
@@ -1,7 +1,7 @@
package mightypork.rogue.screens;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.painters.QuadPainter;
import mightypork.gamecore.gui.components.painters.TextPainter;
diff --git a/src/mightypork/rogue/screens/game/DeathLayer.java b/src/mightypork/rogue/screens/game/DeathLayer.java
index b45227f..35e3831 100644
--- a/src/mightypork/rogue/screens/game/DeathLayer.java
+++ b/src/mightypork/rogue/screens/game/DeathLayer.java
@@ -19,7 +19,7 @@ import mightypork.gamecore.resources.fonts.GLFont;
import mightypork.gamecore.util.math.color.pal.RGB;
import mightypork.gamecore.util.math.constraints.num.Num;
import mightypork.rogue.RogueStateManager.RogueState;
-import mightypork.rogue.events.GameStateRequest;
+import mightypork.rogue.events.RogueStateRequest;
import mightypork.rogue.screens.game.ScreenGame.GScrState;
import mightypork.rogue.world.WorldProvider;
@@ -84,7 +84,7 @@ public class DeathLayer extends ScreenLayer {
@Override
protected void execute()
{
- getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU));
+ getEventBus().send(new RogueStateRequest(RogueState.MAIN_MENU));
}
});
}
diff --git a/src/mightypork/rogue/screens/game/IngameNav.java b/src/mightypork/rogue/screens/game/IngameNav.java
index 821fa3e..d99ba89 100644
--- a/src/mightypork/rogue/screens/game/IngameNav.java
+++ b/src/mightypork/rogue/screens/game/IngameNav.java
@@ -1,7 +1,7 @@
package mightypork.rogue.screens.game;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.LayoutComponent;
import mightypork.gamecore.gui.components.layout.FlowColumnLayout;
diff --git a/src/mightypork/rogue/screens/game/ScreenGame.java b/src/mightypork/rogue/screens/game/ScreenGame.java
index c5d590e..501b0d2 100644
--- a/src/mightypork/rogue/screens/game/ScreenGame.java
+++ b/src/mightypork/rogue/screens/game/ScreenGame.java
@@ -3,7 +3,7 @@ package mightypork.rogue.screens.game;
import java.io.File;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.Action;
import mightypork.gamecore.gui.ActionGroup;
import mightypork.gamecore.gui.screens.LayeredScreen;
@@ -14,7 +14,7 @@ import mightypork.gamecore.logging.Log;
import mightypork.gamecore.util.math.color.Color;
import mightypork.rogue.Const;
import mightypork.rogue.RogueStateManager.RogueState;
-import mightypork.rogue.events.GameStateRequest;
+import mightypork.rogue.events.RogueStateRequest;
import mightypork.rogue.world.PlayerFacade;
import mightypork.rogue.world.WorldProvider;
import mightypork.rogue.world.events.PlayerKilledListener;
@@ -198,7 +198,7 @@ public class ScreenGame extends LayeredScreen implements PlayerKilledListener {
@Override
public void run()
{
- getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU));
+ getEventBus().send(new RogueStateRequest(RogueState.MAIN_MENU));
}
});
@@ -212,7 +212,7 @@ public class ScreenGame extends LayeredScreen implements PlayerKilledListener {
@Override
public void run()
{
- getEventBus().send(new GameStateRequest(RogueState.EXIT));
+ getEventBus().send(new RogueStateRequest(RogueState.EXIT));
}
});
diff --git a/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java b/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java
index c9ecb56..0b2384d 100644
--- a/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java
+++ b/src/mightypork/rogue/screens/layout_testing/LayoutTestScreen.java
@@ -1,7 +1,7 @@
package mightypork.rogue.screens.layout_testing;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.layout.linear.LinearGap;
import mightypork.gamecore.gui.components.layout.linear.LinearLayout;
diff --git a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java
index b45f511..504474a 100644
--- a/src/mightypork/rogue/screens/menu/ScreenMainMenu.java
+++ b/src/mightypork/rogue/screens/menu/ScreenMainMenu.java
@@ -1,7 +1,7 @@
package mightypork.rogue.screens.menu;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.Action;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.input.TextButton;
@@ -22,7 +22,7 @@ import mightypork.gamecore.util.math.color.pal.PAL16;
import mightypork.gamecore.util.math.constraints.num.Num;
import mightypork.gamecore.util.math.constraints.rect.Rect;
import mightypork.rogue.RogueStateManager.RogueState;
-import mightypork.rogue.events.GameStateRequest;
+import mightypork.rogue.events.RogueStateRequest;
/**
@@ -84,7 +84,7 @@ public class ScreenMainMenu extends LayeredScreen {
@Override
protected void execute()
{
- getEventBus().send(new GameStateRequest(RogueState.SELECT_WORLD));
+ getEventBus().send(new RogueStateRequest(RogueState.SELECT_WORLD));
}
});
rows.add(btn, 2);
@@ -112,7 +112,7 @@ public class ScreenMainMenu extends LayeredScreen {
@Override
protected void execute()
{
- getEventBus().send(new GameStateRequest(RogueState.EXIT));
+ getEventBus().send(new RogueStateRequest(RogueState.EXIT));
}
});
rows.add(btn, 2);
@@ -123,7 +123,7 @@ public class ScreenMainMenu extends LayeredScreen {
@Override
public void run()
{
- getEventBus().send(new GameStateRequest(RogueState.EXIT));
+ getEventBus().send(new RogueStateRequest(RogueState.EXIT));
}
});
}
diff --git a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java
index 1e671fb..95a18b5 100644
--- a/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java
+++ b/src/mightypork/rogue/screens/select_world/ScreenSelectWorld.java
@@ -2,7 +2,7 @@ package mightypork.rogue.screens.select_world;
import mightypork.gamecore.WorkDir;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.layout.RowLayout;
import mightypork.gamecore.gui.components.painters.QuadPainter;
@@ -19,7 +19,7 @@ import mightypork.gamecore.util.math.color.pal.PAL16;
import mightypork.gamecore.util.math.color.pal.RGB;
import mightypork.gamecore.util.math.constraints.rect.Rect;
import mightypork.rogue.RogueStateManager.RogueState;
-import mightypork.rogue.events.GameStateRequest;
+import mightypork.rogue.events.RogueStateRequest;
/**
@@ -72,13 +72,13 @@ public class ScreenSelectWorld extends LayeredScreen {
tp.setVPaddingPercent(20);
tp.setShadow(RGB.BLACK_50, tp.height().mul(0.6 / 8D).toVectXY());
- slot1 = new WorldSlot(root, WorkDir.getFile("save/slot_1.ion"));
+ slot1 = new WorldSlot(root, WorkDir.getFile("slot1"));
rows.add(slot1);
- slot2 = new WorldSlot(root, WorkDir.getFile("save/slot_2.ion"));
+ slot2 = new WorldSlot(root, WorkDir.getFile("slot2"));
rows.add(slot2);
- slot3 = new WorldSlot(root, WorkDir.getFile("save/slot_3.ion"));
+ slot3 = new WorldSlot(root, WorkDir.getFile("slot3"));
rows.add(slot3);
// escape to quitn from here
@@ -87,7 +87,7 @@ public class ScreenSelectWorld extends LayeredScreen {
@Override
public void run()
{
- getEventBus().send(new GameStateRequest(RogueState.MAIN_MENU));
+ getEventBus().send(new RogueStateRequest(RogueState.MAIN_MENU));
}
});
@@ -96,7 +96,7 @@ public class ScreenSelectWorld extends LayeredScreen {
@Override
public void run()
{
- getEventBus().send(new GameStateRequest(RogueState.EXIT));
+ getEventBus().send(new RogueStateRequest(RogueState.EXIT));
}
});
}
diff --git a/src/mightypork/rogue/screens/select_world/WorldSlot.java b/src/mightypork/rogue/screens/select_world/WorldSlot.java
index 97cee9b..37a5f82 100644
--- a/src/mightypork/rogue/screens/select_world/WorldSlot.java
+++ b/src/mightypork/rogue/screens/select_world/WorldSlot.java
@@ -4,7 +4,7 @@ package mightypork.rogue.screens.select_world;
import java.io.File;
import java.io.IOException;
-import mightypork.gamecore.app.AppAccess;
+import mightypork.gamecore.core.AppAccess;
import mightypork.gamecore.gui.Action;
import mightypork.gamecore.gui.AlignX;
import mightypork.gamecore.gui.components.input.TextButton;