some cleaning and added volatile keyword
This commit is contained in:
@@ -86,7 +86,7 @@ public class DeferredAudio extends BaseDeferredResource {
|
||||
|
||||
|
||||
@Override
|
||||
protected synchronized final void loadResource(String resource) throws IOException
|
||||
protected void loadResource(String resource) throws IOException
|
||||
{
|
||||
final String ext = FileUtils.getExtension(resource);
|
||||
|
||||
|
||||
@@ -2,7 +2,6 @@ package mightypork.gamecore.audio;
|
||||
|
||||
|
||||
import mightypork.utils.math.Calc;
|
||||
import mightypork.utils.objects.Mutable;
|
||||
|
||||
|
||||
/**
|
||||
@@ -12,7 +11,7 @@ import mightypork.utils.objects.Mutable;
|
||||
*/
|
||||
public class JointVolume extends Volume {
|
||||
|
||||
private final Mutable<Double>[] volumes;
|
||||
private final Volume[] volumes;
|
||||
|
||||
|
||||
/**
|
||||
@@ -34,7 +33,7 @@ public class JointVolume extends Volume {
|
||||
public Double get()
|
||||
{
|
||||
double d = super.get();
|
||||
for (final Mutable<Double> v : volumes)
|
||||
for (final Volume v : volumes)
|
||||
d *= v.get();
|
||||
|
||||
return Calc.clampd(d, 0, 1);
|
||||
|
||||
@@ -84,7 +84,7 @@ public class SoundSystem extends RootBusNode implements Updateable {
|
||||
|
||||
|
||||
@Override
|
||||
public final void deinit()
|
||||
public void deinit()
|
||||
{
|
||||
for (final DeferredAudio r : resources) {
|
||||
r.destroy();
|
||||
|
||||
@@ -53,7 +53,7 @@ public class AppAdapter implements AppAccess {
|
||||
|
||||
|
||||
@Override
|
||||
public void shutdown()
|
||||
public final void shutdown()
|
||||
{
|
||||
app.shutdown();
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ import mightypork.gamecore.gui.screens.ScreenRegistry;
|
||||
import mightypork.gamecore.input.InputSystem;
|
||||
import mightypork.gamecore.loading.AsyncResourceLoader;
|
||||
import mightypork.gamecore.render.DisplaySystem;
|
||||
import mightypork.rogue.util.SlickLogRedirector;
|
||||
import mightypork.utils.files.InstanceLock;
|
||||
import mightypork.utils.logging.Log;
|
||||
import mightypork.utils.logging.LogInstance;
|
||||
|
||||
@@ -22,7 +22,7 @@ public abstract class GameLoop extends AppModule implements MainLoopTaskRequest.
|
||||
private final Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<>();
|
||||
private TimerDelta timer;
|
||||
private Renderable rootRenderable;
|
||||
private boolean running = true;
|
||||
private volatile boolean running = true;
|
||||
|
||||
|
||||
/**
|
||||
@@ -85,14 +85,14 @@ public abstract class GameLoop extends AppModule implements MainLoopTaskRequest.
|
||||
|
||||
|
||||
@Override
|
||||
protected final void deinit()
|
||||
protected void deinit()
|
||||
{
|
||||
running = false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final synchronized void queueTask(Runnable request)
|
||||
public synchronized void queueTask(Runnable request)
|
||||
{
|
||||
taskQueue.add(request);
|
||||
}
|
||||
|
||||
+6
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.util;
|
||||
package mightypork.gamecore.control;
|
||||
|
||||
|
||||
import mightypork.utils.logging.LogInstance;
|
||||
@@ -6,6 +6,11 @@ import mightypork.utils.logging.LogInstance;
|
||||
import org.newdawn.slick.util.LogSystem;
|
||||
|
||||
|
||||
/**
|
||||
* Used to redirect slick log into main logger.
|
||||
*
|
||||
* @author MightyPork
|
||||
*/
|
||||
public class SlickLogRedirector implements LogSystem {
|
||||
|
||||
LogInstance l;
|
||||
@@ -44,6 +44,7 @@ final public class EventBus implements Destroyable {
|
||||
*/
|
||||
public EventBus() {
|
||||
busThread = new QueuePollingThread();
|
||||
busThread.setDaemon(true);
|
||||
busThread.start();
|
||||
}
|
||||
|
||||
|
||||
+12
-3
@@ -1,4 +1,4 @@
|
||||
package mightypork.gamecore.input;
|
||||
package mightypork.gamecore.gui;
|
||||
|
||||
|
||||
/**
|
||||
@@ -16,14 +16,23 @@ public abstract class Action implements Runnable {
|
||||
*
|
||||
* @param enable true to enable
|
||||
*/
|
||||
public final void enable(boolean enable)
|
||||
public void setEnabled(boolean enable)
|
||||
{
|
||||
this.enabled = enable;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return true if this action is enabled.
|
||||
*/
|
||||
public boolean isEnabled()
|
||||
{
|
||||
return enabled;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final void run()
|
||||
public void run()
|
||||
{
|
||||
if (enabled) execute();
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package mightypork.gamecore.gui;
|
||||
|
||||
|
||||
/**
|
||||
* Element that can be assigned an action (ie. button);
|
||||
*
|
||||
* @author MightyPork
|
||||
*/
|
||||
public interface ActionTrigger {
|
||||
|
||||
void setAction(Action action);
|
||||
}
|
||||
@@ -34,14 +34,14 @@ public abstract class ElementHolder extends BusNode implements PluggableRenderab
|
||||
|
||||
|
||||
@Override
|
||||
public final void setContext(RectConstraint context)
|
||||
public void setContext(RectConstraint context)
|
||||
{
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final void render()
|
||||
public void render()
|
||||
{
|
||||
for (final Renderable element : elements) {
|
||||
element.render();
|
||||
@@ -50,7 +50,7 @@ public abstract class ElementHolder extends BusNode implements PluggableRenderab
|
||||
|
||||
|
||||
@Override
|
||||
public final Rect getRect()
|
||||
public Rect getRect()
|
||||
{
|
||||
return context.getRect();
|
||||
}
|
||||
@@ -70,7 +70,7 @@ public abstract class ElementHolder extends BusNode implements PluggableRenderab
|
||||
*
|
||||
* @param elem element; it's context will be set to the constraint.
|
||||
*/
|
||||
public final void attach(PluggableRenderable elem)
|
||||
public void attach(PluggableRenderable elem)
|
||||
{
|
||||
if (elem == null) return;
|
||||
|
||||
|
||||
@@ -63,25 +63,25 @@ public class TextPainter extends PluggableRenderer {
|
||||
}
|
||||
|
||||
|
||||
public final void setColor(RGB color)
|
||||
public void setColor(RGB color)
|
||||
{
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
|
||||
public final void setAlign(Align align)
|
||||
public void setAlign(Align align)
|
||||
{
|
||||
this.align = align;
|
||||
}
|
||||
|
||||
|
||||
public final void setText(String text)
|
||||
public void setText(String text)
|
||||
{
|
||||
this.text = new StringWrapper(text);
|
||||
}
|
||||
|
||||
|
||||
public final void setText(StringProvider text)
|
||||
public void setText(StringProvider text)
|
||||
{
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@@ -24,8 +24,8 @@ public abstract class Screen extends AppSubModule implements Renderable, KeyBind
|
||||
|
||||
private final KeyBindingPool keybindings = new KeyBindingPool();
|
||||
|
||||
private boolean active;
|
||||
private boolean needSetupViewport = false;
|
||||
private volatile boolean active;
|
||||
private volatile boolean needSetupViewport = false;
|
||||
|
||||
|
||||
public Screen(AppAccess app) {
|
||||
@@ -80,6 +80,48 @@ public abstract class Screen extends AppSubModule implements Renderable, KeyBind
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return true if screen is the current screen
|
||||
*/
|
||||
public final boolean isActive()
|
||||
{
|
||||
return active;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void receive(ScreenChangeEvent event)
|
||||
{
|
||||
if (!isActive()) return;
|
||||
|
||||
onSizeChanged(event.getScreenSize());
|
||||
|
||||
needSetupViewport = true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Rect getRect()
|
||||
{
|
||||
return getDisplay().getRect();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void render()
|
||||
{
|
||||
if (!isActive()) return;
|
||||
|
||||
if (needSetupViewport) {
|
||||
Render.setupOrtho();
|
||||
}
|
||||
|
||||
Render.pushState();
|
||||
renderScreen();
|
||||
Render.popState();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called when the screen becomes active
|
||||
*/
|
||||
@@ -118,50 +160,8 @@ public abstract class Screen extends AppSubModule implements Renderable, KeyBind
|
||||
protected abstract void renderScreen();
|
||||
|
||||
|
||||
/**
|
||||
* @return true if screen is the curretn screen
|
||||
*/
|
||||
public final boolean isActive()
|
||||
{
|
||||
return active;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final void receive(ScreenChangeEvent event)
|
||||
{
|
||||
if (!isActive()) return;
|
||||
|
||||
onSizeChanged(event.getScreenSize());
|
||||
|
||||
needSetupViewport = true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public final Rect getRect()
|
||||
{
|
||||
return getDisplay().getRect();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void render()
|
||||
{
|
||||
if (!isActive()) return;
|
||||
|
||||
if (needSetupViewport) {
|
||||
Render.setupOrtho();
|
||||
}
|
||||
|
||||
Render.pushState();
|
||||
renderScreen();
|
||||
Render.popState();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return screen identifier to be used for requests.
|
||||
*/
|
||||
public abstract String getId();
|
||||
public abstract String getName();
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ public abstract class ScreenLayer extends AppSubModule implements Comparable<Scr
|
||||
|
||||
|
||||
@Override
|
||||
public final Rect getRect()
|
||||
public Rect getRect()
|
||||
{
|
||||
return screen.getRect();
|
||||
}
|
||||
|
||||
@@ -11,10 +11,15 @@ import mightypork.gamecore.gui.renderers.Renderable;
|
||||
import mightypork.utils.logging.Log;
|
||||
|
||||
|
||||
/**
|
||||
* Game screens holder; Takes care of rendering and screen requests.
|
||||
*
|
||||
* @author MightyPork
|
||||
*/
|
||||
public class ScreenRegistry extends AppModule implements ScreenRequestEvent.Listener, Renderable {
|
||||
|
||||
private final HashMap<String, Screen> screens = new HashMap<>();
|
||||
private Screen active = null;
|
||||
private volatile Screen active = null;
|
||||
|
||||
|
||||
public ScreenRegistry(AppAccess app) {
|
||||
@@ -22,9 +27,14 @@ public class ScreenRegistry extends AppModule implements ScreenRequestEvent.List
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add a screen
|
||||
*
|
||||
* @param screen added screen
|
||||
*/
|
||||
public void add(Screen screen)
|
||||
{
|
||||
screens.put(screen.getId(), screen);
|
||||
screens.put(screen.getName(), screen);
|
||||
addChildClient(screen);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
package mightypork.gamecore.input;
|
||||
|
||||
|
||||
public interface ActionTrigger {
|
||||
|
||||
void setAction(Action action);
|
||||
}
|
||||
@@ -21,13 +21,15 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequest.L
|
||||
|
||||
public static void launch(BusAccess app)
|
||||
{
|
||||
(new AsyncResourceLoader(app)).start();
|
||||
Thread loader = new AsyncResourceLoader(app);
|
||||
loader.setDaemon(true);
|
||||
loader.start();
|
||||
}
|
||||
|
||||
private final ExecutorService exs = Executors.newCachedThreadPool();
|
||||
|
||||
private final LinkedBlockingQueue<DeferredResource> toLoad = new LinkedBlockingQueue<>();
|
||||
private boolean stopped;
|
||||
private volatile boolean stopped;
|
||||
private final BusAccess app;
|
||||
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@ import mightypork.utils.logging.LoggedName;
|
||||
public abstract class BaseDeferredResource implements DeferredResource, Destroyable {
|
||||
|
||||
private final String resource;
|
||||
private boolean loadFailed = false;
|
||||
private boolean loadAttempted = false;
|
||||
private volatile boolean loadFailed = false;
|
||||
private volatile boolean loadAttempted = false;
|
||||
|
||||
|
||||
public BaseDeferredResource(String resource) {
|
||||
|
||||
@@ -6,7 +6,9 @@ import static org.lwjgl.opengl.GL11.*;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
import mightypork.gamecore.control.AppAccess;
|
||||
import mightypork.gamecore.control.AppModule;
|
||||
import mightypork.gamecore.control.bus.clients.RootBusNode;
|
||||
import mightypork.gamecore.control.bus.events.DestroyEvent;
|
||||
import mightypork.gamecore.control.bus.events.ScreenChangeEvent;
|
||||
import mightypork.gamecore.control.timing.FpsMeter;
|
||||
import mightypork.utils.logging.Log;
|
||||
@@ -21,7 +23,7 @@ import org.lwjgl.opengl.Display;
|
||||
import org.lwjgl.opengl.DisplayMode;
|
||||
|
||||
|
||||
public class DisplaySystem extends RootBusNode implements RectConstraint {
|
||||
public class DisplaySystem extends AppModule implements RectConstraint {
|
||||
|
||||
private DisplayMode windowDisplayMode;
|
||||
private int targetFps;
|
||||
@@ -204,7 +206,7 @@ public class DisplaySystem extends RootBusNode implements RectConstraint {
|
||||
/**
|
||||
* @return current FPS
|
||||
*/
|
||||
public final long getFps()
|
||||
public long getFps()
|
||||
{
|
||||
return fpsMeter.getFPS();
|
||||
}
|
||||
|
||||
@@ -89,6 +89,7 @@ public class App extends BaseApp {
|
||||
log.setSysoutLevel(Level.ALL);
|
||||
log.enable(Config.LOGGING_ENABLED);
|
||||
log.enableSysout(Config.LOG_TO_STDOUT);
|
||||
|
||||
return log;
|
||||
}
|
||||
|
||||
@@ -182,6 +183,8 @@ public class App extends BaseApp {
|
||||
|
||||
// custom channels
|
||||
bus.addChannel(ActionRequest.class, ActionRequest.Listener.class);
|
||||
|
||||
bus.detailedLogging = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
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.input.Action;
|
||||
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 {
|
||||
@@ -33,7 +42,7 @@ public class MainLoop extends GameLoop implements ActionRequest.Listener {
|
||||
}
|
||||
}
|
||||
|
||||
/** Take a screenshot */
|
||||
/* Take a screenshot */
|
||||
private final Action taskScreenshot = new Action() {
|
||||
|
||||
@Override
|
||||
@@ -44,7 +53,7 @@ public class MainLoop extends GameLoop implements ActionRequest.Listener {
|
||||
}
|
||||
};
|
||||
|
||||
/** Shutdown the application */
|
||||
/* Shutdown the application */
|
||||
private final Action taskShutdown = new Action() {
|
||||
|
||||
@Override
|
||||
@@ -54,7 +63,7 @@ public class MainLoop extends GameLoop implements ActionRequest.Listener {
|
||||
}
|
||||
};
|
||||
|
||||
/** Toggle fullscreen */
|
||||
/* Toggle fullscreen */
|
||||
private final Action taskFullscreen = new Action() {
|
||||
|
||||
@Override
|
||||
@@ -63,4 +72,42 @@ public class MainLoop extends GameLoop implements ActionRequest.Listener {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,56 +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.render.DisplaySystem;
|
||||
import mightypork.gamecore.render.Screenshot;
|
||||
import mightypork.utils.logging.Log;
|
||||
|
||||
|
||||
public class TaskTakeScreenshot implements Runnable {
|
||||
|
||||
private final Screenshot scr;
|
||||
|
||||
|
||||
public TaskTakeScreenshot() {
|
||||
scr = DisplaySystem.takeScreenshot();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
final String fname = getUniqueScreenshotName();
|
||||
|
||||
// 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static String getUniqueScreenshotName()
|
||||
{
|
||||
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
|
||||
return df.format(new Date());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -35,7 +35,7 @@ public class ScreenTestBouncy extends LayeredScreen {
|
||||
|
||||
|
||||
@Override
|
||||
public String getId()
|
||||
public String getName()
|
||||
{
|
||||
return "test.bouncy";
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class ScreenTestCat extends LayeredScreen {
|
||||
|
||||
|
||||
@Override
|
||||
public String getId()
|
||||
public String getName()
|
||||
{
|
||||
return "test.cat";
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ public class ScreenTestFont extends Screen {
|
||||
|
||||
|
||||
@Override
|
||||
public String getId()
|
||||
public String getName()
|
||||
{
|
||||
return "test.font";
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user