@@ -40,7 +40,7 @@ public final class AnimationStateHandler<T extends Timed> {
4040 @ Getter
4141 private int delay ;
4242 private volatile TreeIterator currentIterator = null ;
43- private volatile KeyframeData beforeKeyframe = null , afterKeyframe = null ;
43+ private volatile T beforeKeyframe = null , afterKeyframe = null ;
4444
4545 /**
4646 * Checks this keyframe has been finished
@@ -55,15 +55,15 @@ public boolean keyframeFinished() {
5555 * @return before keyframe
5656 */
5757 public T beforeKeyframe () {
58- return value ( beforeKeyframe ) ;
58+ return beforeKeyframe ;
5959 }
6060
6161 /**
6262 * Gets after keyframe
6363 * @return after keyframe
6464 */
6565 public T afterKeyframe () {
66- return value ( afterKeyframe ) ;
66+ return afterKeyframe ;
6767 }
6868
6969 /**
@@ -73,7 +73,7 @@ public T afterKeyframe() {
7373 */
7474 @ NotNull
7575 public T beforeKeyframe (@ NotNull T defaultValue ) {
76- var value = value ( beforeKeyframe ) ;
76+ var value = beforeKeyframe ;
7777 return value != null ? value : defaultValue ;
7878 }
7979
@@ -84,7 +84,7 @@ public T beforeKeyframe(@NotNull T defaultValue) {
8484 */
8585 @ NotNull
8686 public T afterKeyframe (@ NotNull T defaultValue ) {
87- var value = value ( afterKeyframe ) ;
87+ var value = afterKeyframe ;
8888 return value != null ? value : defaultValue ;
8989 }
9090
@@ -171,26 +171,16 @@ private boolean updateKeyframe(@NotNull Iterator<TreeIterator> iterator, @NotNul
171171 }
172172 }
173173
174- private boolean setAfterKeyframe (@ Nullable KeyframeData next ) {
175- if (equals ( afterKeyframe , next ) ) return false ;
174+ private boolean setAfterKeyframe (@ Nullable T next ) {
175+ if (afterKeyframe == next ) return false ;
176176 setConsumer .accept (
177- value ( beforeKeyframe = afterKeyframe ) ,
178- value ( afterKeyframe = next )
177+ beforeKeyframe = afterKeyframe ,
178+ afterKeyframe = next
179179 );
180180 delay = Math .round (frame ());
181181 return true ;
182182 }
183183
184- private boolean equals (@ Nullable KeyframeData from , @ Nullable KeyframeData to ) {
185- if (from == null && to == null ) return true ;
186- if (from == null || to == null ) return false ;
187- return from .value == to .value && from .realTime == to .realTime ;
188- }
189-
190- private @ Nullable T value (@ Nullable KeyframeData data ) {
191- return data == null ? null : data .value ;
192- }
193-
194184 /**
195185 * Adds animation
196186 * @param name name
@@ -240,7 +230,7 @@ public boolean stopAnimation(@NotNull String name) {
240230 * @return ticking frame
241231 */
242232 public float frame () {
243- return afterKeyframe != null ? 20 * Tracker .MINECRAFT_TICK_MULTIPLIER * (afterKeyframe . realTime + MathUtil .FRAME_EPSILON ) : 0F ;
233+ return afterKeyframe != null ? 20 * Tracker .MINECRAFT_TICK_MULTIPLIER * (currentIterator . time + MathUtil .FRAME_EPSILON ) : 0F ;
244234 }
245235
246236 private class TreeIterator implements BooleanSupplier {
@@ -254,13 +244,15 @@ private class TreeIterator implements BooleanSupplier {
254244 private boolean started = false ;
255245 private boolean ended = false ;
256246
247+ private float time = 0 ;
248+
257249 public TreeIterator (String name , AnimationIterator <T > iterator , AnimationModifier modifier , Runnable removeTask ) {
258250 animation = new RunningAnimation (name , iterator .type ());
259251 this .iterator = iterator ;
260252 this .modifier = modifier ;
261253 this .removeTask = removeTask ;
262254
263- previous = afterKeyframe != null ? afterKeyframe . value : initialValue ;
255+ previous = afterKeyframe != null ? afterKeyframe : initialValue ;
264256 }
265257
266258 @ Override
@@ -272,28 +264,25 @@ public boolean hasNext() {
272264 return iterator .hasNext () || (modifier .end () > 0 && !ended );
273265 }
274266
275- public @ NotNull KeyframeData next () {
267+ public @ NotNull T next () {
276268 if (!started ) {
277269 started = true ;
278- return new KeyframeData (iterator .next (), (float ) modifier .start () / 20 );
270+ time = (float ) modifier .start () / 20 ;
271+ return iterator .next ();
279272 }
280273 if (!iterator .hasNext ()) {
281274 ended = true ;
282- return new KeyframeData (previous , (float ) modifier .end () / 20 );
275+ time = (float ) modifier .end () / 20 ;
276+ return previous ;
283277 }
284278 var nxt = iterator .next ();
285- return new KeyframeData (nxt , nxt .time () / modifier .speedValue ());
279+ time = nxt .time () / modifier .speedValue ();
280+ return nxt ;
286281 }
287282
288283 public void clear () {
289284 iterator .clear ();
290285 started = ended = !iterator .hasNext ();
291286 }
292287 }
293-
294- @ RequiredArgsConstructor
295- private class KeyframeData {
296- private final T value ;
297- private final float realTime ;
298- }
299288}
0 commit comments