package loon.action;
import loon.geom.Bezier;
import loon.geom.Vector2f;
import loon.utils.Easing.EasingMode;
public class BezierTo extends BezierBy {
final Bezier originalconfig;
public BezierTo(float duration, Bezier b) {
this(-1, -1, duration, EasingMode.Linear, b);
}
public BezierTo(float sx, float sy, float duration, Bezier b) {
this(sx, sy, duration, EasingMode.Linear, b);
}
public BezierTo(float sx, float sy, float duration, EasingMode mode,
Bezier b) {
super(sx, sy, duration, mode, b);
originalconfig = new Bezier();
originalconfig.controlPoint1 = Vector2f.at(b.controlPoint1.x,
b.controlPoint1.y);
originalconfig.controlPoint2 = Vector2f.at(b.controlPoint2.x,
b.controlPoint2.y);
originalconfig.endPosition = Vector2f.at(b.endPosition.x,
b.endPosition.y);
}
@Override
public void onLoad() {
super.onLoad();
Vector2f startPosition = new Vector2f(startX, startY);
bezier.controlPoint1.set(Vector2f.subNew(originalconfig.controlPoint1,
startPosition));
bezier.controlPoint2.set(Vector2f.subNew(originalconfig.controlPoint2,
startPosition));
bezier.endPosition.set(Vector2f.subNew(originalconfig.endPosition,
startPosition));
}
@Override
public boolean isComplete() {
return _isCompleted;
}
@Override
public ActionEvent cpy() {
BezierTo bto = new BezierTo(startX, startY, easeTimer.getDuration(),
easeTimer.getEasingMode(), bezier.cpy());
bto.set(this);
return bto;
}
@Override
public ActionEvent reverse() {
Bezier b = new Bezier();
b.endPosition = bezier.endPosition.negate();
b.controlPoint1 = Vector2f.addNew(bezier.controlPoint2,
bezier.endPosition.negate());
b.controlPoint2 = Vector2f.addNew(bezier.controlPoint1,
bezier.endPosition.negate());
BezierTo bto = new BezierTo(startX, startY, easeTimer.getDuration(),
easeTimer.getEasingMode(), b);
bto.set(this);
return bto;
}
@Override
public String getName() {
return "bezierto";
}
}