Add layer field to animation | enable animation customization in runners

This commit is contained in:
2023-11-16 10:55:06 +01:00
parent ff59184d93
commit 82903463e3
6 changed files with 57 additions and 1 deletions

View File

@@ -25,4 +25,6 @@ public interface Animation extends Movable, Animated, Renderable, Updatable {
void finish(); void finish();
boolean finished(); boolean finished();
Layer getLayer();
} }

View File

@@ -289,6 +289,11 @@ public abstract class AnimationDelegate implements Animation {
return animation.getFuture(); return animation.getFuture();
} }
@Override
public Layer getLayer() {
return animation.getLayer();
}
@Override @Override
public void render(Screen screen, Camera camera, ShaderManager shaderManager) { public void render(Screen screen, Camera camera, ShaderManager shaderManager) {
animation.render(screen, camera, shaderManager); animation.render(screen, camera, shaderManager);

View File

@@ -36,6 +36,7 @@ public class BulletAnimationRunner implements AnimationRunner {
private Path<Animation> path; private Path<Animation> path;
private BiConsumer<Movable, Entity> onHit; private BiConsumer<Movable, Entity> onHit;
private BiConsumer<Movable, Animation> onMiss; private BiConsumer<Movable, Animation> onMiss;
private Consumer<Animation> customizer;
private float offsetX = 0; private float offsetX = 0;
private float offsetY = 0; private float offsetY = 0;
@@ -126,6 +127,11 @@ public class BulletAnimationRunner implements AnimationRunner {
return this; return this;
} }
public BulletAnimationRunner customize(@NonNull Consumer<Animation> customizer) {
this.customizer = customizer;
return this;
}
@Override @Override
public CompletableFuture<Void> run(Context context, Layer layer, Vector2fc origin) { public CompletableFuture<Void> run(Context context, Layer layer, Vector2fc origin) {
var animation = new BulletAnimation(context.createAnimation(animationUid), delay, direction, null, onHit, onMiss); var animation = new BulletAnimation(context.createAnimation(animationUid), delay, direction, null, onHit, onMiss);
@@ -142,6 +148,10 @@ public class BulletAnimationRunner implements AnimationRunner {
layer.pushAnimation(animation); layer.pushAnimation(animation);
if(customizer != null) {
customizer.accept(animation);
}
return animation.getFuture().thenApply(a -> null); return animation.getFuture().thenApply(a -> null);
} }
@@ -161,6 +171,10 @@ public class BulletAnimationRunner implements AnimationRunner {
layer.pushAnimation(animation); layer.pushAnimation(animation);
if(customizer != null) {
customizer.accept(animation);
}
return animation.getFuture().thenApply(a -> null); return animation.getFuture().thenApply(a -> null);
} }

View File

@@ -4,16 +4,17 @@ import com.bartlomiejpluta.base.api.animation.Animation;
import com.bartlomiejpluta.base.api.context.Context; import com.bartlomiejpluta.base.api.context.Context;
import com.bartlomiejpluta.base.api.map.layer.base.Layer; import com.bartlomiejpluta.base.api.map.layer.base.Layer;
import com.bartlomiejpluta.base.api.move.Movable; import com.bartlomiejpluta.base.api.move.Movable;
import lombok.NonNull;
import org.apache.commons.math3.distribution.NormalDistribution; import org.apache.commons.math3.distribution.NormalDistribution;
import org.apache.commons.math3.distribution.RealDistribution; import org.apache.commons.math3.distribution.RealDistribution;
import org.apache.commons.math3.distribution.UniformRealDistribution; import org.apache.commons.math3.distribution.UniformRealDistribution;
import org.joml.Vector2fc; import org.joml.Vector2fc;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;
import static java.lang.Math.max; import static java.lang.Math.max;
@@ -41,6 +42,8 @@ public class RandomAnimationsRunner implements AnimationRunner {
private float offsetX = 0; private float offsetX = 0;
private float offsetY = 0; private float offsetY = 0;
private BiConsumer<Integer, Animation> customizer;
public RandomAnimationsRunner(int count) { public RandomAnimationsRunner(int count) {
this.count = max(count, 0); this.count = max(count, 0);
} }
@@ -132,6 +135,11 @@ public class RandomAnimationsRunner implements AnimationRunner {
return this; return this;
} }
public RandomAnimationsRunner customize(@NonNull BiConsumer<Integer, Animation> customizer) {
this.customizer = customizer;
return this;
}
@Override @Override
public CompletableFuture<Void> run(Context context, Layer layer, Vector2fc origin) { public CompletableFuture<Void> run(Context context, Layer layer, Vector2fc origin) {
var futures = new CompletableFuture[count]; 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))); layer.pushAnimation(new DelayedAnimation(animation, (int) (delayDistribution != null ? delayDistribution.sample() : delay)));
if (customizer != null) {
customizer.accept(i, animation);
}
futures[i] = animation.getFuture(); futures[i] = animation.getFuture();
} }
@@ -181,6 +193,10 @@ public class RandomAnimationsRunner implements AnimationRunner {
layer.pushAnimation(new DelayedAnimation(animation, (int) (delayDistribution != null ? delayDistribution.sample() : delay))); layer.pushAnimation(new DelayedAnimation(animation, (int) (delayDistribution != null ? delayDistribution.sample() : delay)));
if (customizer != null) {
customizer.accept(i, animation);
}
futures[i] = animation.getFuture(); futures[i] = animation.getFuture();
} }

