Refactor packages
This commit is contained in:
parent
af10b20b01
commit
bd8c41de18
118
src/main/java/dev/resent/ui/animation/Animation.java
Normal file
118
src/main/java/dev/resent/ui/animation/Animation.java
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
package dev.resent.ui.animation;
|
||||||
|
|
||||||
|
public abstract class Animation {
|
||||||
|
|
||||||
|
public AnimationTimer timer = new AnimationTimer();
|
||||||
|
|
||||||
|
protected int duration;
|
||||||
|
|
||||||
|
protected double endPoint;
|
||||||
|
|
||||||
|
protected Direction direction;
|
||||||
|
|
||||||
|
public Animation(int ms, double endPoint) {
|
||||||
|
this.duration = ms;
|
||||||
|
this.endPoint = endPoint;
|
||||||
|
this.direction = Direction.FORWARDS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Animation(int ms, double endPoint, Direction direction) {
|
||||||
|
this.duration = ms;
|
||||||
|
this.endPoint = endPoint;
|
||||||
|
this.direction = direction;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDone(Direction direction) {
|
||||||
|
return isDone() && this.direction.equals(direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getLinearOutput() {
|
||||||
|
return 1 - ((timer.getTime() / (double) duration) * endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
timer.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDone() {
|
||||||
|
return timer.hasTimeElapsed(duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void changeDirection() {
|
||||||
|
setDirection(direction.opposite());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDirection(Direction direction) {
|
||||||
|
if (this.direction != direction) {
|
||||||
|
this.direction = direction;
|
||||||
|
timer.setTime(System.currentTimeMillis() - (duration - Math.min(duration, timer.getTime())));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean correctOutput() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getValue() {
|
||||||
|
if (direction == Direction.FORWARDS) {
|
||||||
|
if (isDone())
|
||||||
|
return endPoint;
|
||||||
|
return (getEquation(timer.getTime()) * endPoint);
|
||||||
|
} else {
|
||||||
|
if (isDone()) return 0;
|
||||||
|
if (correctOutput()) {
|
||||||
|
double revTime = Math.min(duration, Math.max(0, duration - timer.getTime()));
|
||||||
|
return getEquation(revTime) * endPoint;
|
||||||
|
} else return (1 - getEquation(timer.getTime())) * endPoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract double getEquation(double x);
|
||||||
|
|
||||||
|
public double getEndPoint() {
|
||||||
|
return endPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEndPoint(double endPoint) {
|
||||||
|
this.endPoint = endPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDuration() {
|
||||||
|
return duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Direction getDirection() {
|
||||||
|
return direction;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class AnimationTimer {
|
||||||
|
|
||||||
|
public long lastMS = System.currentTimeMillis();
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
lastMS = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasTimeElapsed(long time, boolean reset) {
|
||||||
|
if (System.currentTimeMillis() - lastMS > time) {
|
||||||
|
if (reset) reset();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasTimeElapsed(long time) {
|
||||||
|
return System.currentTimeMillis() - lastMS > time;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getTime() {
|
||||||
|
return System.currentTimeMillis() - lastMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTime(long time) {
|
||||||
|
lastMS = time;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
src/main/java/dev/resent/ui/animation/AnimationUtils.java
Normal file
31
src/main/java/dev/resent/ui/animation/AnimationUtils.java
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package dev.resent.ui.animation;
|
||||||
|
|
||||||
|
public class AnimationUtils {
|
||||||
|
|
||||||
|
public static float calculateCompensation(final float target, float current, final double speed, long delta) {
|
||||||
|
|
||||||
|
final float diff = current - target;
|
||||||
|
|
||||||
|
double add = (delta * (speed / 50));
|
||||||
|
|
||||||
|
if (diff > speed){
|
||||||
|
if(current - add > target) {
|
||||||
|
current -= add;
|
||||||
|
}else {
|
||||||
|
current = target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (diff < -speed) {
|
||||||
|
if(current + add < target) {
|
||||||
|
current += add;
|
||||||
|
}else {
|
||||||
|
current = target;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
current = target;
|
||||||
|
}
|
||||||
|
|
||||||
|
return current;
|
||||||
|
}
|
||||||
|
}
|
12
src/main/java/dev/resent/ui/animation/Direction.java
Normal file
12
src/main/java/dev/resent/ui/animation/Direction.java
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
package dev.resent.ui.animation;
|
||||||
|
|
||||||
|
public enum Direction {
|
||||||
|
FORWARDS,
|
||||||
|
BACKWARDS;
|
||||||
|
|
||||||
|
public Direction opposite() {
|
||||||
|
if (this == Direction.FORWARDS) {
|
||||||
|
return Direction.BACKWARDS;
|
||||||
|
} else return Direction.FORWARDS;
|
||||||
|
}
|
||||||
|
}
|
40
src/main/java/dev/resent/ui/animation/SimpleAnimation.java
Normal file
40
src/main/java/dev/resent/ui/animation/SimpleAnimation.java
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
package dev.resent.ui.animation;
|
||||||
|
|
||||||
|
public class SimpleAnimation {
|
||||||
|
|
||||||
|
private float value;
|
||||||
|
private long lastMS;
|
||||||
|
|
||||||
|
public SimpleAnimation(final float value){
|
||||||
|
this.value = value;
|
||||||
|
this.lastMS = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnimation(final float value, double speed){
|
||||||
|
|
||||||
|
final long currentMS = System.currentTimeMillis();
|
||||||
|
final long delta = currentMS - this.lastMS;
|
||||||
|
this.lastMS = currentMS;
|
||||||
|
|
||||||
|
double deltaValue = 0.0;
|
||||||
|
|
||||||
|
if(speed > 28) {
|
||||||
|
speed = 28;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (speed != 0.0)
|
||||||
|
{
|
||||||
|
deltaValue = Math.abs(value - this.value) * 0.35f / (10.0 / speed);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.value = AnimationUtils.calculateCompensation(value, this.value, deltaValue, delta);
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getValue() {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(float value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package dev.resent.ui.animation.impl;
|
||||||
|
|
||||||
|
import dev.resent.ui.animation.Animation;
|
||||||
|
import dev.resent.ui.animation.Direction;
|
||||||
|
|
||||||
|
public class DecelerateAnimation extends Animation {
|
||||||
|
|
||||||
|
public DecelerateAnimation(int ms, double endPoint) {
|
||||||
|
super(ms, endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DecelerateAnimation(int ms, double endPoint, Direction direction) {
|
||||||
|
super(ms, endPoint, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected double getEquation(double x) {
|
||||||
|
double x1 = x / duration;
|
||||||
|
return 1 - ((x1 - 1) * (x1 - 1));
|
||||||
|
}
|
||||||
|
}
|
31
src/main/java/dev/resent/ui/animation/impl/EaseBackIn.java
Normal file
31
src/main/java/dev/resent/ui/animation/impl/EaseBackIn.java
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
package dev.resent.ui.animation.impl;
|
||||||
|
|
||||||
|
import dev.resent.ui.animation.Animation;
|
||||||
|
import dev.resent.ui.animation.Direction;
|
||||||
|
|
||||||
|
public class EaseBackIn extends Animation {
|
||||||
|
private final float easeAmount;
|
||||||
|
|
||||||
|
public EaseBackIn(int ms, double endPoint, float easeAmount) {
|
||||||
|
super(ms, endPoint);
|
||||||
|
this.easeAmount = easeAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public EaseBackIn(int ms, double endPoint, float easeAmount, Direction direction) {
|
||||||
|
super(ms, endPoint, direction);
|
||||||
|
this.easeAmount = easeAmount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean correctOutput() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected double getEquation(double x) {
|
||||||
|
double x1 = x / duration;
|
||||||
|
float shrink = easeAmount + 1;
|
||||||
|
return Math.max(0, 1 + shrink * Math.pow(x1 - 1, 3) + easeAmount * Math.pow(x1 - 1, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package dev.resent.ui.animation.impl;
|
||||||
|
|
||||||
|
import dev.resent.ui.animation.Animation;
|
||||||
|
import dev.resent.ui.animation.Direction;
|
||||||
|
|
||||||
|
public class EaseInOutQuad extends Animation {
|
||||||
|
|
||||||
|
public EaseInOutQuad(int ms, double endPoint) {
|
||||||
|
super(ms, endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public EaseInOutQuad(int ms, double endPoint, Direction direction) {
|
||||||
|
super(ms, endPoint, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected double getEquation(double x1) {
|
||||||
|
double x = x1 / duration;
|
||||||
|
return x < 0.5 ? 2 * Math.pow(x, 2) : 1 - Math.pow(-2 * x + 2, 2) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
package dev.resent.ui.animation.impl;
|
||||||
|
|
||||||
|
import dev.resent.ui.animation.Animation;
|
||||||
|
import dev.resent.ui.animation.Direction;
|
||||||
|
|
||||||
|
public class ElasticAnimation extends Animation {
|
||||||
|
|
||||||
|
float easeAmount;
|
||||||
|
float smooth;
|
||||||
|
boolean reallyElastic;
|
||||||
|
|
||||||
|
public ElasticAnimation(int ms, double endPoint, float elasticity, float smooth, boolean moreElasticity) {
|
||||||
|
super(ms, endPoint);
|
||||||
|
this.easeAmount = elasticity;
|
||||||
|
this.smooth = smooth;
|
||||||
|
this.reallyElastic = moreElasticity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ElasticAnimation(int ms, double endPoint, float elasticity, float smooth, boolean moreElasticity, Direction direction) {
|
||||||
|
super(ms, endPoint, direction);
|
||||||
|
this.easeAmount = elasticity;
|
||||||
|
this.smooth = smooth;
|
||||||
|
this.reallyElastic = moreElasticity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected double getEquation(double x) {
|
||||||
|
double x1 = Math.pow(x / duration, smooth);
|
||||||
|
double elasticity = easeAmount * .1f;
|
||||||
|
return Math.pow(2, -10 * (reallyElastic ? Math.sqrt(x1) : x1)) * Math.sin((x1 - (elasticity / 4)) * ((2 * Math.PI) / elasticity)) + 1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package dev.resent.ui.animation.impl;
|
||||||
|
|
||||||
|
import dev.resent.ui.animation.Animation;
|
||||||
|
import dev.resent.ui.animation.Direction;
|
||||||
|
|
||||||
|
public class SmoothStepAnimation extends Animation {
|
||||||
|
|
||||||
|
public SmoothStepAnimation(int ms, double endPoint) {
|
||||||
|
super(ms, endPoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SmoothStepAnimation(int ms, double endPoint, Direction direction) {
|
||||||
|
super(ms, endPoint, direction);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected double getEquation(double x) {
|
||||||
|
double x1 = x / (double) duration; //Used to force input to range from 0 - 1
|
||||||
|
return -2 * Math.pow(x1, 3) + (3 * Math.pow(x1, 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user