diff --git a/src/api b/src/api index aefae8ace..801d62c06 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit aefae8ace3555442da7debff5b95cf410fa057f7 +Subproject commit 801d62c0607f301759b627f251e93a5fc6de9d67 diff --git a/src/main/java/noppes/npcs/controllers/data/Animation.java b/src/main/java/noppes/npcs/controllers/data/Animation.java index 89081467b..fa290975c 100644 --- a/src/main/java/noppes/npcs/controllers/data/Animation.java +++ b/src/main/java/noppes/npcs/controllers/data/Animation.java @@ -39,9 +39,9 @@ public class Animation implements IAnimation { protected final Map dataStore = new HashMap<>(); - public Consumer onAnimationStart; - public BiConsumer onAnimationFrame; - public Consumer onAnimationEnd; + public Consumer onAnimationStart; + public BiConsumer onAnimationFrame; + public Consumer onAnimationEnd; public Animation() { } @@ -318,17 +318,20 @@ public class Animation implements IAnimation { } } - public IAnimation onStart(Consumer task) { + @Override + public IAnimation onStart(Consumer task) { this.onAnimationStart = task; return this; } - - public IAnimation onFrame(BiConsumer task) { + + @Override + public IAnimation onFrame(BiConsumer task) { this.onAnimationFrame = task; return this; } - - public IAnimation onEnd(Consumer task) { + + @Override + public IAnimation onEnd(Consumer task) { this.onAnimationEnd = task; return this; } @@ -350,6 +353,22 @@ public class Animation implements IAnimation { this.onAnimationEnd.accept(this); } } + + /** + * Only called on setAnimation, to transfer tasks from + * this global instance stored in AnimationController + * to the new local instance on entity's AnimationData, + * and clear them from the global instance. + */ + public void takeTasksFrom(Animation animation) { + this.onAnimationStart = animation.onAnimationStart; + this.onAnimationFrame = animation.onAnimationFrame; + this.onAnimationEnd = animation.onAnimationEnd; + + animation.onAnimationEnd = null; + animation.onAnimationFrame = null; + animation.onAnimationStart = null; + } } diff --git a/src/main/java/noppes/npcs/controllers/data/AnimationData.java b/src/main/java/noppes/npcs/controllers/data/AnimationData.java index ca1e25900..ea5da6a84 100644 --- a/src/main/java/noppes/npcs/controllers/data/AnimationData.java +++ b/src/main/java/noppes/npcs/controllers/data/AnimationData.java @@ -272,6 +272,7 @@ public class AnimationData implements IAnimationData { newAnim.currentFrame = 0; newAnim.currentFrameTime = 0; newAnim.parent = this; + newAnim.takeTasksFrom((Animation) animation); }