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.control.BaseApp; import mightypork.gamecore.control.GameLoop; import mightypork.gamecore.gui.Action; import mightypork.gamecore.render.DisplaySystem; import mightypork.gamecore.render.Screenshot; import mightypork.rogue.events.ActionRequest; import mightypork.rogue.events.ActionRequest.RequestType; import mightypork.rogue.util.Utils; import mightypork.utils.logging.Log; public class MainLoop extends GameLoop implements ActionRequest.Listener { public MainLoop(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.getEffect("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(); } }; private class TaskTakeScreenshot implements Runnable { private final Screenshot scr; public TaskTakeScreenshot() { scr = DisplaySystem.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(Paths.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); } } } }