diff --git a/src/mightypork/rogue/App.java b/src/mightypork/rogue/App.java
index aad4add..b81ab37 100644
--- a/src/mightypork/rogue/App.java
+++ b/src/mightypork/rogue/App.java
@@ -16,7 +16,7 @@ import mightypork.rogue.sounds.SoundSystem;
import mightypork.rogue.tasks.TaskTakeScreenshot;
import mightypork.rogue.util.Utils;
import mightypork.utils.control.Destroyable;
-import mightypork.utils.control.bus.MessageBus;
+import mightypork.utils.control.bus.EventBus;
import mightypork.utils.control.timing.TimerDelta;
import mightypork.utils.control.timing.UpdateEvent;
import mightypork.utils.control.timing.Updateable;
@@ -39,7 +39,7 @@ public class App implements Destroyable, AppAccess {
private InputSystem input;
private SoundSystem sounds;
private DisplaySystem display;
- private MessageBus events;
+ private EventBus events;
/** current screen */
private Screen screen;
@@ -172,7 +172,7 @@ public class App implements Destroyable, AppAccess {
*/
private void initBus()
{
- events = new MessageBus();
+ events = new EventBus();
events.subscribe(this);
events.createChannel(UpdateEvent.class, Updateable.class);
@@ -335,7 +335,7 @@ public class App implements Destroyable, AppAccess {
* @return event bus
*/
@Override
- public MessageBus bus()
+ public EventBus bus()
{
return events;
}
diff --git a/src/mightypork/rogue/AppAccess.java b/src/mightypork/rogue/AppAccess.java
index b56026f..d39294d 100644
--- a/src/mightypork/rogue/AppAccess.java
+++ b/src/mightypork/rogue/AppAccess.java
@@ -4,7 +4,7 @@ package mightypork.rogue;
import mightypork.rogue.display.DisplaySystem;
import mightypork.rogue.input.InputSystem;
import mightypork.rogue.sounds.SoundSystem;
-import mightypork.utils.control.bus.MessageBus;
+import mightypork.utils.control.bus.EventBus;
/**
@@ -35,7 +35,7 @@ public interface AppAccess {
/**
* @return event bus
*/
- abstract MessageBus bus();
+ abstract EventBus bus();
/**
diff --git a/src/mightypork/rogue/AppAdapter.java b/src/mightypork/rogue/AppAdapter.java
index 467dbe4..6b74612 100644
--- a/src/mightypork/rogue/AppAdapter.java
+++ b/src/mightypork/rogue/AppAdapter.java
@@ -4,7 +4,7 @@ package mightypork.rogue;
import mightypork.rogue.display.DisplaySystem;
import mightypork.rogue.input.InputSystem;
import mightypork.rogue.sounds.SoundSystem;
-import mightypork.utils.control.bus.MessageBus;
+import mightypork.utils.control.bus.EventBus;
/**
@@ -46,7 +46,7 @@ public class AppAdapter implements AppAccess {
@Override
- public final MessageBus bus()
+ public final EventBus bus()
{
return app.bus();
}
diff --git a/src/mightypork/rogue/bus/ChildClient.java b/src/mightypork/rogue/bus/ChildClient.java
index 98071b6..1cefe1e 100644
--- a/src/mightypork/rogue/bus/ChildClient.java
+++ b/src/mightypork/rogue/bus/ChildClient.java
@@ -7,13 +7,13 @@ import java.util.Set;
import mightypork.rogue.AppAccess;
import mightypork.rogue.AppAdapter;
-import mightypork.utils.control.bus.MessageBus;
+import mightypork.utils.control.bus.EventBus;
import mightypork.utils.control.bus.clients.DelegatingClient;
import mightypork.utils.control.bus.clients.ToggleableClient;
/**
- * Client that can be attached to the {@link MessageBus}, or added as a child
+ * Client that can be attached to the {@link EventBus}, or added as a child
* client to another {@link DelegatingClient}
*
* @author MightyPork
@@ -51,7 +51,7 @@ public class ChildClient extends AppAdapter implements DelegatingClient, Togglea
/**
- * Add a child subscriber to the {@link MessageBus}.
+ * Add a child subscriber to the {@link EventBus}.
*
* @param client
*/
diff --git a/src/mightypork/rogue/display/DisplaySystem.java b/src/mightypork/rogue/display/DisplaySystem.java
index c01fea4..a6bca2d 100644
--- a/src/mightypork/rogue/display/DisplaySystem.java
+++ b/src/mightypork/rogue/display/DisplaySystem.java
@@ -9,8 +9,8 @@ import java.nio.ByteBuffer;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ScreenChangeEvent;
-import mightypork.rogue.display.constraints.RenderContext;
import mightypork.utils.logging.Log;
+import mightypork.utils.math.constraints.ConstraintContext;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.coord.Rect;
@@ -20,7 +20,7 @@ import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
-public class DisplaySystem extends Subsystem implements RenderContext {
+public class DisplaySystem extends Subsystem implements ConstraintContext {
private DisplayMode windowDisplayMode;
private int targetFps;
@@ -109,7 +109,7 @@ public class DisplaySystem extends Subsystem implements RenderContext {
}
- public BufferedImage takeScreenshot()
+ public Screenshot takeScreenshot()
{
glReadBuffer(GL_FRONT);
int width = Display.getDisplayMode().getWidth();
@@ -119,20 +119,9 @@ public class DisplaySystem extends Subsystem implements RenderContext {
ByteBuffer buffer = BufferUtils.createByteBuffer(width * height * bpp);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
- BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
+ Screenshot sc = new Screenshot(width, height, bpp, buffer);
- // convert to a buffered image
- for (int x = 0; x < width; x++) {
- for (int y = 0; y < height; y++) {
- int i = (x + (width * y)) * bpp;
- int r = buffer.get(i) & 0xFF;
- int g = buffer.get(i + 1) & 0xFF;
- int b = buffer.get(i + 2) & 0xFF;
- image.setRGB(x, height - (y + 1), (0xFF << 24) | (r << 16) | (g << 8) | b);
- }
- }
-
- return image;
+ return sc;
}
@@ -197,4 +186,20 @@ public class DisplaySystem extends Subsystem implements RenderContext {
{
return new Rect(getSize());
}
+
+ public static class Screenshot {
+
+ public int width;
+ public int height;
+ public int bpp;
+ public ByteBuffer bytes;
+
+
+ public Screenshot(int width, int height, int bpp, ByteBuffer buffer) {
+ this.width = width;
+ this.height = height;
+ this.bpp = bpp;
+ this.bytes = buffer;
+ }
+ }
}
diff --git a/src/mightypork/rogue/display/Screen.java b/src/mightypork/rogue/display/Screen.java
index 09f1c86..e354339 100644
--- a/src/mightypork/rogue/display/Screen.java
+++ b/src/mightypork/rogue/display/Screen.java
@@ -5,11 +5,11 @@ import static org.lwjgl.opengl.GL11.*;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ScreenChangeEvent;
-import mightypork.rogue.display.constraints.RenderContext;
import mightypork.rogue.input.KeyBinder;
import mightypork.rogue.input.KeyBindingPool;
import mightypork.rogue.input.KeyStroke;
import mightypork.utils.control.timing.Updateable;
+import mightypork.utils.math.constraints.ConstraintContext;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.coord.Rect;
@@ -21,14 +21,12 @@ import mightypork.utils.math.coord.Rect;
*
* @author MightyPork
*/
-public abstract class Screen extends Subsystem implements Updateable, KeyBinder, RenderContext, ScreenChangeEvent.Listener {
+public abstract class Screen extends Subsystem implements Updateable, KeyBinder, ConstraintContext, ScreenChangeEvent.Listener {
private final KeyBindingPool keybindings = new KeyBindingPool();
private boolean active;
- private boolean inited = false;
-
public Screen(AppAccess app) {
super(app);
diff --git a/src/mightypork/rogue/display/ScreenLayer.java b/src/mightypork/rogue/display/ScreenLayer.java
index ae5433e..59b26d1 100644
--- a/src/mightypork/rogue/display/ScreenLayer.java
+++ b/src/mightypork/rogue/display/ScreenLayer.java
@@ -2,9 +2,9 @@ package mightypork.rogue.display;
import mightypork.rogue.bus.ChildClient;
-import mightypork.rogue.display.constraints.RenderContext;
import mightypork.rogue.display.constraints.Renderable;
import mightypork.utils.control.timing.Updateable;
+import mightypork.utils.math.constraints.ConstraintContext;
import mightypork.utils.math.coord.Rect;
@@ -13,7 +13,7 @@ import mightypork.utils.math.coord.Rect;
*
* @author MightyPork
*/
-public abstract class ScreenLayer extends ChildClient implements Renderable, Updateable, RenderContext {
+public abstract class ScreenLayer extends ChildClient implements Renderable, Updateable, ConstraintContext {
private Screen screen;
@@ -39,16 +39,6 @@ public abstract class ScreenLayer extends ChildClient implements Renderable, Upd
}
- /**
- * UNSUPPORTED
- */
- @Override
- public final void setContext(RenderContext context)
- {
- throw new UnsupportedOperationException("ScreenLayer uses screen as it's context.");
- }
-
-
@Override
public Rect getRect()
{
diff --git a/src/mightypork/rogue/display/constraints/ElementHolder.java b/src/mightypork/rogue/display/constraints/ElementHolder.java
index e96b4ef..c602c40 100644
--- a/src/mightypork/rogue/display/constraints/ElementHolder.java
+++ b/src/mightypork/rogue/display/constraints/ElementHolder.java
@@ -5,13 +5,15 @@ import java.util.LinkedList;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.ChildClient;
+import mightypork.utils.math.constraints.ConstraintContext;
+import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Rect;
-public class ElementHolder extends ChildClient implements RenderContext, Renderable {
+public class ElementHolder extends ChildClient implements ConstraintContext, RenderableWithContext {
- private LinkedList elements = new LinkedList();
- private RenderContext context;
+ private LinkedList elements = new LinkedList();
+ private ConstraintContext context;
public ElementHolder(AppAccess app) {
@@ -19,25 +21,41 @@ public class ElementHolder extends ChildClient implements RenderContext, Rendera
}
- public ElementHolder(AppAccess app, RenderContext context) {
+ public ElementHolder(AppAccess app, ConstraintContext context) {
super(app);
this.context = context;
}
@Override
- public void setContext(RenderContext context)
+ public void setContext(ConstraintContext context)
{
this.context = context;
}
+ @Override
+ public void render()
+ {
+ for (Renderable element : elements) {
+ element.render();
+ }
+ }
+
+
+ @Override
+ public Rect getRect()
+ {
+ return context.getRect();
+ }
+
+
/**
* Add element to the holder.
*
* @param elem
*/
- public void add(Renderable elem)
+ public void add(RenderableWithContext elem)
{
if (elem == null) return;
elem.setContext(this);
@@ -52,7 +70,7 @@ public class ElementHolder extends ChildClient implements RenderContext, Rendera
* @param elem
* @param constraint
*/
- public void add(Renderable elem, RectConstraint constraint)
+ public void add(RenderableWithContext elem, RectConstraint constraint)
{
if (elem == null) return;
@@ -69,27 +87,11 @@ public class ElementHolder extends ChildClient implements RenderContext, Rendera
*
* @param elem
*/
- public void remove(Renderable elem)
+ public void remove(RenderableWithContext elem)
{
if (elem == null) return;
elements.remove(elem);
removeChildClient(elem);
}
-
- @Override
- public void render()
- {
- for (Renderable element : elements) {
- element.render();
- }
- }
-
-
- @Override
- public Rect getRect()
- {
- return context.getRect();
- }
-
}
diff --git a/src/mightypork/rogue/display/constraints/RenderContext.java b/src/mightypork/rogue/display/constraints/RenderContext.java
deleted file mode 100644
index cb140d0..0000000
--- a/src/mightypork/rogue/display/constraints/RenderContext.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package mightypork.rogue.display.constraints;
-
-
-import mightypork.utils.math.coord.Rect;
-
-
-/**
- * Bounding box provider - context for {@link RectConstraint}
- *
- * @author MightyPork
- */
-public interface RenderContext {
-
- /**
- * @return bounding rectangle
- */
- public Rect getRect();
-}
diff --git a/src/mightypork/rogue/display/constraints/Renderable.java b/src/mightypork/rogue/display/constraints/Renderable.java
index ba23ec6..6b05dfc 100644
--- a/src/mightypork/rogue/display/constraints/Renderable.java
+++ b/src/mightypork/rogue/display/constraints/Renderable.java
@@ -1,12 +1,16 @@
package mightypork.rogue.display.constraints;
-public interface Renderable extends WithContext {
+/**
+ * Can be rendered
+ *
+ * @author MightyPork
+ */
+public interface Renderable {
+ /**
+ * Render on screen
+ */
public void render();
-
- @Override
- public void setContext(RenderContext context);
-
}
diff --git a/src/mightypork/rogue/display/constraints/RenderableWithContext.java b/src/mightypork/rogue/display/constraints/RenderableWithContext.java
new file mode 100644
index 0000000..51a4f4b
--- /dev/null
+++ b/src/mightypork/rogue/display/constraints/RenderableWithContext.java
@@ -0,0 +1,21 @@
+package mightypork.rogue.display.constraints;
+
+
+import mightypork.utils.math.constraints.ConstraintContext;
+import mightypork.utils.math.constraints.SettableContext;
+
+
+/**
+ * {@link Renderable} with {@link SettableContext}
+ *
+ * @author MightyPork
+ */
+public interface RenderableWithContext extends Renderable, SettableContext {
+
+ @Override
+ public void render();
+
+
+ @Override
+ public void setContext(ConstraintContext context);
+}
diff --git a/src/mightypork/rogue/display/constraints/WithContext.java b/src/mightypork/rogue/display/constraints/WithContext.java
deleted file mode 100644
index dda2ac5..0000000
--- a/src/mightypork/rogue/display/constraints/WithContext.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package mightypork.rogue.display.constraints;
-
-
-public interface WithContext {
-
- /**
- * Assign a context
- *
- * @param context
- */
- public void setContext(RenderContext context);
-}
diff --git a/src/mightypork/rogue/display/screens/screenBouncy/BouncyBox.java b/src/mightypork/rogue/display/screens/screenBouncy/BouncyBox.java
index 380d623..1dc83de 100644
--- a/src/mightypork/rogue/display/screens/screenBouncy/BouncyBox.java
+++ b/src/mightypork/rogue/display/screens/screenBouncy/BouncyBox.java
@@ -1,27 +1,27 @@
package mightypork.rogue.display.screens.screenBouncy;
-import static mightypork.rogue.display.constraints.ConstraintFactory.*;
+import static mightypork.utils.math.constraints.ConstraintFactory.*;
import java.util.Random;
-import mightypork.rogue.display.constraints.NumConstraint;
-import mightypork.rogue.display.constraints.RectConstraint;
-import mightypork.rogue.display.constraints.RenderContext;
-import mightypork.rogue.display.constraints.Renderable;
+import mightypork.rogue.display.constraints.RenderableWithContext;
import mightypork.rogue.textures.Render;
import mightypork.utils.control.timing.Updateable;
import mightypork.utils.control.timing.animation.AnimDouble;
import mightypork.utils.math.color.RGB;
+import mightypork.utils.math.constraints.ConstraintContext;
+import mightypork.utils.math.constraints.NumConstraint;
+import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Rect;
import mightypork.utils.math.easing.Easing;
-public class BouncyBox implements Renderable, Updateable, RenderContext {
+public class BouncyBox implements RenderableWithContext, Updateable, ConstraintContext {
private Random rand = new Random();
- private RenderContext context;
+ private ConstraintContext context;
private RectConstraint box;
@@ -30,17 +30,11 @@ public class BouncyBox implements Renderable, Updateable, RenderContext {
public BouncyBox() {
NumConstraint side = c_height(this);
-
NumConstraint move_length = c_sub(c_width(this), side);
-
NumConstraint offset = c_mul(move_length, c_n(pos));
-
RectConstraint abox = c_sizedBox(this, offset, c_n(0), side, side);
-
NumConstraint margin = c_percent(side, c_n(10));
-
RectConstraint with_margin = c_shrink(abox, margin);
-
box = with_margin;
}
@@ -60,7 +54,7 @@ public class BouncyBox implements Renderable, Updateable, RenderContext {
@Override
- public void setContext(RenderContext context)
+ public void setContext(ConstraintContext context)
{
this.context = context;
}
diff --git a/src/mightypork/rogue/display/screens/screenBouncy/LayerBouncyBoxes.java b/src/mightypork/rogue/display/screens/screenBouncy/LayerBouncyBoxes.java
index e4dca95..79b2c7f 100644
--- a/src/mightypork/rogue/display/screens/screenBouncy/LayerBouncyBoxes.java
+++ b/src/mightypork/rogue/display/screens/screenBouncy/LayerBouncyBoxes.java
@@ -1,7 +1,7 @@
package mightypork.rogue.display.screens.screenBouncy;
-import static mightypork.rogue.display.constraints.ConstraintFactory.*;
+import static mightypork.utils.math.constraints.ConstraintFactory.*;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/mightypork/rogue/tasks/TaskTakeScreenshot.java b/src/mightypork/rogue/tasks/TaskTakeScreenshot.java
index 1ae2f3d..c0b1fe9 100644
--- a/src/mightypork/rogue/tasks/TaskTakeScreenshot.java
+++ b/src/mightypork/rogue/tasks/TaskTakeScreenshot.java
@@ -12,22 +12,37 @@ import javax.imageio.ImageIO;
import mightypork.rogue.Paths;
import mightypork.rogue.display.DisplaySystem;
+import mightypork.rogue.display.DisplaySystem.Screenshot;
import mightypork.utils.logging.Log;
public class TaskTakeScreenshot implements Runnable {
- private BufferedImage image;
+ private Screenshot scr;
public TaskTakeScreenshot(DisplaySystem disp) {
- this.image = disp.takeScreenshot();
+ scr = disp.takeScreenshot();
}
@Override
public void run()
{
+
+ BufferedImage image = new BufferedImage(scr.width, scr.height, BufferedImage.TYPE_INT_RGB);
+
+ // convert to a buffered image
+ for (int x = 0; x < scr.width; x++) {
+ for (int y = 0; y < scr.height; y++) {
+ int i = (x + (scr.width * y)) * scr.bpp;
+ int r = scr.bytes.get(i) & 0xFF;
+ int g = scr.bytes.get(i + 1) & 0xFF;
+ int b = scr.bytes.get(i + 2) & 0xFF;
+ image.setRGB(x, scr.height - (y + 1), (0xFF << 24) | (r << 16) | (g << 8) | b);
+ }
+ }
+
String fname = getUniqueScreenshotName();
// generate unique filename
diff --git a/src/mightypork/utils/control/bus/MessageBus.java b/src/mightypork/utils/control/bus/EventBus.java
similarity index 72%
rename from src/mightypork/utils/control/bus/MessageBus.java
rename to src/mightypork/utils/control/bus/EventBus.java
index 596185f..3cfa0bc 100644
--- a/src/mightypork/utils/control/bus/MessageBus.java
+++ b/src/mightypork/utils/control/bus/EventBus.java
@@ -8,13 +8,13 @@ import mightypork.utils.logging.Log;
/**
- * An event bus, accommodating multiple {@link MessageChannel}s.
+ * An event bus, accommodating multiple {@link EventChannel}s.
*
* @author MightyPork
*/
-final public class MessageBus {
+final public class EventBus {
- private Collection> channels = new LinkedHashSet>();
+ private Collection> channels = new LinkedHashSet>();
private Collection