Attempt to separate framework from game impl.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
@@ -0,0 +1,14 @@
|
||||
package mightypork.gamecore;
|
||||
|
||||
|
||||
import mightypork.gamecore.control.bus.EventBus;
|
||||
|
||||
|
||||
public interface BusAccess {
|
||||
|
||||
/**
|
||||
* @return event bus
|
||||
*/
|
||||
public abstract EventBus bus();
|
||||
|
||||
}
|
||||
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.util;
|
||||
package mightypork.gamecore;
|
||||
|
||||
|
||||
import mightypork.utils.logging.LogInstance;
|
||||
+38
-10
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus;
|
||||
package mightypork.gamecore.control.bus;
|
||||
|
||||
|
||||
import java.util.Collection;
|
||||
+7
-7
@@ -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;
|
||||
|
||||
|
||||
+5
-5
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus.clients;
|
||||
package mightypork.gamecore.control.bus.clients;
|
||||
|
||||
|
||||
import java.util.Collection;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus.clients;
|
||||
package mightypork.gamecore.control.bus.clients;
|
||||
|
||||
|
||||
/**
|
||||
+3
-4
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
+4
-4
@@ -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
-3
@@ -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;
|
||||
|
||||
|
||||
+2
-3
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
+14
-2
@@ -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)
|
||||
{
|
||||
+2
-3
@@ -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;
|
||||
|
||||
|
||||
+3
-4
@@ -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
-2
@@ -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;
|
||||
|
||||
|
||||
+2
-3
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
+4
-5
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus.events.types;
|
||||
package mightypork.gamecore.control.bus.events.types;
|
||||
|
||||
|
||||
import java.lang.annotation.*;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus.events.types;
|
||||
package mightypork.gamecore.control.bus.events.types;
|
||||
|
||||
|
||||
import java.lang.annotation.*;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus.events.types;
|
||||
package mightypork.gamecore.control.bus.events.types;
|
||||
|
||||
|
||||
import java.lang.annotation.*;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.bus.events.types;
|
||||
package mightypork.gamecore.control.bus.events.types;
|
||||
|
||||
|
||||
import java.lang.annotation.*;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.interf;
|
||||
package mightypork.gamecore.control.interf;
|
||||
|
||||
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.interf;
|
||||
package mightypork.gamecore.control.interf;
|
||||
|
||||
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.timing;
|
||||
package mightypork.gamecore.control.timing;
|
||||
|
||||
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.timing;
|
||||
package mightypork.gamecore.control.timing;
|
||||
|
||||
|
||||
public interface Pauseable {
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.timing;
|
||||
package mightypork.gamecore.control.timing;
|
||||
|
||||
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.utils.control.timing;
|
||||
package mightypork.gamecore.control.timing;
|
||||
|
||||
|
||||
/**
|
||||
+4
-4
@@ -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;
|
||||
}
|
||||
+16
-9
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
+3
-3
@@ -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 {
|
||||
+4
-4
@@ -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);
|
||||
|
||||
}
|
||||
+4
-4
@@ -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);
|
||||
}
|
||||
+4
-4
@@ -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;
|
||||
}
|
||||
+3
-3
@@ -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;
|
||||
|
||||
+2
-2
@@ -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 {
|
||||
+12
-12
@@ -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();
|
||||
}
|
||||
+15
-8
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
+5
-5
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
+14
-14
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.input;
|
||||
package mightypork.gamecore.input;
|
||||
|
||||
|
||||
public interface KeyBinder {
|
||||
+2
-2
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
+2
-2
@@ -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
-1
@@ -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;
|
||||
+8
-8
@@ -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);
|
||||
+2
-2
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.loading;
|
||||
package mightypork.gamecore.loading;
|
||||
|
||||
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.loading;
|
||||
package mightypork.gamecore.loading;
|
||||
|
||||
|
||||
import java.lang.annotation.*;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.loading;
|
||||
package mightypork.gamecore.loading;
|
||||
|
||||
|
||||
/**
|
||||
+43
-10
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.render;
|
||||
package mightypork.gamecore.render;
|
||||
|
||||
|
||||
/**
|
||||
+3
-3
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.fonts;
|
||||
package mightypork.gamecore.resources.fonts;
|
||||
|
||||
|
||||
import java.awt.Font;
|
||||
+4
-4
@@ -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;
|
||||
+2
-2
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.fonts;
|
||||
package mightypork.gamecore.resources.fonts;
|
||||
|
||||
|
||||
import mightypork.utils.math.color.RGB;
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.fonts;
|
||||
package mightypork.gamecore.resources.fonts;
|
||||
|
||||
|
||||
/**
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.fonts;
|
||||
package mightypork.gamecore.resources.fonts;
|
||||
|
||||
|
||||
import mightypork.utils.math.color.RGB;
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+2
-2
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.sounds;
|
||||
package mightypork.gamecore.resources.sounds;
|
||||
|
||||
|
||||
import mightypork.utils.math.Calc;
|
||||
+2
-2
@@ -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;
|
||||
|
||||
|
||||
+5
-5
@@ -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;
|
||||
|
||||
|
||||
+7
-7
@@ -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;
|
||||
+3
-3
@@ -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;
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
|
||||
+4
-4
@@ -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;
|
||||
|
||||
+4
-4
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.textures;
|
||||
package mightypork.gamecore.resources.textures;
|
||||
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
+6
-6
@@ -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
-1
@@ -1,4 +1,4 @@
|
||||
package mightypork.rogue.textures;
|
||||
package mightypork.gamecore.resources.textures;
|
||||
|
||||
|
||||
import mightypork.utils.math.coord.Rect;
|
||||
@@ -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;
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
+4
-24
@@ -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);
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
+3
-3
@@ -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;
|
||||
|
||||
|
||||
/**
|
||||
+11
-11
@@ -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
|
||||
+10
-10
@@ -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));
|
||||
|
||||
+6
-6
@@ -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 {
|
||||
+12
-12
@@ -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()
|
||||
+8
-8
@@ -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 {
|
||||
+4
-4
@@ -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
-1
@@ -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,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
Reference in New Issue
Block a user