Attempt to separate framework from game impl.

This commit is contained in:
Ondřej Hruška
2014-04-08 14:48:24 +02:00
parent 8e8e15355e
commit 251475557f
101 changed files with 698 additions and 523 deletions
@@ -1,10 +1,9 @@
package mightypork.rogue;
package mightypork.gamecore;
import mightypork.rogue.input.InputSystem;
import mightypork.rogue.render.DisplaySystem;
import mightypork.rogue.sounds.SoundSystem;
import mightypork.utils.control.bus.EventBus;
import mightypork.gamecore.input.InputSystem;
import mightypork.gamecore.render.DisplaySystem;
import mightypork.gamecore.resources.sounds.SoundSystem;
/**
@@ -12,7 +11,7 @@ import mightypork.utils.control.bus.EventBus;
*
* @author MightyPork
*/
public interface AppAccess {
public interface AppAccess extends BusAccess {
/**
* @return sound system
@@ -32,12 +31,6 @@ public interface AppAccess {
abstract DisplaySystem disp();
/**
* @return event bus
*/
abstract EventBus bus();
/**
* Quit to OS<br>
* Destroy app & exit VM
@@ -1,10 +1,10 @@
package mightypork.rogue;
package mightypork.gamecore;
import mightypork.rogue.input.InputSystem;
import mightypork.rogue.render.DisplaySystem;
import mightypork.rogue.sounds.SoundSystem;
import mightypork.utils.control.bus.EventBus;
import mightypork.gamecore.control.bus.EventBus;
import mightypork.gamecore.input.InputSystem;
import mightypork.gamecore.render.DisplaySystem;
import mightypork.gamecore.resources.sounds.SoundSystem;
/**
+14
View File
@@ -0,0 +1,14 @@
package mightypork.gamecore;
import mightypork.gamecore.control.bus.EventBus;
public interface BusAccess {
/**
* @return event bus
*/
public abstract EventBus bus();
}
+66
View File
@@ -0,0 +1,66 @@
package mightypork.gamecore;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.control.bus.events.MainLoopTaskRequest;
import mightypork.gamecore.control.bus.events.UpdateEvent;
import mightypork.gamecore.control.timing.TimerDelta;
public abstract class GameLoop extends Subsystem implements MainLoopTaskRequest.Listener {
private final Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<Runnable>();
/** timer */
private TimerDelta timer;
private boolean running = true;
public GameLoop(AppAccess app) {
super(app);
}
public void start()
{
timer = new TimerDelta();
while (running) {
disp().beginFrame();
bus().send(new UpdateEvent(timer.getDelta()));
Runnable r;
while ((r = taskQueue.poll()) != null) {
r.run();
}
tick();
disp().endFrame();
}
}
/**
* Called each frame, in rendering context.
*/
protected abstract void tick();
@Override
protected final void deinit()
{
running = false;
}
@Override
public final synchronized void queueTask(Runnable request)
{
taskQueue.add(request);
}
}
@@ -1,4 +1,4 @@
package mightypork.rogue.util;
package mightypork.gamecore;
import mightypork.utils.logging.LogInstance;
@@ -1,15 +1,15 @@
package mightypork.rogue.bus;
package mightypork.gamecore.control;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import mightypork.rogue.AppAccess;
import mightypork.rogue.AppAdapter;
import mightypork.utils.control.bus.EventBus;
import mightypork.utils.control.bus.clients.DelegatingClient;
import mightypork.utils.control.bus.clients.ToggleableClient;
import mightypork.gamecore.BusAccess;
import mightypork.gamecore.control.bus.EventBus;
import mightypork.gamecore.control.bus.clients.DelegatingClient;
import mightypork.gamecore.control.bus.clients.ToggleableClient;
import mightypork.gamecore.control.interf.Destroyable;
/**
@@ -18,17 +18,38 @@ import mightypork.utils.control.bus.clients.ToggleableClient;
*
* @author MightyPork
*/
public class ChildClient extends AppAdapter implements DelegatingClient, ToggleableClient {
public abstract class ChildClient implements BusAccess, DelegatingClient, ToggleableClient, Destroyable {
public ChildClient(AppAccess app) {
super(app);
}
private BusAccess busAccess;
private final Set<Object> clients = new LinkedHashSet<Object>();
private boolean listening = true;
private boolean delegating = true;
public ChildClient(BusAccess busAccess) {
this.busAccess = busAccess;
bus().subscribe(this);
}
@Override
public final void destroy()
{
deinit();
bus().unsubscribe(this);
}
/**
* Deinitialize the subsystem<br>
* (called during destruction)
*/
protected abstract void deinit();
@Override
public final Collection<Object> getChildClients()
{
@@ -97,4 +118,11 @@ public class ChildClient extends AppAdapter implements DelegatingClient, Togglea
this.delegating = delegating;
}
@Override
public EventBus bus()
{
return busAccess.bus();
}
}
@@ -0,0 +1,55 @@
package mightypork.gamecore.control;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.input.InputSystem;
import mightypork.gamecore.render.DisplaySystem;
import mightypork.gamecore.resources.sounds.SoundSystem;
/**
* App event bus client, to be used for subsystems, screens and anything that
* needs access to the eventbus
*
* @author MightyPork
*/
public abstract class Subsystem extends ChildClient implements AppAccess {
private final AppAccess app;
public Subsystem(AppAccess app) {
super(app);
this.app = app;
}
@Override
public final SoundSystem snd()
{
return app.snd();
}
@Override
public final InputSystem input()
{
return app.input();
}
@Override
public final DisplaySystem disp()
{
return app.disp();
}
@Override
public void shutdown()
{
app.shutdown();
}
}
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus;
package mightypork.gamecore.control.bus;
import java.util.Collection;
@@ -1,16 +1,16 @@
package mightypork.utils.control.bus;
package mightypork.gamecore.control.bus;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.DelayedEvent;
import mightypork.utils.control.bus.events.types.ImmediateEvent;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.utils.control.bus.events.types.UnloggedEvent;
import mightypork.utils.control.interf.Destroyable;
import mightypork.gamecore.control.bus.events.Event;
import mightypork.gamecore.control.bus.events.types.DelayedEvent;
import mightypork.gamecore.control.bus.events.types.ImmediateEvent;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.events.types.UnloggedEvent;
import mightypork.gamecore.control.interf.Destroyable;
import mightypork.utils.logging.Log;
@@ -1,13 +1,13 @@
package mightypork.utils.control.bus;
package mightypork.gamecore.control.bus;
import java.util.Collection;
import java.util.HashSet;
import mightypork.utils.control.bus.clients.DelegatingClient;
import mightypork.utils.control.bus.clients.ToggleableClient;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.clients.DelegatingClient;
import mightypork.gamecore.control.bus.clients.ToggleableClient;
import mightypork.gamecore.control.bus.events.Event;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
import mightypork.utils.logging.Log;
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus.clients;
package mightypork.gamecore.control.bus.clients;
import java.util.Collection;
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus.clients;
package mightypork.gamecore.control.bus.clients;
/**
@@ -1,9 +1,8 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.ImmediateEvent;
import mightypork.utils.control.interf.Destroyable;
import mightypork.gamecore.control.bus.events.types.ImmediateEvent;
import mightypork.gamecore.control.interf.Destroyable;
/**
@@ -1,9 +1,9 @@
package mightypork.utils.control.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.types.DelayedEvent;
import mightypork.utils.control.bus.events.types.ImmediateEvent;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.events.types.DelayedEvent;
import mightypork.gamecore.control.bus.events.types.ImmediateEvent;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
/**
@@ -1,8 +1,6 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import org.lwjgl.input.Keyboard;
@@ -1,8 +1,7 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
/**
@@ -1,7 +1,7 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Coord;
@@ -101,6 +101,18 @@ public class MouseButtonEvent implements Event<MouseButtonEvent.Listener> {
}
/**
* Get if event happened over a rect
*
* @param rect rect region
* @return was over
*/
public boolean isOver(RectConstraint rect)
{
return pos.isInRect(rect.getRect());
}
@Override
public void handleBy(Listener handler)
{
@@ -1,8 +1,7 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.UnloggedEvent;
import mightypork.gamecore.control.bus.events.types.UnloggedEvent;
import mightypork.utils.math.coord.Coord;
@@ -1,9 +1,8 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.rogue.loading.DeferredResource;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.loading.DeferredResource;
/**
@@ -1,7 +1,6 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.math.coord.Coord;
@@ -1,8 +1,7 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
/**
@@ -1,10 +1,9 @@
package mightypork.rogue.bus.events;
package mightypork.gamecore.control.bus.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.ImmediateEvent;
import mightypork.utils.control.bus.events.types.UnloggedEvent;
import mightypork.utils.control.interf.Updateable;
import mightypork.gamecore.control.bus.events.types.ImmediateEvent;
import mightypork.gamecore.control.bus.events.types.UnloggedEvent;
import mightypork.gamecore.control.interf.Updateable;
/**
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus.events.types;
package mightypork.gamecore.control.bus.events.types;
import java.lang.annotation.*;
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus.events.types;
package mightypork.gamecore.control.bus.events.types;
import java.lang.annotation.*;
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus.events.types;
package mightypork.gamecore.control.bus.events.types;
import java.lang.annotation.*;
@@ -1,4 +1,4 @@
package mightypork.utils.control.bus.events.types;
package mightypork.gamecore.control.bus.events.types;
import java.lang.annotation.*;
@@ -1,4 +1,4 @@
package mightypork.utils.control.interf;
package mightypork.gamecore.control.interf;
/**
@@ -1,4 +1,4 @@
package mightypork.utils.control.interf;
package mightypork.gamecore.control.interf;
/**
@@ -1,4 +1,4 @@
package mightypork.utils.control.timing;
package mightypork.gamecore.control.timing;
/**
@@ -1,4 +1,4 @@
package mightypork.utils.control.timing;
package mightypork.gamecore.control.timing;
public interface Pauseable {
@@ -1,4 +1,4 @@
package mightypork.utils.control.timing;
package mightypork.gamecore.control.timing;
/**
@@ -1,4 +1,4 @@
package mightypork.utils.control.timing;
package mightypork.gamecore.control.timing;
/**
@@ -1,9 +1,9 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import static mightypork.utils.math.constraints.ConstraintFactory.*;
import mightypork.rogue.AppAccess;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.gamecore.AppAccess;
import mightypork.utils.math.constraints.RectConstraint;
public class ColumnHolder extends ElementHolder {
@@ -12,7 +12,7 @@ public class ColumnHolder extends ElementHolder {
private int col = 0;
public ColumnHolder(AppAccess app, RectEvaluable context, int rows) {
public ColumnHolder(AppAccess app, RectConstraint context, int rows) {
super(app, context);
this.cols = rows;
}
@@ -1,13 +1,13 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import java.util.LinkedList;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.ChildClient;
import mightypork.rogue.render.Renderable;
import mightypork.utils.control.bus.EventBus;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.ChildClient;
import mightypork.gamecore.control.bus.EventBus;
import mightypork.gamecore.render.Renderable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Rect;
@@ -20,7 +20,7 @@ import mightypork.utils.math.coord.Rect;
public abstract class ElementHolder extends ChildClient implements PluggableRenderable {
private final LinkedList<PluggableRenderable> elements = new LinkedList<PluggableRenderable>();
private RectEvaluable context;
private RectConstraint context;
public ElementHolder(AppAccess app) {
@@ -28,14 +28,14 @@ public abstract class ElementHolder extends ChildClient implements PluggableRend
}
public ElementHolder(AppAccess app, RectEvaluable context) {
public ElementHolder(AppAccess app, RectConstraint context) {
super(app);
setContext(context);
}
@Override
public final void setContext(RectEvaluable context)
public final void setContext(RectConstraint context)
{
this.context = context;
}
@@ -79,4 +79,11 @@ public abstract class ElementHolder extends ChildClient implements PluggableRend
addChildClient(elem);
}
@Override
protected void deinit()
{
// no impl
}
}
@@ -1,8 +1,8 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import mightypork.rogue.render.Render;
import mightypork.rogue.textures.TxQuad;
import mightypork.gamecore.render.Render;
import mightypork.gamecore.resources.textures.TxQuad;
public class ImageRenderer extends PluggableRenderer {
@@ -1,9 +1,9 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import mightypork.rogue.render.Renderable;
import mightypork.gamecore.render.Renderable;
import mightypork.utils.math.constraints.PluggableContext;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Rect;
@@ -18,6 +18,6 @@ public interface PluggableRenderable extends Renderable, PluggableContext {
@Override
void setContext(RectEvaluable rect);
void setContext(RectConstraint rect);
}
@@ -1,9 +1,9 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import mightypork.rogue.render.Renderable;
import mightypork.gamecore.render.Renderable;
import mightypork.utils.math.constraints.ContextAdapter;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Rect;
@@ -26,7 +26,7 @@ public abstract class PluggableRenderer extends ContextAdapter implements Plugga
@Override
public void setContext(RectEvaluable rect)
public void setContext(RectConstraint rect)
{
super.setContext(rect);
}
@@ -1,9 +1,9 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import static mightypork.utils.math.constraints.ConstraintFactory.*;
import mightypork.rogue.AppAccess;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.gamecore.AppAccess;
import mightypork.utils.math.constraints.RectConstraint;
public class RowHolder extends ElementHolder {
@@ -12,7 +12,7 @@ public class RowHolder extends ElementHolder {
private int row = 0;
public RowHolder(AppAccess app, RectEvaluable context, int rows) {
public RowHolder(AppAccess app, RectConstraint context, int rows) {
super(app, context);
this.rows = rows;
}
@@ -1,8 +1,8 @@
package mightypork.rogue.gui.renderers;
package mightypork.gamecore.gui.renderers;
import mightypork.rogue.fonts.FontRenderer;
import mightypork.rogue.fonts.GLFont;
import mightypork.gamecore.resources.fonts.FontRenderer;
import mightypork.gamecore.resources.fonts.GLFont;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.coord.Coord;
@@ -1,10 +1,10 @@
package mightypork.rogue.gui.screens;
package mightypork.gamecore.gui.screens;
import java.util.Collection;
import java.util.LinkedList;
import mightypork.rogue.AppAccess;
import mightypork.gamecore.AppAccess;
public abstract class LayeredScreen extends Screen {
@@ -1,16 +1,16 @@
package mightypork.rogue.gui.screens;
package mightypork.gamecore.gui.screens;
import static org.lwjgl.opengl.GL11.*;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.ChildClient;
import mightypork.rogue.bus.events.ScreenChangeEvent;
import mightypork.rogue.input.KeyBinder;
import mightypork.rogue.input.KeyBindingPool;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.render.Renderable;
import mightypork.utils.control.interf.Destroyable;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.control.bus.events.ScreenChangeEvent;
import mightypork.gamecore.control.interf.Destroyable;
import mightypork.gamecore.input.KeyBinder;
import mightypork.gamecore.input.KeyBindingPool;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.render.Renderable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.coord.Rect;
@@ -20,7 +20,7 @@ import mightypork.utils.math.coord.Rect;
*
* @author MightyPork
*/
public abstract class Screen extends ChildClient implements Renderable, Destroyable, KeyBinder, RectEvaluable, ScreenChangeEvent.Listener {
public abstract class Screen extends Subsystem implements Renderable, Destroyable, KeyBinder, RectConstraint, ScreenChangeEvent.Listener {
private final KeyBindingPool keybindings = new KeyBindingPool();
@@ -53,7 +53,7 @@ public abstract class Screen extends ChildClient implements Renderable, Destroya
@Override
public final void destroy()
public final void deinit()
{
deinitScreen();
}
@@ -1,12 +1,12 @@
package mightypork.rogue.gui.screens;
package mightypork.gamecore.gui.screens;
import mightypork.rogue.bus.ChildClient;
import mightypork.rogue.input.KeyBinder;
import mightypork.rogue.input.KeyBindingPool;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.render.Renderable;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.input.KeyBinder;
import mightypork.gamecore.input.KeyBindingPool;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.render.Renderable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Rect;
@@ -15,7 +15,7 @@ import mightypork.utils.math.coord.Rect;
*
* @author MightyPork
*/
public abstract class ScreenLayer extends ChildClient implements Renderable, RectEvaluable, KeyBinder {
public abstract class ScreenLayer extends Subsystem implements Renderable, RectConstraint, KeyBinder {
private final Screen screen;
@@ -56,4 +56,11 @@ public abstract class ScreenLayer extends ChildClient implements Renderable, Rec
return screen.getRect();
}
@Override
protected void deinit()
{
// noimpl
}
}
@@ -1,12 +1,12 @@
package mightypork.rogue.gui.screens;
package mightypork.gamecore.gui.screens;
import java.util.HashMap;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ScreenRequestEvent;
import mightypork.rogue.render.Renderable;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.control.bus.events.ScreenRequestEvent;
import mightypork.gamecore.render.Renderable;
import mightypork.utils.logging.Log;
+37
View File
@@ -0,0 +1,37 @@
package mightypork.gamecore.input;
/**
* Triggered action
*
* @author MightyPork
*/
public abstract class Action implements Runnable {
private boolean enabled = true;
/**
* Enable the action
*
* @param enable true to enable
*/
public final void enable(boolean enable)
{
this.enabled = enable;
}
@Override
public final void run()
{
if (enabled) execute();
}
/**
* Do the work.
*/
public abstract void execute();
}
@@ -0,0 +1,7 @@
package mightypork.gamecore.input;
public interface ActionTrigger {
void setAction(Action action);
}
@@ -1,15 +1,15 @@
package mightypork.rogue.input;
package mightypork.gamecore.input;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ActionRequest;
import mightypork.rogue.bus.events.ActionRequest.RequestType;
import mightypork.rogue.bus.events.KeyboardEvent;
import mightypork.rogue.bus.events.MouseButtonEvent;
import mightypork.rogue.bus.events.MouseMotionEvent;
import mightypork.utils.control.interf.Updateable;
import mightypork.utils.math.constraints.NumEvaluable;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.control.bus.events.KeyboardEvent;
import mightypork.gamecore.control.bus.events.MouseButtonEvent;
import mightypork.gamecore.control.bus.events.MouseMotionEvent;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.rogue.events.ActionRequest;
import mightypork.rogue.events.ActionRequest.RequestType;
import mightypork.utils.math.constraints.NumberConstraint;
import mightypork.utils.math.coord.Coord;
import org.lwjgl.LWJGLException;
@@ -175,7 +175,7 @@ public class InputSystem extends Subsystem implements Updateable, KeyBinder {
Mouse.setGrabbed(grab);
}
private final NumEvaluable cmousex = new NumEvaluable() {
private final NumberConstraint cmousex = new NumberConstraint() {
@Override
public double getValue()
@@ -184,7 +184,7 @@ public class InputSystem extends Subsystem implements Updateable, KeyBinder {
}
};
private final NumEvaluable cmousey = new NumEvaluable() {
private final NumberConstraint cmousey = new NumberConstraint() {
@Override
public double getValue()
@@ -194,13 +194,13 @@ public class InputSystem extends Subsystem implements Updateable, KeyBinder {
};
public NumEvaluable c_mouse_x()
public NumberConstraint c_mouse_x()
{
return cmousex;
}
public NumEvaluable c_mouse_y()
public NumberConstraint c_mouse_y()
{
return cmousey;
}
@@ -1,4 +1,4 @@
package mightypork.rogue.input;
package mightypork.gamecore.input;
public interface KeyBinder {
@@ -1,7 +1,7 @@
package mightypork.rogue.input;
package mightypork.gamecore.input;
import mightypork.rogue.bus.events.KeyboardEvent;
import mightypork.gamecore.control.bus.events.KeyboardEvent;
/**
@@ -1,11 +1,11 @@
package mightypork.rogue.input;
package mightypork.gamecore.input;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import mightypork.rogue.bus.events.KeyboardEvent;
import mightypork.gamecore.control.bus.events.KeyboardEvent;
import mightypork.utils.logging.Log;
@@ -1,4 +1,4 @@
package mightypork.rogue.input;
package mightypork.gamecore.input;
import java.util.Iterator;
@@ -1,4 +1,4 @@
package mightypork.rogue.input;
package mightypork.gamecore.input;
import org.lwjgl.input.Keyboard;
@@ -1,14 +1,14 @@
package mightypork.rogue.loading;
package mightypork.gamecore.loading;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.events.MainLoopTaskRequest;
import mightypork.rogue.bus.events.ResourceLoadRequest;
import mightypork.utils.control.interf.Destroyable;
import mightypork.gamecore.BusAccess;
import mightypork.gamecore.control.bus.events.MainLoopTaskRequest;
import mightypork.gamecore.control.bus.events.ResourceLoadRequest;
import mightypork.gamecore.control.interf.Destroyable;
import mightypork.utils.logging.Log;
@@ -19,7 +19,7 @@ import mightypork.utils.logging.Log;
*/
public class AsyncResourceLoader extends Thread implements ResourceLoadRequest.Listener, Destroyable {
public static void launch(AppAccess app)
public static void launch(BusAccess app)
{
(new AsyncResourceLoader(app)).start();
}
@@ -28,10 +28,10 @@ public class AsyncResourceLoader extends Thread implements ResourceLoadRequest.L
private final LinkedBlockingQueue<DeferredResource> toLoad = new LinkedBlockingQueue<DeferredResource>();
private boolean stopped;
private final AppAccess app;
private final BusAccess app;
public AsyncResourceLoader(AppAccess app) {
public AsyncResourceLoader(BusAccess app) {
super("Deferred loader");
this.app = app;
app.bus().subscribe(this);
@@ -1,7 +1,7 @@
package mightypork.rogue.loading;
package mightypork.gamecore.loading;
import mightypork.utils.control.interf.Destroyable;
import mightypork.gamecore.control.interf.Destroyable;
import mightypork.utils.logging.Log;
import mightypork.utils.logging.LoggedName;
@@ -1,4 +1,4 @@
package mightypork.rogue.loading;
package mightypork.gamecore.loading;
/**
@@ -1,4 +1,4 @@
package mightypork.rogue.loading;
package mightypork.gamecore.loading;
import java.lang.annotation.*;
@@ -1,4 +1,4 @@
package mightypork.rogue.loading;
package mightypork.gamecore.loading;
/**
@@ -1,15 +1,20 @@
package mightypork.rogue.render;
package mightypork.gamecore.render;
import static org.lwjgl.opengl.GL11.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ScreenChangeEvent;
import javax.imageio.ImageIO;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.control.bus.events.ScreenChangeEvent;
import mightypork.utils.logging.Log;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.coord.Rect;
@@ -19,7 +24,7 @@ import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
public class DisplaySystem extends Subsystem implements RectEvaluable {
public class DisplaySystem extends Subsystem implements RectConstraint {
private DisplayMode windowDisplayMode;
private int targetFps;
@@ -192,10 +197,11 @@ public class DisplaySystem extends Subsystem implements RectEvaluable {
public static class Screenshot {
public int width;
public int height;
public int bpp;
public ByteBuffer bytes;
private int width;
private int height;
private int bpp;
private ByteBuffer bytes;
private BufferedImage image;
public Screenshot(int width, int height, int bpp, ByteBuffer buffer) {
@@ -204,5 +210,32 @@ public class DisplaySystem extends Subsystem implements RectEvaluable {
this.bpp = bpp;
this.bytes = buffer;
}
public BufferedImage getImage()
{
if (image != null) return image;
image = new BufferedImage(this.width, this.height, BufferedImage.TYPE_INT_RGB);
// convert to a buffered image
for (int x = 0; x < this.width; x++) {
for (int y = 0; y < this.height; y++) {
final int i = (x + (this.width * y)) * this.bpp;
final int r = this.bytes.get(i) & 0xFF;
final int g = this.bytes.get(i + 1) & 0xFF;
final int b = this.bytes.get(i + 2) & 0xFF;
image.setRGB(x, this.height - (y + 1), (0xFF << 24) | (r << 16) | (g << 8) | b);
}
}
return image;
}
public void save(File file) throws IOException
{
ImageIO.write(getImage(), "PNG", file);
}
}
}
@@ -1,11 +1,11 @@
package mightypork.rogue.render;
package mightypork.gamecore.render;
import static org.lwjgl.opengl.GL11.*;
import java.io.IOException;
import mightypork.rogue.textures.TxQuad;
import mightypork.gamecore.resources.textures.TxQuad;
import mightypork.utils.files.FileUtils;
import mightypork.utils.logging.Log;
import mightypork.utils.math.color.RGB;
@@ -1,4 +1,4 @@
package mightypork.rogue.render;
package mightypork.gamecore.render;
/**
@@ -1,4 +1,4 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import java.awt.Font;
@@ -6,8 +6,8 @@ import java.awt.FontFormatException;
import java.io.IOException;
import java.io.InputStream;
import mightypork.rogue.loading.BaseDeferredResource;
import mightypork.rogue.loading.MustLoadInMainThread;
import mightypork.gamecore.loading.BaseDeferredResource;
import mightypork.gamecore.loading.MustLoadInMainThread;
import mightypork.utils.files.FileUtils;
import mightypork.utils.logging.LoggedName;
import mightypork.utils.math.color.RGB;
@@ -1,4 +1,4 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import java.awt.Font;
@@ -1,11 +1,11 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import java.util.HashMap;
import mightypork.rogue.AppAccess;
import mightypork.rogue.AppAdapter;
import mightypork.rogue.bus.events.ResourceLoadRequest;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.AppAdapter;
import mightypork.gamecore.control.bus.events.ResourceLoadRequest;
import mightypork.utils.logging.Log;
import org.newdawn.slick.opengl.Texture;
@@ -1,7 +1,7 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import mightypork.rogue.render.Render;
import mightypork.gamecore.render.Render;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.coord.Rect;
@@ -1,4 +1,4 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import mightypork.utils.math.color.RGB;
@@ -1,4 +1,4 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
/**
@@ -1,4 +1,4 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import mightypork.utils.math.color.RGB;
@@ -1,11 +1,11 @@
package mightypork.rogue.fonts;
package mightypork.gamecore.resources.fonts;
import static org.lwjgl.opengl.GL11.*;
import java.awt.Font;
import mightypork.rogue.render.Render;
import mightypork.gamecore.render.Render;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.coord.Coord;
@@ -1,9 +1,9 @@
package mightypork.rogue.sounds;
package mightypork.gamecore.resources.sounds;
import java.io.IOException;
import mightypork.rogue.loading.BaseDeferredResource;
import mightypork.gamecore.loading.BaseDeferredResource;
import mightypork.utils.files.FileUtils;
import mightypork.utils.logging.LoggedName;
import mightypork.utils.math.coord.Coord;
@@ -1,4 +1,4 @@
package mightypork.rogue.sounds;
package mightypork.gamecore.resources.sounds;
import mightypork.utils.math.Calc;
@@ -1,7 +1,7 @@
package mightypork.rogue.sounds;
package mightypork.gamecore.resources.sounds;
import mightypork.rogue.loading.NullResource;
import mightypork.gamecore.loading.NullResource;
import mightypork.utils.logging.LoggedName;
@@ -1,13 +1,13 @@
package mightypork.rogue.sounds;
package mightypork.gamecore.resources.sounds;
import java.util.HashMap;
import java.util.Map;
import mightypork.rogue.AppAccess;
import mightypork.rogue.AppAdapter;
import mightypork.rogue.sounds.players.EffectPlayer;
import mightypork.rogue.sounds.players.LoopPlayer;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.AppAdapter;
import mightypork.gamecore.resources.sounds.players.EffectPlayer;
import mightypork.gamecore.resources.sounds.players.LoopPlayer;
import mightypork.utils.logging.Log;
@@ -1,16 +1,16 @@
package mightypork.rogue.sounds;
package mightypork.gamecore.resources.sounds;
import java.nio.FloatBuffer;
import java.util.HashSet;
import java.util.Set;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ResourceLoadRequest;
import mightypork.rogue.sounds.players.EffectPlayer;
import mightypork.rogue.sounds.players.LoopPlayer;
import mightypork.utils.control.interf.Updateable;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.Subsystem;
import mightypork.gamecore.control.bus.events.ResourceLoadRequest;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.gamecore.resources.sounds.players.EffectPlayer;
import mightypork.gamecore.resources.sounds.players.LoopPlayer;
import mightypork.utils.math.Calc.Buffers;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.objects.Mutable;
@@ -1,8 +1,8 @@
package mightypork.rogue.sounds.players;
package mightypork.gamecore.resources.sounds.players;
import mightypork.rogue.sounds.DeferredAudio;
import mightypork.utils.control.interf.Destroyable;
import mightypork.gamecore.control.interf.Destroyable;
import mightypork.gamecore.resources.sounds.DeferredAudio;
import mightypork.utils.objects.Mutable;
@@ -1,7 +1,7 @@
package mightypork.rogue.sounds.players;
package mightypork.gamecore.resources.sounds.players;
import mightypork.rogue.sounds.DeferredAudio;
import mightypork.gamecore.resources.sounds.DeferredAudio;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.objects.Mutable;
@@ -1,9 +1,9 @@
package mightypork.rogue.sounds.players;
package mightypork.gamecore.resources.sounds.players;
import mightypork.rogue.sounds.DeferredAudio;
import mightypork.utils.control.interf.Updateable;
import mightypork.utils.control.timing.Pauseable;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.gamecore.control.timing.Pauseable;
import mightypork.gamecore.resources.sounds.DeferredAudio;
import mightypork.utils.math.animation.AnimDouble;
import mightypork.utils.objects.Mutable;
@@ -1,9 +1,9 @@
package mightypork.rogue.textures;
package mightypork.gamecore.resources.textures;
import mightypork.rogue.loading.BaseDeferredResource;
import mightypork.rogue.loading.MustLoadInMainThread;
import mightypork.rogue.render.Render;
import mightypork.gamecore.loading.BaseDeferredResource;
import mightypork.gamecore.loading.MustLoadInMainThread;
import mightypork.gamecore.render.Render;
import mightypork.utils.logging.LoggedName;
import mightypork.utils.math.coord.Rect;
@@ -1,4 +1,4 @@
package mightypork.rogue.textures;
package mightypork.gamecore.resources.textures;
import org.lwjgl.opengl.GL11;
@@ -1,13 +1,13 @@
package mightypork.rogue.textures;
package mightypork.gamecore.resources.textures;
import java.util.HashMap;
import mightypork.rogue.AppAccess;
import mightypork.rogue.AppAdapter;
import mightypork.rogue.bus.events.ResourceLoadRequest;
import mightypork.rogue.textures.FilteredTexture.Filter;
import mightypork.rogue.textures.FilteredTexture.Wrap;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.AppAdapter;
import mightypork.gamecore.control.bus.events.ResourceLoadRequest;
import mightypork.gamecore.resources.textures.FilteredTexture.Filter;
import mightypork.gamecore.resources.textures.FilteredTexture.Wrap;
import mightypork.utils.math.coord.Rect;
import org.newdawn.slick.opengl.Texture;
@@ -1,4 +1,4 @@
package mightypork.rogue.textures;
package mightypork.gamecore.resources.textures;
import mightypork.utils.math.coord.Rect;
+19 -16
View File
@@ -9,21 +9,24 @@ import java.util.logging.Level;
import javax.swing.JOptionPane;
import mightypork.rogue.bus.events.*;
import mightypork.rogue.bus.events.ActionRequest.RequestType;
import mightypork.rogue.gui.screens.ScreenRegistry;
import mightypork.rogue.gui.screens.test_bouncyboxes.ScreenTestBouncy;
import mightypork.rogue.gui.screens.test_cat_sound.ScreenTestCat;
import mightypork.rogue.gui.screens.test_font.ScreenTestFont;
import mightypork.rogue.input.InputSystem;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.Keys;
import mightypork.rogue.render.DisplaySystem;
import mightypork.rogue.sounds.SoundSystem;
import mightypork.rogue.util.SlickLogRedirector;
import mightypork.utils.control.bus.EventBus;
import mightypork.utils.control.interf.Destroyable;
import mightypork.utils.control.interf.Updateable;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.GameLoop;
import mightypork.gamecore.SlickLogRedirector;
import mightypork.gamecore.control.bus.EventBus;
import mightypork.gamecore.control.bus.events.*;
import mightypork.gamecore.control.interf.Destroyable;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.gamecore.gui.screens.ScreenRegistry;
import mightypork.gamecore.input.InputSystem;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
import mightypork.gamecore.render.DisplaySystem;
import mightypork.gamecore.resources.sounds.SoundSystem;
import mightypork.rogue.events.ActionRequest;
import mightypork.rogue.events.ActionRequest.RequestType;
import mightypork.rogue.screens.test_bouncyboxes.ScreenTestBouncy;
import mightypork.rogue.screens.test_cat_sound.ScreenTestCat;
import mightypork.rogue.screens.test_font.ScreenTestFont;
import mightypork.utils.logging.Log;
import mightypork.utils.logging.LogInstance;
@@ -43,7 +46,7 @@ public class App implements AppAccess {
private DisplaySystem displaySystem;
private static SoundSystem soundSystem;
private EventBus eventBus;
private MainLoop mainLoop;
private GameLoop mainLoop;
private ScreenRegistry screens;
+15 -54
View File
@@ -1,24 +1,17 @@
package mightypork.rogue;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
import mightypork.rogue.bus.Subsystem;
import mightypork.rogue.bus.events.ActionRequest;
import mightypork.rogue.bus.events.ActionRequest.RequestType;
import mightypork.rogue.bus.events.MainLoopTaskRequest;
import mightypork.rogue.bus.events.UpdateEvent;
import mightypork.rogue.render.Renderable;
import mightypork.rogue.tasks.TaskTakeScreenshot;
import mightypork.gamecore.GameLoop;
import mightypork.gamecore.input.Action;
import mightypork.gamecore.render.Renderable;
import mightypork.rogue.events.ActionRequest;
import mightypork.rogue.events.ActionRequest.RequestType;
import mightypork.rogue.util.Utils;
import mightypork.utils.control.timing.TimerDelta;
public class MainLoop extends Subsystem implements ActionRequest.Listener, MainLoopTaskRequest.Listener {
public class MainLoop extends GameLoop implements ActionRequest.Listener {
private final Queue<Runnable> taskQueue = new ConcurrentLinkedQueue<Runnable>();
private final Renderable renderable;
final Renderable renderable;
public MainLoop(App app, Renderable masterRenderable) {
@@ -31,36 +24,11 @@ public class MainLoop extends Subsystem implements ActionRequest.Listener, MainL
this.renderable = masterRenderable;
}
/** timer */
private TimerDelta timer;
private boolean running = true;
public void start()
{
timer = new TimerDelta();
while (running) {
disp().beginFrame();
bus().send(new UpdateEvent(timer.getDelta()));
Runnable r;
while ((r = taskQueue.poll()) != null) {
r.run();
}
renderable.render();
disp().endFrame();
}
}
@Override
protected void deinit()
protected void tick()
{
running = false;
renderable.render();
}
@@ -82,10 +50,10 @@ public class MainLoop extends Subsystem implements ActionRequest.Listener, MainL
}
/** Take a screenshot */
private final Runnable taskScreenshot = new Runnable() {
private final Action taskScreenshot = new Action() {
@Override
public void run()
public void execute()
{
Res.getEffect("gui.shutter").play(1);
Utils.runAsThread(new TaskTakeScreenshot(disp()));
@@ -93,29 +61,22 @@ public class MainLoop extends Subsystem implements ActionRequest.Listener, MainL
};
/** Shutdown the application */
private final Runnable taskShutdown = new Runnable() {
private final Action taskShutdown = new Action() {
@Override
public void run()
public void execute()
{
shutdown();
}
};
/** Toggle fullscreen */
private final Runnable taskFullscreen = new Runnable() {
private final Action taskFullscreen = new Action() {
@Override
public void run()
public void execute()
{
disp().switchFullscreen();
}
};
@Override
public synchronized void queueTask(Runnable request)
{
taskQueue.add(request);
}
}
+13 -12
View File
@@ -1,18 +1,19 @@
package mightypork.rogue;
import mightypork.rogue.fonts.DeferredFont;
import mightypork.rogue.fonts.DeferredFont.FontStyle;
import mightypork.rogue.fonts.FontBank;
import mightypork.rogue.fonts.GLFont;
import mightypork.rogue.loading.AsyncResourceLoader;
import mightypork.rogue.sounds.SoundBank;
import mightypork.rogue.sounds.players.EffectPlayer;
import mightypork.rogue.sounds.players.LoopPlayer;
import mightypork.rogue.textures.FilteredTexture.Filter;
import mightypork.rogue.textures.FilteredTexture.Wrap;
import mightypork.rogue.textures.TextureBank;
import mightypork.rogue.textures.TxQuad;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.loading.AsyncResourceLoader;
import mightypork.gamecore.resources.fonts.DeferredFont;
import mightypork.gamecore.resources.fonts.DeferredFont.FontStyle;
import mightypork.gamecore.resources.fonts.FontBank;
import mightypork.gamecore.resources.fonts.GLFont;
import mightypork.gamecore.resources.sounds.SoundBank;
import mightypork.gamecore.resources.sounds.players.EffectPlayer;
import mightypork.gamecore.resources.sounds.players.LoopPlayer;
import mightypork.gamecore.resources.textures.FilteredTexture.Filter;
import mightypork.gamecore.resources.textures.FilteredTexture.Wrap;
import mightypork.gamecore.resources.textures.TextureBank;
import mightypork.gamecore.resources.textures.TxQuad;
import org.newdawn.slick.opengl.Texture;
@@ -1,18 +1,14 @@
package mightypork.rogue.tasks;
package mightypork.rogue;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.imageio.ImageIO;
import mightypork.rogue.Paths;
import mightypork.rogue.render.DisplaySystem;
import mightypork.rogue.render.DisplaySystem.Screenshot;
import mightypork.gamecore.render.DisplaySystem;
import mightypork.gamecore.render.DisplaySystem.Screenshot;
import mightypork.utils.logging.Log;
@@ -29,20 +25,6 @@ public class TaskTakeScreenshot implements Runnable {
@Override
public void run()
{
final 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++) {
final int i = (x + (scr.width * y)) * scr.bpp;
final int r = scr.bytes.get(i) & 0xFF;
final int g = scr.bytes.get(i + 1) & 0xFF;
final int b = scr.bytes.get(i + 2) & 0xFF;
image.setRGB(x, scr.height - (y + 1), (0xFF << 24) | (r << 16) | (g << 8) | b);
}
}
final String fname = getUniqueScreenshotName();
// generate unique filename
@@ -56,11 +38,9 @@ public class TaskTakeScreenshot implements Runnable {
Log.f3("Saving screenshot to file: " + file);
final String format = "PNG";
// save to disk
try {
ImageIO.write(image, format, file);
scr.save(file);
} catch (final IOException e) {
Log.e("Failed to save screenshot.", e);
}
-38
View File
@@ -1,38 +0,0 @@
package mightypork.rogue.bus;
import mightypork.rogue.AppAccess;
import mightypork.utils.control.interf.Destroyable;
/**
* App event bus client, to be used for subsystems, screens and anything that
* needs access to the eventbus
*
* @author MightyPork
*/
public abstract class Subsystem extends ChildClient implements Destroyable {
public Subsystem(AppAccess app) {
super(app);
bus().subscribe(this);
}
@Override
public final void destroy()
{
deinit();
bus().unsubscribe(this);
}
/**
* Deinitialize the subsystem<br>
* (called during destruction)
*/
protected abstract void deinit();
}
@@ -1,8 +1,8 @@
package mightypork.rogue.bus.events;
package mightypork.rogue.events;
import mightypork.utils.control.bus.events.Event;
import mightypork.utils.control.bus.events.types.SingleReceiverEvent;
import mightypork.gamecore.control.bus.events.Event;
import mightypork.gamecore.control.bus.events.types.SingleReceiverEvent;
/**
@@ -1,37 +1,37 @@
package mightypork.rogue.gui.screens.test_bouncyboxes;
package mightypork.rogue.screens.test_bouncyboxes;
import static mightypork.utils.math.constraints.ConstraintFactory.*;
import java.util.Random;
import mightypork.rogue.gui.renderers.PluggableRenderer;
import mightypork.rogue.render.Render;
import mightypork.utils.control.interf.Updateable;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.gamecore.gui.renderers.PluggableRenderer;
import mightypork.gamecore.render.Render;
import mightypork.utils.math.animation.AnimDouble;
import mightypork.utils.math.animation.Easing;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.constraints.NumEvaluable;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.utils.math.constraints.NumberConstraint;
import mightypork.utils.math.constraints.RectConstraint;
public class BouncyBox extends PluggableRenderer implements Updateable {
private final Random rand = new Random();
private final RectEvaluable box;
private final RectConstraint box;
private final AnimDouble pos = new AnimDouble(0, Easing.BOUNCE_OUT);
public BouncyBox() {
// create box
final NumEvaluable side = c_height(this);
RectEvaluable abox = c_box(this, side, side);
final NumberConstraint side = c_height(this);
RectConstraint abox = c_box(this, side, side);
// move
final NumEvaluable move_length = c_sub(c_width(this), side);
final NumEvaluable offset = c_mul(move_length, c_n(pos));
final NumberConstraint move_length = c_sub(c_width(this), side);
final NumberConstraint offset = c_mul(move_length, c_n(pos));
abox = c_move(abox, offset, c_n(0));
// add padding
@@ -1,4 +1,4 @@
package mightypork.rogue.gui.screens.test_bouncyboxes;
package mightypork.rogue.screens.test_bouncyboxes;
import static mightypork.utils.math.constraints.ConstraintFactory.*;
@@ -6,16 +6,16 @@ import static mightypork.utils.math.constraints.ConstraintFactory.*;
import java.util.ArrayList;
import java.util.List;
import mightypork.gamecore.gui.renderers.RowHolder;
import mightypork.gamecore.gui.renderers.TextRenderer;
import mightypork.gamecore.gui.renderers.TextRenderer.Align;
import mightypork.gamecore.gui.screens.Screen;
import mightypork.gamecore.gui.screens.ScreenLayer;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
import mightypork.rogue.Res;
import mightypork.rogue.gui.renderers.RowHolder;
import mightypork.rogue.gui.renderers.TextRenderer;
import mightypork.rogue.gui.renderers.TextRenderer.Align;
import mightypork.rogue.gui.screens.Screen;
import mightypork.rogue.gui.screens.ScreenLayer;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.Keys;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.utils.math.constraints.RectConstraint;
public class LayerBouncyBoxes extends ScreenLayer {
@@ -46,7 +46,7 @@ public class LayerBouncyBoxes extends ScreenLayer {
});
// shrink screen rect by 8% on all sides
final RectEvaluable holder_rect = c_shrink(this, c_percent(c_height(this), c_n(8)));
final RectConstraint holder_rect = c_shrink(this, c_percent(c_height(this), c_n(8)));
addChildClient(layout = new RowHolder(screen, holder_rect, 8));
@@ -1,11 +1,11 @@
package mightypork.rogue.gui.screens.test_bouncyboxes;
package mightypork.rogue.screens.test_bouncyboxes;
import mightypork.rogue.AppAccess;
import mightypork.rogue.bus.events.ScreenRequestEvent;
import mightypork.rogue.gui.screens.LayeredScreen;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.Keys;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.bus.events.ScreenRequestEvent;
import mightypork.gamecore.gui.screens.LayeredScreen;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
public class ScreenTestBouncy extends LayeredScreen {
@@ -1,24 +1,24 @@
package mightypork.rogue.gui.screens.test_cat_sound;
package mightypork.rogue.screens.test_cat_sound;
import static mightypork.utils.math.constraints.ConstraintFactory.*;
import java.util.Random;
import mightypork.gamecore.control.bus.events.MouseButtonEvent;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.gamecore.gui.renderers.ImageRenderer;
import mightypork.gamecore.gui.renderers.TextRenderer;
import mightypork.gamecore.gui.renderers.TextRenderer.Align;
import mightypork.gamecore.gui.screens.Screen;
import mightypork.gamecore.gui.screens.ScreenLayer;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
import mightypork.rogue.Res;
import mightypork.rogue.bus.events.MouseButtonEvent;
import mightypork.rogue.gui.renderers.ImageRenderer;
import mightypork.rogue.gui.renderers.TextRenderer;
import mightypork.rogue.gui.renderers.TextRenderer.Align;
import mightypork.rogue.gui.screens.Screen;
import mightypork.rogue.gui.screens.ScreenLayer;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.Keys;
import mightypork.utils.control.interf.Updateable;
import mightypork.utils.math.animation.AnimDouble;
import mightypork.utils.math.animation.Easing;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.constraints.RectEvaluable;
import mightypork.utils.math.constraints.RectConstraint;
import mightypork.utils.math.coord.Coord;
@@ -44,7 +44,7 @@ public class LayerFlyingCat extends ScreenLayer implements Updateable, MouseButt
cat.setContext(c_centered(c_box(this, c_n(size), c_n(size)), c_n(xPos), c_n(yPos)));
//@formatter:off
final RectEvaluable flyingFontBox = c_centered(
final RectConstraint flyingFontBox = c_centered(
c_box(this, c_n(0), c_n(64)),
input().c_mouse_x(),
input().c_mouse_y()
@@ -1,14 +1,14 @@
package mightypork.rogue.gui.screens.test_cat_sound;
package mightypork.rogue.screens.test_cat_sound;
import mightypork.rogue.AppAccess;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.control.bus.events.ScreenRequestEvent;
import mightypork.gamecore.gui.screens.LayeredScreen;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
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.screens.LayeredScreen;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.Keys;
import mightypork.rogue.events.ActionRequest;
import mightypork.rogue.events.ActionRequest.RequestType;
public class ScreenTestCat extends LayeredScreen {
@@ -1,10 +1,10 @@
package mightypork.rogue.gui.screens.test_font;
package mightypork.rogue.screens.test_font;
import mightypork.rogue.AppAccess;
import mightypork.gamecore.AppAccess;
import mightypork.gamecore.gui.screens.Screen;
import mightypork.gamecore.resources.fonts.FontRenderer;
import mightypork.rogue.Res;
import mightypork.rogue.fonts.FontRenderer;
import mightypork.rogue.gui.screens.Screen;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.coord.Coord;
@@ -1,8 +1,8 @@
package mightypork.utils.math.animation;
import mightypork.utils.control.interf.Updateable;
import mightypork.utils.control.timing.Pauseable;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.gamecore.control.timing.Pauseable;
import mightypork.utils.math.Calc;
@@ -14,9 +14,9 @@ import mightypork.utils.math.coord.Rect;
*/
public class ConstraintFactory {
public static NumEvaluable c_min(final NumEvaluable a, final NumEvaluable b)
public static NumberConstraint c_min(final NumberConstraint a, final NumberConstraint b)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -27,9 +27,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_max(final NumEvaluable a, final NumEvaluable b)
public static NumberConstraint c_max(final NumberConstraint a, final NumberConstraint b)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -40,9 +40,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_abs(final NumEvaluable a)
public static NumberConstraint c_abs(final NumberConstraint a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -53,9 +53,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_round(final NumEvaluable a)
public static NumberConstraint c_round(final NumberConstraint a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -66,9 +66,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_round(final RectEvaluable r)
public static RectConstraint c_round(final RectConstraint r)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -79,9 +79,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_ceil(final NumEvaluable a)
public static NumberConstraint c_ceil(final NumberConstraint a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -92,9 +92,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_floor(final NumEvaluable a)
public static NumberConstraint c_floor(final NumberConstraint a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -105,9 +105,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_neg(final NumEvaluable a)
public static NumberConstraint c_neg(final NumberConstraint a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -118,9 +118,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_add(final NumEvaluable a, final NumEvaluable b)
public static NumberConstraint c_add(final NumberConstraint a, final NumberConstraint b)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -131,9 +131,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_sub(final NumEvaluable a, final NumEvaluable b)
public static NumberConstraint c_sub(final NumberConstraint a, final NumberConstraint b)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -144,9 +144,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_mul(final NumEvaluable a, final NumEvaluable b)
public static NumberConstraint c_mul(final NumberConstraint a, final NumberConstraint b)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -157,9 +157,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_div(final NumEvaluable a, final NumEvaluable b)
public static NumberConstraint c_div(final NumberConstraint a, final NumberConstraint b)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -170,9 +170,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_percent(final NumEvaluable whole, final NumEvaluable percent)
public static NumberConstraint c_percent(final NumberConstraint whole, final NumberConstraint percent)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -183,9 +183,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_n(final double a)
public static NumberConstraint c_n(final double a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -196,9 +196,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_n(final AnimDouble a)
public static NumberConstraint c_n(final AnimDouble a)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -209,9 +209,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_width(final RectEvaluable r)
public static NumberConstraint c_width(final RectConstraint r)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -222,9 +222,9 @@ public class ConstraintFactory {
}
public static NumEvaluable c_height(final RectEvaluable r)
public static NumberConstraint c_height(final RectConstraint r)
{
return new NumEvaluable() {
return new NumberConstraint() {
@Override
public double getValue()
@@ -235,9 +235,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_row(final RectEvaluable r, final int rows, final int index)
public static RectConstraint c_row(final RectConstraint r, final int rows, final int index)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -254,9 +254,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_column(final RectEvaluable r, final int columns, final int index)
public static RectConstraint c_column(final RectConstraint r, final int columns, final int index)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -273,21 +273,21 @@ public class ConstraintFactory {
}
public static RectEvaluable c_shrink(RectEvaluable r, NumEvaluable shrink)
public static RectConstraint c_shrink(RectConstraint r, NumberConstraint shrink)
{
return c_shrink(r, shrink, shrink, shrink, shrink);
}
public static RectEvaluable c_shrink(RectEvaluable context, NumEvaluable horiz, NumEvaluable vert)
public static RectConstraint c_shrink(RectConstraint context, NumberConstraint horiz, NumberConstraint vert)
{
return c_shrink(context, horiz, vert, horiz, vert);
}
public static RectEvaluable c_shrink(final RectEvaluable r, final NumEvaluable x1, final NumEvaluable y1, final NumEvaluable x2, final NumEvaluable y2)
public static RectConstraint c_shrink(final RectConstraint r, final NumberConstraint x1, final NumberConstraint y1, final NumberConstraint x2, final NumberConstraint y2)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -298,9 +298,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_center(final RectEvaluable r)
public static RectConstraint c_center(final RectConstraint r)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -311,21 +311,21 @@ public class ConstraintFactory {
}
public static RectEvaluable c_grow(RectEvaluable r, NumEvaluable grow)
public static RectConstraint c_grow(RectConstraint r, NumberConstraint grow)
{
return c_grow(r, grow, grow, grow, grow);
}
public static RectEvaluable c_grow(RectEvaluable r, NumEvaluable horiz, NumEvaluable vert)
public static RectConstraint c_grow(RectConstraint r, NumberConstraint horiz, NumberConstraint vert)
{
return c_grow(r, horiz, vert, horiz, vert);
}
public static RectEvaluable c_grow(final RectEvaluable r, final NumEvaluable x1, final NumEvaluable y1, final NumEvaluable x2, final NumEvaluable y2)
public static RectConstraint c_grow(final RectConstraint r, final NumberConstraint x1, final NumberConstraint y1, final NumberConstraint x2, final NumberConstraint y2)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -336,9 +336,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_tile(final RectEvaluable r, final int rows, final int cols, final int left, final int top)
public static RectConstraint c_tile(final RectConstraint r, final int rows, final int cols, final int left, final int top)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -356,9 +356,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_box(final RectEvaluable r, final NumEvaluable width, final NumEvaluable height)
public static RectConstraint c_box(final RectConstraint r, final NumberConstraint width, final NumberConstraint height)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -378,9 +378,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_box(final RectEvaluable r, final NumEvaluable x, final NumEvaluable y, final NumEvaluable width, final NumEvaluable height)
public static RectConstraint c_box(final RectConstraint r, final NumberConstraint x, final NumberConstraint y, final NumberConstraint width, final NumberConstraint height)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -400,9 +400,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_centered(final RectEvaluable r, final NumEvaluable x, final NumEvaluable y)
public static RectConstraint c_centered(final RectConstraint r, final NumberConstraint x, final NumberConstraint y)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -415,9 +415,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_box_abs(final RectEvaluable r, final NumEvaluable x1, final NumEvaluable y1, final NumEvaluable x2, final NumEvaluable y2)
public static RectConstraint c_box_abs(final RectConstraint r, final NumberConstraint x1, final NumberConstraint y1, final NumberConstraint x2, final NumberConstraint y2)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -432,9 +432,9 @@ public class ConstraintFactory {
}
public static RectEvaluable c_move(final RectEvaluable r, final NumEvaluable x, final NumEvaluable y)
public static RectConstraint c_move(final RectConstraint r, final NumberConstraint x, final NumberConstraint y)
{
return new RectEvaluable() {
return new RectConstraint() {
@Override
public Rect getRect()
@@ -6,11 +6,11 @@ import mightypork.utils.math.coord.Rect;
public class ContextAdapter implements PluggableContext {
private RectEvaluable backing = null;
private RectConstraint backing = null;
@Override
public void setContext(RectEvaluable rect)
public void setContext(RectConstraint rect)
{
this.backing = rect;
}
@@ -1,7 +1,7 @@
package mightypork.utils.math.constraints;
public interface NumEvaluable {
public interface NumberConstraint {
double getValue();
@@ -4,9 +4,9 @@ package mightypork.utils.math.constraints;
import mightypork.utils.math.coord.Rect;
public interface PluggableContext extends RectEvaluable {
public interface PluggableContext extends RectConstraint {
abstract void setContext(RectEvaluable rect);
abstract void setContext(RectConstraint rect);
@Override
@@ -0,0 +1,18 @@
package mightypork.utils.math.constraints;
import mightypork.utils.math.coord.Rect;
/**
* Rect constraint (ie. region)
*
* @author MightyPork
*/
public interface RectConstraint {
/**
* @return rect region
*/
Rect getRect();
}
@@ -1,10 +0,0 @@
package mightypork.utils.math.constraints;
import mightypork.utils.math.coord.Rect;
public interface RectEvaluable {
Rect getRect();
}
+4 -2
View File
@@ -4,6 +4,7 @@ package mightypork.utils.math.coord;
import java.util.Random;
import mightypork.utils.math.Calc;
import mightypork.utils.math.constraints.RectConstraint;
/**
@@ -200,9 +201,10 @@ public class Coord {
* @param rect checked rect.
* @return is inside
*/
public boolean isInRect(Rect rect)
public boolean isInRect(RectConstraint rect)
{
return isInRect(rect.getMin(), rect.getMax());
Rect r = rect.getRect();
return isInRect(r.getMin(), r.getMax());
}
@@ -1,7 +1,7 @@
package mightypork.utils.math.coord;
import mightypork.utils.control.interf.Updateable;
import mightypork.gamecore.control.interf.Updateable;
import mightypork.utils.math.Calc;

Some files were not shown because too many files have changed in this diff Show More