From 82903463e3572913a003d05ea426dc0fc3397e80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Thu, 16 Nov 2023 10:55:06 +0100 Subject: [PATCH] Add layer field to animation | enable animation customization in runners --- .../base/api/animation/Animation.java | 2 ++ .../base/lib/animation/AnimationDelegate.java | 5 +++++ .../lib/animation/BulletAnimationRunner.java | 14 ++++++++++++++ .../lib/animation/RandomAnimationsRunner.java | 18 +++++++++++++++++- .../lib/animation/SimpleAnimationRunner.java | 17 +++++++++++++++++ .../animation/model/DefaultAnimation.java | 2 ++ 6 files changed, 57 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/com/bartlomiejpluta/base/api/animation/Animation.java b/api/src/main/java/com/bartlomiejpluta/base/api/animation/Animation.java index 27eb0291..558c2ff4 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/api/animation/Animation.java +++ b/api/src/main/java/com/bartlomiejpluta/base/api/animation/Animation.java @@ -25,4 +25,6 @@ public interface Animation extends Movable, Animated, Renderable, Updatable { void finish(); boolean finished(); + + Layer getLayer(); } diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/AnimationDelegate.java b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/AnimationDelegate.java index cb433677..b351a4e3 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/AnimationDelegate.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/AnimationDelegate.java @@ -289,6 +289,11 @@ public abstract class AnimationDelegate implements Animation { return animation.getFuture(); } + @Override + public Layer getLayer() { + return animation.getLayer(); + } + @Override public void render(Screen screen, Camera camera, ShaderManager shaderManager) { animation.render(screen, camera, shaderManager); diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/BulletAnimationRunner.java b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/BulletAnimationRunner.java index 58c3363b..580ff6cf 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/BulletAnimationRunner.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/BulletAnimationRunner.java @@ -36,6 +36,7 @@ public class BulletAnimationRunner implements AnimationRunner { private Path path; private BiConsumer onHit; private BiConsumer onMiss; + private Consumer customizer; private float offsetX = 0; private float offsetY = 0; @@ -126,6 +127,11 @@ public class BulletAnimationRunner implements AnimationRunner { return this; } + public BulletAnimationRunner customize(@NonNull Consumer customizer) { + this.customizer = customizer; + return this; + } + @Override public CompletableFuture run(Context context, Layer layer, Vector2fc origin) { var animation = new BulletAnimation(context.createAnimation(animationUid), delay, direction, null, onHit, onMiss); @@ -142,6 +148,10 @@ public class BulletAnimationRunner implements AnimationRunner { layer.pushAnimation(animation); + if(customizer != null) { + customizer.accept(animation); + } + return animation.getFuture().thenApply(a -> null); } @@ -161,6 +171,10 @@ public class BulletAnimationRunner implements AnimationRunner { layer.pushAnimation(animation); + if(customizer != null) { + customizer.accept(animation); + } + return animation.getFuture().thenApply(a -> null); } diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/RandomAnimationsRunner.java b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/RandomAnimationsRunner.java index f5b38107..d8c979d8 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/RandomAnimationsRunner.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/RandomAnimationsRunner.java @@ -4,16 +4,17 @@ import com.bartlomiejpluta.base.api.animation.Animation; import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.map.layer.base.Layer; import com.bartlomiejpluta.base.api.move.Movable; +import lombok.NonNull; import org.apache.commons.math3.distribution.NormalDistribution; import org.apache.commons.math3.distribution.RealDistribution; import org.apache.commons.math3.distribution.UniformRealDistribution; import org.joml.Vector2fc; import java.util.ArrayList; -import java.util.LinkedList; import java.util.List; import java.util.Random; import java.util.concurrent.CompletableFuture; +import java.util.function.BiConsumer; import static java.lang.Math.max; @@ -41,6 +42,8 @@ public class RandomAnimationsRunner implements AnimationRunner { private float offsetX = 0; private float offsetY = 0; + private BiConsumer customizer; + public RandomAnimationsRunner(int count) { this.count = max(count, 0); } @@ -132,6 +135,11 @@ public class RandomAnimationsRunner implements AnimationRunner { return this; } + public RandomAnimationsRunner customize(@NonNull BiConsumer customizer) { + this.customizer = customizer; + return this; + } + @Override public CompletableFuture run(Context context, Layer layer, Vector2fc origin) { var futures = new CompletableFuture[count]; @@ -152,6 +160,10 @@ public class RandomAnimationsRunner implements AnimationRunner { layer.pushAnimation(new DelayedAnimation(animation, (int) (delayDistribution != null ? delayDistribution.sample() : delay))); + if (customizer != null) { + customizer.accept(i, animation); + } + futures[i] = animation.getFuture(); } @@ -181,6 +193,10 @@ public class RandomAnimationsRunner implements AnimationRunner { layer.pushAnimation(new DelayedAnimation(animation, (int) (delayDistribution != null ? delayDistribution.sample() : delay))); + if (customizer != null) { + customizer.accept(i, animation); + } + futures[i] = animation.getFuture(); } diff --git a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/SimpleAnimationRunner.java b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/SimpleAnimationRunner.java index 4fdce7fc..1740e6c2 100644 --- a/api/src/main/java/com/bartlomiejpluta/base/lib/animation/SimpleAnimationRunner.java +++ b/api/src/main/java/com/bartlomiejpluta/base/lib/animation/SimpleAnimationRunner.java @@ -5,9 +5,11 @@ import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.map.layer.base.Layer; import com.bartlomiejpluta.base.api.move.Movable; import com.bartlomiejpluta.base.util.path.Path; +import lombok.NonNull; import org.joml.Vector2fc; import java.util.concurrent.CompletableFuture; +import java.util.function.Consumer; public class SimpleAnimationRunner implements AnimationRunner { private final String animationUid; @@ -24,6 +26,7 @@ public class SimpleAnimationRunner implements AnimationRunner { private boolean finishOnPathFail; private float offsetX = 0; private float offsetY = 0; + private Consumer customizer; public SimpleAnimationRunner(String animationUid) { this.animationUid = animationUid; @@ -82,6 +85,11 @@ public class SimpleAnimationRunner implements AnimationRunner { return this; } + public SimpleAnimationRunner customize(@NonNull Consumer customizer) { + this.customizer = customizer; + return this; + } + @Override public CompletableFuture run(Context context, Layer layer, Vector2fc origin) { var animation = new DelayedAnimation(context.createAnimation(animationUid), delay); @@ -99,6 +107,11 @@ public class SimpleAnimationRunner implements AnimationRunner { } layer.pushAnimation(animation); + + if (customizer != null) { + customizer.accept(animation); + } + return animation.getFuture().thenApply(a -> null); } @@ -120,6 +133,10 @@ public class SimpleAnimationRunner implements AnimationRunner { layer.pushAnimation(animation); + if (customizer != null) { + customizer.accept(animation); + } + return animation.getFuture().thenApply(a -> null); } } diff --git a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java index 9b4d7777..aacc6e8f 100644 --- a/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java +++ b/engine/src/main/java/com/bartlomiejpluta/base/engine/world/animation/model/DefaultAnimation.java @@ -43,6 +43,8 @@ public class DefaultAnimation extends MovableSprite implements Animation { private PathExecutor pathExecutor = new PathExecutor<>(this); private boolean finishOnEnd; private boolean finishOnFail; + + @Getter private Layer layer; private boolean isObjectLayer = false;