parent
53b7b02609
commit
f5929f23b1
@ -0,0 +1,38 @@ |
|||||||
|
package mightypork.rogue.bus.events; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.utils.control.bus.Event; |
||||||
|
import mightypork.utils.control.bus.SingularEvent; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Request to execute given {@link Runnable} in main loop. |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class MainLoopTaskRequest implements Event<MainLoopTaskRequest.Listener>, SingularEvent { |
||||||
|
|
||||||
|
private final Runnable task; |
||||||
|
|
||||||
|
|
||||||
|
public MainLoopTaskRequest(Runnable task) { |
||||||
|
this.task = task; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void handleBy(Listener handler) |
||||||
|
{ |
||||||
|
handler.queueTask(task); |
||||||
|
} |
||||||
|
|
||||||
|
public interface Listener { |
||||||
|
|
||||||
|
/** |
||||||
|
* Perform the requested action |
||||||
|
* |
||||||
|
* @param request |
||||||
|
*/ |
||||||
|
public void queueTask(Runnable request); |
||||||
|
} |
||||||
|
} |
@ -1,7 +0,0 @@ |
|||||||
package mightypork.rogue.bus.events; |
|
||||||
|
|
||||||
|
|
||||||
public enum RequestType |
|
||||||
{ |
|
||||||
FULLSCREEN, SCREENSHOT, SHUTDOWN; |
|
||||||
} |
|
@ -0,0 +1,39 @@ |
|||||||
|
package mightypork.rogue.bus.events; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.rogue.Deferred; |
||||||
|
import mightypork.utils.control.bus.Event; |
||||||
|
import mightypork.utils.control.bus.SingularEvent; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Request to schedule loading a deferred resource. |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class ResourceLoadRequest implements Event<ResourceLoadRequest.Listener>, SingularEvent { |
||||||
|
|
||||||
|
private final Deferred resource; |
||||||
|
|
||||||
|
|
||||||
|
public ResourceLoadRequest(Deferred resource) { |
||||||
|
this.resource = resource; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void handleBy(Listener handler) |
||||||
|
{ |
||||||
|
handler.loadResource(resource); |
||||||
|
} |
||||||
|
|
||||||
|
public interface Listener { |
||||||
|
|
||||||
|
/** |
||||||
|
* Load a resource |
||||||
|
* |
||||||
|
* @param resource |
||||||
|
*/ |
||||||
|
public void loadResource(Deferred resource); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package mightypork.rogue.gui.constraints; |
||||||
|
|
||||||
|
|
||||||
|
import static mightypork.utils.math.constraints.ConstraintFactory.*; |
||||||
|
import mightypork.rogue.AppAccess; |
||||||
|
import mightypork.utils.math.constraints.ConstraintContext; |
||||||
|
|
||||||
|
|
||||||
|
public class ColumnHolder extends ElementHolder { |
||||||
|
|
||||||
|
private final int cols; |
||||||
|
private int col = 0; |
||||||
|
|
||||||
|
|
||||||
|
public ColumnHolder(AppAccess app, ConstraintContext context, int rows) { |
||||||
|
super(app, context); |
||||||
|
this.cols = rows; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public ColumnHolder(AppAccess app, int rows) { |
||||||
|
super(app); |
||||||
|
this.cols = rows; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Add a row to the holder. |
||||||
|
* |
||||||
|
* @param elem |
||||||
|
*/ |
||||||
|
public void addRow(RenderableWithContext elem) |
||||||
|
{ |
||||||
|
if (elem == null) return; |
||||||
|
add(elem, c_column(null, cols, col++)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void remove(RenderableWithContext elem) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Can't remove from ColumnHolder."); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,45 @@ |
|||||||
|
package mightypork.rogue.gui.constraints; |
||||||
|
|
||||||
|
|
||||||
|
import static mightypork.utils.math.constraints.ConstraintFactory.*; |
||||||
|
import mightypork.rogue.AppAccess; |
||||||
|
import mightypork.utils.math.constraints.ConstraintContext; |
||||||
|
|
||||||
|
|
||||||
|
public class RowHolder extends ElementHolder { |
||||||
|
|
||||||
|
private final int rows; |
||||||
|
private int row = 0; |
||||||
|
|
||||||
|
|
||||||
|
public RowHolder(AppAccess app, ConstraintContext context, int rows) { |
||||||
|
super(app, context); |
||||||
|
this.rows = rows; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
public RowHolder(AppAccess app, int rows) { |
||||||
|
super(app); |
||||||
|
this.rows = rows; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Add a row to the holder. |
||||||
|
* |
||||||
|
* @param elem |
||||||
|
*/ |
||||||
|
public void addRow(RenderableWithContext elem) |
||||||
|
{ |
||||||
|
if (elem == null) return; |
||||||
|
add(elem, c_row(null, rows, row++)); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void remove(RenderableWithContext elem) |
||||||
|
{ |
||||||
|
throw new UnsupportedOperationException("Can't remove from RowHolder."); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,70 +0,0 @@ |
|||||||
package mightypork.rogue.gui.screens.screenBouncy; |
|
||||||
|
|
||||||
|
|
||||||
import mightypork.rogue.AppAccess; |
|
||||||
import mightypork.rogue.gui.screens.LayeredScreen; |
|
||||||
import mightypork.rogue.input.KeyStroke; |
|
||||||
|
|
||||||
import org.lwjgl.input.Keyboard; |
|
||||||
|
|
||||||
|
|
||||||
public class ScreenTestAnim extends LayeredScreen { |
|
||||||
|
|
||||||
private LayerBouncyBoxes layer; |
|
||||||
|
|
||||||
|
|
||||||
public ScreenTestAnim(AppAccess app) { |
|
||||||
super(app); |
|
||||||
|
|
||||||
layer = new LayerBouncyBoxes(this); |
|
||||||
|
|
||||||
addLayer(layer); |
|
||||||
|
|
||||||
bindKeyStroke(new KeyStroke(Keyboard.KEY_RIGHT), new Runnable() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() |
|
||||||
{ |
|
||||||
layer.goRight(); |
|
||||||
} |
|
||||||
}); |
|
||||||
|
|
||||||
bindKeyStroke(new KeyStroke(Keyboard.KEY_LEFT), new Runnable() { |
|
||||||
|
|
||||||
@Override |
|
||||||
public void run() |
|
||||||
{ |
|
||||||
layer.goLeft(); |
|
||||||
} |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected void deinitScreen() |
|
||||||
{ |
|
||||||
// no impl
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected void onScreenEnter() |
|
||||||
{ |
|
||||||
// no impl
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected void onScreenLeave() |
|
||||||
{ |
|
||||||
// no impl
|
|
||||||
} |
|
||||||
|
|
||||||
|
|
||||||
@Override |
|
||||||
protected void updateScreen(double delta) |
|
||||||
{ |
|
||||||
// no impl
|
|
||||||
} |
|
||||||
|
|
||||||
} |
|
@ -1,4 +1,4 @@ |
|||||||
package mightypork.rogue.gui.screens.screenBouncy; |
package mightypork.rogue.gui.screens.test_bouncyboxes; |
||||||
|
|
||||||
|
|
||||||
import static mightypork.utils.math.constraints.ConstraintFactory.*; |
import static mightypork.utils.math.constraints.ConstraintFactory.*; |
@ -0,0 +1,80 @@ |
|||||||
|
package mightypork.rogue.gui.screens.test_bouncyboxes; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.rogue.AppAccess; |
||||||
|
import mightypork.rogue.bus.events.ScreenRequestEvent; |
||||||
|
import mightypork.rogue.gui.LayeredScreen; |
||||||
|
import mightypork.rogue.input.KeyStroke; |
||||||
|
|
||||||
|
import org.lwjgl.input.Keyboard; |
||||||
|
|
||||||
|
|
||||||
|
public class ScreenTestBouncy extends LayeredScreen { |
||||||
|
|
||||||
|
private LayerBouncyBoxes layer; |
||||||
|
|
||||||
|
|
||||||
|
public ScreenTestBouncy(AppAccess app) { |
||||||
|
super(app); |
||||||
|
|
||||||
|
layer = new LayerBouncyBoxes(this); |
||||||
|
|
||||||
|
addLayer(layer); |
||||||
|
|
||||||
|
bindKeyStroke(new KeyStroke(true, Keyboard.KEY_RIGHT), new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
layer.goRight(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
bindKeyStroke(new KeyStroke(true, Keyboard.KEY_LEFT), new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
layer.goLeft(); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
bindKeyStroke(new KeyStroke(Keyboard.KEY_C), new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
bus().queue(new ScreenRequestEvent("test.cat")); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void deinitScreen() |
||||||
|
{ |
||||||
|
// no impl
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onScreenEnter() |
||||||
|
{ |
||||||
|
// no impl
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onScreenLeave() |
||||||
|
{ |
||||||
|
// no impl
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String getId() |
||||||
|
{ |
||||||
|
return "test.bouncy"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,73 @@ |
|||||||
|
package mightypork.rogue.gui.screens.test_cat_sound; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.rogue.AppAccess; |
||||||
|
import mightypork.rogue.Res; |
||||||
|
import mightypork.rogue.bus.events.ActionRequest; |
||||||
|
import mightypork.rogue.bus.events.ActionRequest.RequestType; |
||||||
|
import mightypork.rogue.bus.events.ScreenRequestEvent; |
||||||
|
import mightypork.rogue.gui.LayeredScreen; |
||||||
|
import mightypork.rogue.input.KeyStroke; |
||||||
|
|
||||||
|
import org.lwjgl.input.Keyboard; |
||||||
|
|
||||||
|
|
||||||
|
public class ScreenTestCat extends LayeredScreen { |
||||||
|
|
||||||
|
LayerFlyingCat layer; |
||||||
|
|
||||||
|
|
||||||
|
public ScreenTestCat(AppAccess app) { |
||||||
|
super(app); |
||||||
|
|
||||||
|
addLayer(layer = new LayerFlyingCat(this)); |
||||||
|
|
||||||
|
bindKeyStroke(new KeyStroke(Keyboard.KEY_ESCAPE), new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
snd().fadeOutAllLoops(); |
||||||
|
bus().schedule(new ActionRequest(RequestType.SHUTDOWN), 3); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
bindKeyStroke(new KeyStroke(Keyboard.KEY_B), new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
bus().queue(new ScreenRequestEvent("test.bouncy")); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void deinitScreen() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onScreenEnter() |
||||||
|
{ |
||||||
|
snd().fadeOutAllLoops(); |
||||||
|
Res.getLoop("test.wilderness").fadeIn(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
protected void onScreenLeave() |
||||||
|
{ |
||||||
|
Res.getLoop("test.wilderness").fadeOut(); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public String getId() |
||||||
|
{ |
||||||
|
return "test.cat"; |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -1,4 +1,4 @@ |
|||||||
package mightypork.rogue.audio; |
package mightypork.rogue.sound; |
||||||
|
|
||||||
|
|
||||||
public class NullAudio extends DeferredAudio { |
public class NullAudio extends DeferredAudio { |
@ -1,6 +1,7 @@ |
|||||||
package mightypork.rogue.audio; |
package mightypork.rogue.sound.players; |
||||||
|
|
||||||
|
|
||||||
|
import mightypork.rogue.sound.DeferredAudio; |
||||||
import mightypork.utils.math.coord.Coord; |
import mightypork.utils.math.coord.Coord; |
||||||
import mightypork.utils.objects.Mutable; |
import mightypork.utils.objects.Mutable; |
||||||
|
|
@ -0,0 +1,102 @@ |
|||||||
|
package mightypork.rogue.texture; |
||||||
|
|
||||||
|
|
||||||
|
import java.util.concurrent.ExecutorService; |
||||||
|
import java.util.concurrent.Executors; |
||||||
|
import java.util.concurrent.LinkedBlockingQueue; |
||||||
|
|
||||||
|
import mightypork.rogue.AppAccess; |
||||||
|
import mightypork.rogue.Deferred; |
||||||
|
import mightypork.rogue.bus.events.MainLoopTaskRequest; |
||||||
|
import mightypork.rogue.bus.events.ResourceLoadRequest; |
||||||
|
import mightypork.utils.control.interf.Destroyable; |
||||||
|
import mightypork.utils.logging.Log; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Asynchronous resource loading thread. |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public class DeferredLoader extends Thread implements ResourceLoadRequest.Listener, Destroyable { |
||||||
|
|
||||||
|
public static void launch(AppAccess app) |
||||||
|
{ |
||||||
|
(new DeferredLoader(app)).start(); |
||||||
|
} |
||||||
|
|
||||||
|
private ExecutorService exs = Executors.newCachedThreadPool(); |
||||||
|
|
||||||
|
private LinkedBlockingQueue<Deferred> toLoad = new LinkedBlockingQueue<Deferred>(); |
||||||
|
private boolean stopped; |
||||||
|
private AppAccess app; |
||||||
|
|
||||||
|
|
||||||
|
public DeferredLoader(AppAccess app) { |
||||||
|
super("Deferred loader"); |
||||||
|
this.app = app; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void loadResource(Deferred resource) |
||||||
|
{ |
||||||
|
toLoad.add(resource); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
while (!stopped) { |
||||||
|
|
||||||
|
try { |
||||||
|
final Deferred def = toLoad.take(); |
||||||
|
if (def == null) continue; |
||||||
|
|
||||||
|
if (!def.isLoaded()) { |
||||||
|
|
||||||
|
// texture needs to be loaded in main thread, unfortunately.
|
||||||
|
// -> delegate to MainLoop
|
||||||
|
if (def instanceof DeferredTexture) { |
||||||
|
app.bus().queue(new MainLoopTaskRequest(new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
Log.f3("<DEFERRED> Loading \"" + Log.str(def) + "\""); |
||||||
|
def.load(); |
||||||
|
} |
||||||
|
})); |
||||||
|
|
||||||
|
continue; |
||||||
|
} |
||||||
|
|
||||||
|
Log.f3("<DEFERRED> Loading \"" + Log.str(def) + "\""); |
||||||
|
|
||||||
|
exs.submit(new Runnable() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void run() |
||||||
|
{ |
||||||
|
def.load(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
} catch (InterruptedException ignored) { |
||||||
|
//
|
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
@Override |
||||||
|
public void destroy() |
||||||
|
{ |
||||||
|
stopped = true; |
||||||
|
exs.shutdownNow(); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,11 @@ |
|||||||
|
package mightypork.utils.control.bus; |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* Event handled by only single client. |
||||||
|
* |
||||||
|
* @author MightyPork |
||||||
|
*/ |
||||||
|
public interface SingularEvent { |
||||||
|
|
||||||
|
} |
Loading…
Reference in new issue