View File

@@ -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.map.layer.base.Layer;
import com.bartlomiejpluta.base.api.move.Movable; import com.bartlomiejpluta.base.api.move.Movable;
import com.bartlomiejpluta.base.util.path.Path; import com.bartlomiejpluta.base.util.path.Path;
import lombok.NonNull;
import org.joml.Vector2fc; import org.joml.Vector2fc;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.function.Consumer;
public class SimpleAnimationRunner implements AnimationRunner { public class SimpleAnimationRunner implements AnimationRunner {
private final String animationUid; private final String animationUid;
@@ -24,6 +26,7 @@ public class SimpleAnimationRunner implements AnimationRunner {
private boolean finishOnPathFail; private boolean finishOnPathFail;
private float offsetX = 0; private float offsetX = 0;
private float offsetY = 0; private float offsetY = 0;
private Consumer<Animation> customizer;
public SimpleAnimationRunner(String animationUid) { public SimpleAnimationRunner(String animationUid) {
this.animationUid = animationUid; this.animationUid = animationUid;
@@ -82,6 +85,11 @@ public class SimpleAnimationRunner implements AnimationRunner {
return this; return this;
} }
public SimpleAnimationRunner customize(@NonNull Consumer<Animation> customizer) {
this.customizer = customizer;
return this;
}
@Override @Override
public CompletableFuture<Void> run(Context context, Layer layer, Vector2fc origin) { public CompletableFuture<Void> run(Context context, Layer layer, Vector2fc origin) {
var animation = new DelayedAnimation(context.createAnimation(animationUid), delay); var animation = new DelayedAnimation(context.createAnimation(animationUid), delay);
@@ -99,6 +107,11 @@ public class SimpleAnimationRunner implements AnimationRunner {
} }
layer.pushAnimation(animation); layer.pushAnimation(animation);
if (customizer != null) {
customizer.accept(animation);
}
return animation.getFuture().thenApply(a -> null); return animation.getFuture().thenApply(a -> null);
} }
@@ -120,6 +133,10 @@ public class SimpleAnimationRunner implements AnimationRunner {
layer.pushAnimation(animation); layer.pushAnimation(animation);
if (customizer != null) {
customizer.accept(animation);
}
return animation.getFuture().thenApply(a -> null); return animation.getFuture().thenApply(a -> null);
} }
} }

View File

@@ -43,6 +43,8 @@ public class DefaultAnimation extends MovableSprite implements Animation {
private PathExecutor<Animation> pathExecutor = new PathExecutor<>(this); private PathExecutor<Animation> pathExecutor = new PathExecutor<>(this);
private boolean finishOnEnd; private boolean finishOnEnd;
private boolean finishOnFail; private boolean finishOnFail;
@Getter
private Layer layer; private Layer layer;
private boolean isObjectLayer = false; private boolean isObjectLayer = false;