package examples.etyllica.interpolation;
import java.awt.Color;
import br.com.etyllica.core.animation.AnimationHandler;
import br.com.etyllica.core.animation.script.HorizontalMovementScript;
import br.com.etyllica.core.context.Application;
import br.com.etyllica.core.graphics.Graphics;
import br.com.etyllica.core.interpolation.Interpolator;
import br.com.etyllica.core.interpolation.LinearInterpolator;
import br.com.etyllica.core.interpolation.QuadraticInterpolator;
import br.com.etyllica.core.interpolation.RadialInterpolator;
import br.com.etyllica.core.interpolation.ReverseQuadraticInterpolator;
import br.com.etyllica.layer.Layer;
public class InterpolationExample extends Application {
public InterpolationExample(int w, int h) {
super(w, h);
}
HorizontalMovementScript rightLinearScript;
HorizontalMovementScript leftLinearScript;
HorizontalMovementScript rightQuadraticScript;
HorizontalMovementScript leftQuadraticScript;
HorizontalMovementScript rightRadialScript;
HorizontalMovementScript leftRadialScript;
HorizontalMovementScript rightReverseQuadraticScript;
HorizontalMovementScript leftReverseQuadraticScript;
private Layer linearBall;
private Layer quadraticBall;
private Layer radialBall;
private Layer reverseQuadraticBall;
@Override
public void load() {
loading = 10;
linearBall = new Layer(40, 80, 30, 30);
quadraticBall = new Layer(40, 120, 30, 30);
radialBall = new Layer(40, 160, 30, 30);
reverseQuadraticBall = new Layer(40, 200, 30, 30);
leftLinearScript = createLeftScript(linearBall, new LinearInterpolator());
rightLinearScript = createRightScript(linearBall, new LinearInterpolator());
rightLinearScript.addNext(leftLinearScript);
leftLinearScript.addNext(rightLinearScript);
Interpolator quadraticInterpolator = new QuadraticInterpolator();
leftQuadraticScript = createLeftScript(quadraticBall, quadraticInterpolator);
rightQuadraticScript = createRightScript(quadraticBall, quadraticInterpolator);
rightQuadraticScript.addNext(leftQuadraticScript);
leftQuadraticScript.addNext(rightQuadraticScript);
Interpolator radialInterpolator = new RadialInterpolator();
leftRadialScript = createLeftScript(radialBall, radialInterpolator);
rightRadialScript = createRightScript(radialBall, radialInterpolator);
rightRadialScript.addNext(leftRadialScript);
leftRadialScript.addNext(rightRadialScript);
Interpolator reverseQuadraticInterpolator = new ReverseQuadraticInterpolator();
leftReverseQuadraticScript = createLeftScript(reverseQuadraticBall, reverseQuadraticInterpolator);
rightReverseQuadraticScript = createRightScript(reverseQuadraticBall, reverseQuadraticInterpolator);
rightReverseQuadraticScript.addNext(leftReverseQuadraticScript);
leftReverseQuadraticScript.addNext(rightReverseQuadraticScript);
AnimationHandler.getInstance().add(rightLinearScript);
AnimationHandler.getInstance().add(rightQuadraticScript);
AnimationHandler.getInstance().add(rightRadialScript);
AnimationHandler.getInstance().add(rightReverseQuadraticScript);
loading = 100;
}
protected HorizontalMovementScript createRightScript(Layer target, Interpolator interpolator) {
HorizontalMovementScript rightScript = new HorizontalMovementScript(target, 3000);
rightScript.setInterval(40, 640);
rightScript.setInterpolator(interpolator);
return rightScript;
}
protected HorizontalMovementScript createLeftScript(Layer target, Interpolator interpolator) {
HorizontalMovementScript leftScript = new HorizontalMovementScript(target, 3000);
leftScript.setInterval(640, 40);
leftScript.setInterpolator(interpolator);
return leftScript;
}
@Override
public void draw(Graphics g) {
drawBall(g, linearBall);
drawBall(g, quadraticBall);
drawBall(g, radialBall);
drawBall(g, reverseQuadraticBall);
}
protected void drawBall(Graphics g, Layer ball) {
g.setColor(Color.RED);
g.fillOval(ball.getX(), ball.getY(), ball.getW(), ball.getH());
g.setColor(Color.BLACK);
g.drawOval(ball.getX(), ball.getY(), ball.getW(), ball.getH());
}
}