调整弹药显示动画时长
This commit is contained in:
parent
f28d5525bf
commit
69c263fe39
2 changed files with 49 additions and 23 deletions
|
@ -212,10 +212,10 @@ public class AmmoBarOverlay {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final AnimationTimer ammoInfoTimer = new AnimationTimer(1500)
|
private static final AnimationTimer ammoInfoTimer = new AnimationTimer(500, 2000)
|
||||||
.forwardAnimation(AnimationCurves.EASE_OUT_EXPO)
|
.forwardAnimation(AnimationCurves.EASE_OUT_EXPO)
|
||||||
.backwardAnimation(AnimationCurves.EASE_IN_EXPO);
|
.backwardAnimation(AnimationCurves.EASE_IN_EXPO);
|
||||||
private static final AnimationTimer ammoBoxTimer = new AnimationTimer(1500)
|
private static final AnimationTimer ammoBoxTimer = new AnimationTimer(500)
|
||||||
.forwardAnimation(AnimationCurves.EASE_OUT_EXPO)
|
.forwardAnimation(AnimationCurves.EASE_OUT_EXPO)
|
||||||
.backwardAnimation(AnimationCurves.EASE_IN_EXPO);
|
.backwardAnimation(AnimationCurves.EASE_IN_EXPO);
|
||||||
|
|
||||||
|
|
|
@ -9,9 +9,10 @@ import java.util.function.Function;
|
||||||
*/
|
*/
|
||||||
public class AnimationTimer {
|
public class AnimationTimer {
|
||||||
|
|
||||||
private final long duration;
|
private final long forwardDuration;
|
||||||
|
private final long backwardDuration;
|
||||||
private long startTime;
|
private long startTime;
|
||||||
private boolean reversed;
|
private boolean isForward = true;
|
||||||
private boolean initialized;
|
private boolean initialized;
|
||||||
|
|
||||||
// 未初始化状态下,动画进度是否从0开始
|
// 未初始化状态下,动画进度是否从0开始
|
||||||
|
@ -26,7 +27,19 @@ public class AnimationTimer {
|
||||||
* @param duration 动画持续时间,单位为毫秒
|
* @param duration 动画持续时间,单位为毫秒
|
||||||
*/
|
*/
|
||||||
public AnimationTimer(long duration) {
|
public AnimationTimer(long duration) {
|
||||||
this.duration = duration;
|
this.forwardDuration = duration;
|
||||||
|
this.backwardDuration = duration;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建一个动画计时器
|
||||||
|
*
|
||||||
|
* @param forwardDuration 正向动画持续时间,单位为毫秒
|
||||||
|
* @param backwardDuration 反向动画持续时间,单位为毫秒
|
||||||
|
*/
|
||||||
|
public AnimationTimer(long forwardDuration, long backwardDuration) {
|
||||||
|
this.forwardDuration = forwardDuration;
|
||||||
|
this.backwardDuration = backwardDuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,10 +95,23 @@ public class AnimationTimer {
|
||||||
* @param backwardAnimationCurve 反向动画曲线函数
|
* @param backwardAnimationCurve 反向动画曲线函数
|
||||||
*/
|
*/
|
||||||
public static AnimationTimer[] createTimers(int size, long duration, Function<Double, Double> forwardAnimationCurve, Function<Double, Double> backwardAnimationCurve) {
|
public static AnimationTimer[] createTimers(int size, long duration, Function<Double, Double> forwardAnimationCurve, Function<Double, Double> backwardAnimationCurve) {
|
||||||
|
return createTimers(size, duration, duration, forwardAnimationCurve, backwardAnimationCurve);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建多个动画计时器
|
||||||
|
*
|
||||||
|
* @param size 计时器数量
|
||||||
|
* @param forwardDuration 正向动画持续时间,单位为毫秒
|
||||||
|
* @param backwardDuration 反向动画持续时间,单位为毫秒
|
||||||
|
* @param forwardAnimationCurve 正向动画曲线函数
|
||||||
|
* @param backwardAnimationCurve 反向动画曲线函数
|
||||||
|
*/
|
||||||
|
public static AnimationTimer[] createTimers(int size, long forwardDuration, long backwardDuration, Function<Double, Double> forwardAnimationCurve, Function<Double, Double> backwardAnimationCurve) {
|
||||||
var timers = new AnimationTimer[size];
|
var timers = new AnimationTimer[size];
|
||||||
var currentTime = System.currentTimeMillis();
|
var currentTime = System.currentTimeMillis();
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
timers[i] = new AnimationTimer(duration).forwardAnimation(forwardAnimationCurve).backwardAnimation(backwardAnimationCurve);
|
timers[i] = new AnimationTimer(forwardDuration, backwardDuration).forwardAnimation(forwardAnimationCurve).backwardAnimation(backwardAnimationCurve);
|
||||||
timers[i].endBackward(currentTime);
|
timers[i].endBackward(currentTime);
|
||||||
}
|
}
|
||||||
return timers;
|
return timers;
|
||||||
|
@ -95,7 +121,7 @@ public class AnimationTimer {
|
||||||
* 当前计时方向是否为正向
|
* 当前计时方向是否为正向
|
||||||
*/
|
*/
|
||||||
public boolean isForward() {
|
public boolean isForward() {
|
||||||
return !reversed;
|
return isForward;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -104,20 +130,20 @@ public class AnimationTimer {
|
||||||
* @return 进度值,范围在0到1之间
|
* @return 进度值,范围在0到1之间
|
||||||
*/
|
*/
|
||||||
public float getProgress(long currentTime) {
|
public float getProgress(long currentTime) {
|
||||||
if (reversed) {
|
if (isForward) {
|
||||||
return 1 - backwardAnimationCurve.apply(Mth.clamp(1 - getElapsedTime(currentTime) / (double) duration, 0, 1)).floatValue();
|
return forwardAnimationCurve.apply(Mth.clamp(getElapsedTime(currentTime) / (double) forwardDuration, 0, 1)).floatValue();
|
||||||
} else {
|
} else {
|
||||||
return forwardAnimationCurve.apply(Mth.clamp(getElapsedTime(currentTime) / (double) duration, 0, 1)).floatValue();
|
return 1 - backwardAnimationCurve.apply(Mth.clamp(1 - getElapsedTime(currentTime) / (double) backwardDuration, 0, 1)).floatValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private long getElapsedTime(long currentTime) {
|
private long getElapsedTime(long currentTime) {
|
||||||
if (!initialized) return playFromStart ? 0 : duration;
|
if (!initialized) return playFromStart ? 0 : (isForward() ? forwardDuration : backwardDuration);
|
||||||
|
|
||||||
if (reversed) {
|
if (isForward) {
|
||||||
return Math.min(duration, Math.max(0, startTime - currentTime));
|
return Math.min(forwardDuration, currentTime - startTime);
|
||||||
} else {
|
} else {
|
||||||
return Math.min(duration, currentTime - startTime);
|
return Math.min(backwardDuration, Math.max(0, startTime - currentTime));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -125,7 +151,7 @@ public class AnimationTimer {
|
||||||
* 当前动画是否已经结束
|
* 当前动画是否已经结束
|
||||||
*/
|
*/
|
||||||
public boolean finished(long currentTime) {
|
public boolean finished(long currentTime) {
|
||||||
return getElapsedTime(currentTime) >= duration;
|
return getElapsedTime(currentTime) >= (isForward ? forwardDuration : backwardDuration);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -150,11 +176,11 @@ public class AnimationTimer {
|
||||||
public void forward(long currentTime) {
|
public void forward(long currentTime) {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
initialized = true;
|
initialized = true;
|
||||||
startTime = currentTime + (playFromStart ? 0 : duration);
|
startTime = currentTime + (playFromStart ? 0 : forwardDuration);
|
||||||
} else if (reversed) {
|
} else if (!isForward) {
|
||||||
startTime = currentTime - getElapsedTime(currentTime);
|
startTime = (long) (currentTime - ((double) getElapsedTime(currentTime) / backwardDuration * forwardDuration));
|
||||||
}
|
}
|
||||||
reversed = false;
|
isForward = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -179,11 +205,11 @@ public class AnimationTimer {
|
||||||
public void backward(long currentTime) {
|
public void backward(long currentTime) {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
initialized = true;
|
initialized = true;
|
||||||
startTime = currentTime + (playFromStart ? duration : 0);
|
startTime = currentTime + (playFromStart ? backwardDuration : 0);
|
||||||
} else if (!reversed) {
|
} else if (isForward) {
|
||||||
startTime = currentTime + getElapsedTime(currentTime);
|
startTime = (long) (currentTime + ((double) getElapsedTime(currentTime) / forwardDuration * backwardDuration));
|
||||||
}
|
}
|
||||||
reversed = true;
|
isForward = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue