More easing types, cleanup

This commit is contained in:
Ondřej Hruška
2014-03-30 20:11:25 +02:00
parent 5c261c4513
commit e2e5576664
29 changed files with 531 additions and 480 deletions
+18 -17
View File
@@ -6,43 +6,43 @@ import static org.lwjgl.opengl.GL11.*;
import java.awt.image.BufferedImage;
import java.nio.ByteBuffer;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import mightypork.rogue.App;
import mightypork.rogue.Const;
import mightypork.rogue.display.events.ScreenChangeEvent;
import mightypork.utils.logging.Log;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.patterns.Destroyable;
import mightypork.utils.patterns.Initializable;
import mightypork.utils.time.Updateable;
import org.lwjgl.BufferUtils;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
public class DisplaySystem implements Initializable, Destroyable {
private boolean initialized;
private DisplayMode windowDisplayMode;
private int targetFps;
public DisplaySystem() {
initialize();
}
@Override
public void initialize()
{
if(initialized) return;
if (initialized) return;
initChannels();
initialized = true;
}
/**
* Initialize event channels
*/
@@ -51,6 +51,7 @@ public class DisplaySystem implements Initializable, Destroyable {
App.msgbus().registerMessageType(ScreenChangeEvent.class, ScreenChangeEvent.Listener.class);
}
@Override
public void destroy()
{
@@ -103,7 +104,7 @@ public class DisplaySystem implements Initializable, Destroyable {
Display.setDisplayMode(windowDisplayMode);
Display.update();
}
App.broadcast(new ScreenChangeEvent(true, Display.isFullscreen(), getSize()));
} catch (Throwable t) {
@@ -180,10 +181,10 @@ public class DisplaySystem implements Initializable, Destroyable {
*/
public void beginFrame()
{
if(Display.wasResized()) {
if (Display.wasResized()) {
App.broadcast(new ScreenChangeEvent(false, Display.isFullscreen(), getSize()));
}
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
+9 -7
View File
@@ -2,19 +2,15 @@ package mightypork.rogue.display;
import static org.lwjgl.opengl.GL11.*;
import java.util.Random;
import mightypork.rogue.App;
import mightypork.rogue.display.events.ScreenChangeEvent;
import mightypork.rogue.input.KeyBinder;
import mightypork.rogue.input.KeyBindingPool;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.events.KeyboardEvent;
import mightypork.rogue.input.events.MouseMotionEvent;
import mightypork.rogue.input.events.MouseButtonEvent;
import mightypork.rogue.input.events.MouseMotionEvent;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.patterns.Destroyable;
import mightypork.utils.patterns.Initializable;
import mightypork.utils.time.Updateable;
@@ -54,6 +50,7 @@ public abstract class Screen implements KeyBinder, Updateable, Initializable, Ke
/**
* Prepare for being shown
*
* @param shown true to show, false to hide
*/
public final void setActive(boolean shown)
@@ -110,14 +107,16 @@ public abstract class Screen implements KeyBinder, Updateable, Initializable, Ke
glMatrixMode(GL_MODELVIEW);
}
/**
* Initialize screen layout and key bindings.<br>
* Called when the screen is created, not when it comes to front. For that, use onEnter().
* Called when the screen is created, not when it comes to front. For that,
* use onEnter().
*/
@Override
public abstract void initialize();
/**
* Called when the screen becomes active
*/
@@ -172,6 +171,9 @@ public abstract class Screen implements KeyBinder, Updateable, Initializable, Ke
}
/**
* Update and render the screen
*/
@Override
public final void update(double delta)
{
@@ -1,167 +0,0 @@
package mightypork.rogue.display;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import mightypork.rogue.App;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.events.MouseButtonEvent;
import mightypork.rogue.input.events.MouseMotionEvent;
import mightypork.rogue.util.RenderUtils;
import mightypork.utils.math.Polar;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.easing.Easing;
import mightypork.utils.time.AnimDouble;
import mightypork.utils.time.AnimDoubleDeg;
public class ScreenSplash extends Screen {
private AnimDoubleDeg degAnim = new AnimDoubleDeg(0, Easing.SINE);
//@formatter:off
private AnimDouble[] anims = new AnimDouble[] {
new AnimDouble(0, Easing.NONE),
new AnimDouble(0, Easing.LINEAR),
new AnimDouble(0, Easing.QUADRATIC_IN),
new AnimDouble(0, Easing.QUADRATIC_OUT),
new AnimDouble(0, Easing.QUADRATIC),
new AnimDouble(0, Easing.CUBIC_IN),
new AnimDouble(0, Easing.CUBIC_OUT),
new AnimDouble(0, Easing.CUBIC),
new AnimDouble(0, Easing.QUADRATIC_IN),
new AnimDouble(0, Easing.QUADRATIC_OUT),
new AnimDouble(0, Easing.QUADRATIC),
new AnimDouble(0, Easing.QUINTIC_IN),
new AnimDouble(0, Easing.QUINTIC_OUT),
new AnimDouble(0, Easing.QUINTIC_IN_OUT),
new AnimDouble(0, Easing.EXPO_IN),
new AnimDouble(0, Easing.EXPO_OUT),
new AnimDouble(0, Easing.EXPO),
new AnimDouble(0, Easing.SINE_IN),
new AnimDouble(0, Easing.SINE_OUT),
new AnimDouble(0, Easing.SINE),
new AnimDouble(0, Easing.CIRC_IN),
new AnimDouble(0, Easing.CIRC_OUT),
new AnimDouble(0, Easing.CIRC),
};
//@formatter:on
@Override
public void initialize()
{
bindKeyStroke(new KeyStroke(Keyboard.KEY_RIGHT), new Runnable() {
@Override
public void run()
{
for (AnimDouble a : anims) {
a.animate(0, 1, 3);
}
}
});
bindKeyStroke(new KeyStroke(Keyboard.KEY_LEFT), new Runnable() {
@Override
public void run()
{
for (AnimDouble a : anims) {
a.animate(1, 0, 3);
}
}
});
}
@Override
protected void renderScreen()
{
double screenH = Display.getHeight();
double screenW = Display.getWidth();
double perBoxH = screenH / anims.length;
double padding = perBoxH*0.1;
double boxSide = perBoxH-padding*2;
for (int i = 0; i < anims.length; i++) {
AnimDouble a = anims[i];
RenderUtils.setColor(i%3==0?RGB.GREEN:RGB.BLUE);
RenderUtils.quadSize(
padding + a.getCurrentValue() * (screenW - perBoxH - padding*2),
screenH - perBoxH * i - perBoxH + padding,
boxSide,
boxSide
);
}
RenderUtils.setColor(RGB.YELLOW);
RenderUtils.translate(new Coord(Display.getWidth() / 2, Display.getHeight() / 2));
RenderUtils.rotateZ(degAnim.getCurrentValue());
RenderUtils.quadSize(-10, -10, 20, 200);
}
@Override
public void receive(MouseMotionEvent event)
{
}
@Override
public void receive(MouseButtonEvent event)
{
if(event.isDown()) {
Coord vec = App.disp().getSize().half().vecTo(event.getPos());
Polar p = Polar.fromCoord(vec);
degAnim.fadeTo(p.getAngleDeg() - 90, 0.2);
}
}
@Override
protected void onEnter()
{
// TODO Auto-generated method stub
}
@Override
protected void onLeave()
{
// TODO Auto-generated method stub
}
@Override
protected void onSizeChanged(Coord size)
{
// TODO Auto-generated method stub
}
@Override
protected void updateScreen(double delta)
{
degAnim.update(delta);
for (AnimDouble a : anims) {
a.update(delta);
}
}
}
@@ -0,0 +1,200 @@
package mightypork.rogue.display;
import java.util.Random;
import mightypork.rogue.App;
import mightypork.rogue.input.KeyStroke;
import mightypork.rogue.input.events.MouseButtonEvent;
import mightypork.rogue.input.events.MouseMotionEvent;
import mightypork.rogue.util.RenderUtils;
import mightypork.utils.math.Polar;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.easing.Easing;
import mightypork.utils.time.animation.AnimDouble;
import mightypork.utils.time.animation.AnimDoubleDeg;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
public class ScreenTestAnimations extends Screen {
private Random rand = new Random();
private AnimDoubleDeg degAnim = new AnimDoubleDeg(0, Easing.ELASTIC_OUT);
//@formatter:off
private AnimDouble[] anims = new AnimDouble[] {
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
new AnimDouble(0, Easing.BOUNCE_OUT),
// new AnimDouble(0, Easing.NONE),
// new AnimDouble(0, Easing.LINEAR),
//
// new AnimDouble(0, Easing.QUADRATIC_IN),
// new AnimDouble(0, Easing.QUADRATIC_OUT),
// new AnimDouble(0, Easing.QUADRATIC_IN_OUT),
//
// new AnimDouble(0, Easing.CUBIC_IN),
// new AnimDouble(0, Easing.CUBIC_OUT),
// new AnimDouble(0, Easing.CUBIC_IN_OUT),
//
// new AnimDouble(0, Easing.QUADRATIC_IN),
// new AnimDouble(0, Easing.QUADRATIC_OUT),
// new AnimDouble(0, Easing.QUADRATIC_IN_OUT),
//
// new AnimDouble(0, Easing.QUINTIC_IN),
// new AnimDouble(0, Easing.QUINTIC_OUT),
// new AnimDouble(0, Easing.QUINTIC_IN_OUT),
//
// new AnimDouble(0, Easing.EXPO_IN),
// new AnimDouble(0, Easing.EXPO_OUT),
// new AnimDouble(0, Easing.EXPO_IN_OUT),
//
// new AnimDouble(0, Easing.SINE_IN),
// new AnimDouble(0, Easing.SINE_OUT),
// new AnimDouble(0, Easing.SINE_IN_OUT),
//
// new AnimDouble(0, Easing.CIRC_IN),
// new AnimDouble(0, Easing.CIRC_OUT),
// new AnimDouble(0, Easing.CIRC_IN_OUT),
//
// new AnimDouble(0, Easing.BOUNCE_IN),
// new AnimDouble(0, Easing.BOUNCE_OUT),
// new AnimDouble(0, Easing.BOUNCE_IN_OUT),
//
// new AnimDouble(0, Easing.BACK_IN),
// new AnimDouble(0, Easing.BACK_OUT),
// new AnimDouble(0, Easing.BACK_IN_OUT),
//
// new AnimDouble(0, Easing.ELASTIC_IN),
// new AnimDouble(0, Easing.ELASTIC_OUT),
// new AnimDouble(0, Easing.ELASTIC_IN_OUT),
};
//@formatter:on
@Override
public void initialize()
{
bindKeyStroke(new KeyStroke(Keyboard.KEY_RIGHT), new Runnable() {
@Override
public void run()
{
for (AnimDouble a : anims) {
a.animate(0, 1, 1+rand.nextDouble()*1);
}
}
});
bindKeyStroke(new KeyStroke(Keyboard.KEY_LEFT), new Runnable() {
@Override
public void run()
{
for (AnimDouble a : anims) {
a.animate(1, 0, 1+rand.nextDouble()*1);
}
}
});
}
@Override
protected void renderScreen()
{
double screenH = Display.getHeight();
double screenW = Display.getWidth();
double perBoxH = screenH / anims.length;
double padding = perBoxH * 0.1;
double boxSide = perBoxH - padding * 2;
for (int i = 0; i < anims.length; i++) {
AnimDouble a = anims[i];
RenderUtils.setColor(RGB.GREEN);
RenderUtils.quadSize(padding + a.getCurrentValue() * (screenW - perBoxH), screenH - perBoxH * i - perBoxH + padding, boxSide, boxSide);
}
RenderUtils.setColor(RGB.YELLOW);
RenderUtils.translate(new Coord(Display.getWidth() / 2, Display.getHeight() / 2));
RenderUtils.rotateZ(degAnim.getCurrentValue());
RenderUtils.quadSize(-10, -10, 20, 200);
}
@Override
public void receive(MouseMotionEvent event)
{
//
}
@Override
public void receive(MouseButtonEvent event)
{
if (event.isDown()) {
Coord vec = App.disp().getSize().half().vecTo(event.getPos());
Polar p = Polar.fromCoord(vec);
degAnim.fadeTo(p.getAngleDeg() - 90, 1.5);
}
}
@Override
protected void onEnter()
{
// TODO Auto-generated method stub
}
@Override
protected void onLeave()
{
// TODO Auto-generated method stub
}
@Override
protected void onSizeChanged(Coord size)
{
// TODO Auto-generated method stub
}
@Override
protected void updateScreen(double delta)
{
degAnim.update(delta);
for (AnimDouble a : anims) {
a.update(delta);
}
}
}
@@ -1,5 +1,6 @@
package mightypork.rogue.display.constraints;
import mightypork.utils.math.coord.Coord;
@@ -11,9 +12,10 @@ public abstract class Constraint implements ConstraintContext {
public Constraint(ConstraintContext context) {
this.context = context;
}
public void setContext(ConstraintContext context) {
public void setContext(ConstraintContext context)
{
this.context = context;
}
@@ -22,12 +24,16 @@ public abstract class Constraint implements ConstraintContext {
{
return context;
}
protected Coord origin() {
protected Coord origin()
{
return context.getRect().getOrigin();
}
protected Coord size() {
protected Coord size()
{
return context.getRect().getSize();
}
@@ -1,9 +1,10 @@
package mightypork.rogue.display.constraints;
import mightypork.utils.math.coord.Coord;
import mightypork.utils.math.coord.Rect;
public interface ConstraintContext {
public Rect getRect();
}