diff --git a/src/main/java/org/saturnclient/saturnclient/config/AnimationConfig.java b/src/main/java/org/saturnclient/saturnclient/config/AnimationConfig.java index 1afd7e4..22173a1 100644 --- a/src/main/java/org/saturnclient/saturnclient/config/AnimationConfig.java +++ b/src/main/java/org/saturnclient/saturnclient/config/AnimationConfig.java @@ -6,9 +6,6 @@ import org.saturnclient.saturnclient.config.manager.Property; public class AnimationConfig { public static ConfigManager config; - // Animation curve - public static final Property animationCurve = Property.select(1, "Ease In Out Cubic", "Ease Out Cubic", "Ease In Out Back"); - // Logo duration public static final Property logoDuration = Property.integer(700); @@ -23,8 +20,6 @@ public class AnimationConfig { public static void init(ConfigManager parent) { config = new ConfigManager(parent, "Animations"); - - config.property("Animation Curve", animationCurve); config.property("Logo Duration", logoDuration); mainMenu.init("Main Menu"); @@ -35,10 +30,12 @@ public class AnimationConfig { // Animation properties public final Property duration; public final Property stagger; + public final Property curve; public AnimationConfig(boolean enabled, int delay, int stagger) { this.duration = Property.integer(delay); this.stagger = Property.integer(stagger); + this.curve = Property.select(1, "Ease In Out Cubic", "Ease Out Cubic", "Ease In Out Back"); } public void init(String name) { diff --git a/src/main/java/org/saturnclient/ui2/Element.java b/src/main/java/org/saturnclient/ui2/Element.java index 954d839..49e8a16 100644 --- a/src/main/java/org/saturnclient/ui2/Element.java +++ b/src/main/java/org/saturnclient/ui2/Element.java @@ -1,10 +1,6 @@ package org.saturnclient.ui2; -import java.util.function.Function; - -import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.anim.Animation; -import org.saturnclient.ui2.anim.Curve; public class Element { public int x; @@ -15,7 +11,6 @@ public class Element { public boolean focused; public Animation animation; public float scale = 1.0f; - public Function curve = Curve::easeInOutCubic; public Integer duration = null; // Element duration, will fade out if not null public void render(RenderScope renderScope, ElementContext ctx) { @@ -44,7 +39,7 @@ public class Element { public void playAnimationFrame(long elapsed) { if (this.animation != null && elapsed >= this.animation.delay) { - this.animation.tick(this.curve + this.animation.tick(this.animation.curve .apply(Math.min(1.0, (double) (elapsed - this.animation.delay) / this.animation.duration)), this); } } @@ -84,22 +79,6 @@ public class Element { public Element animation(Animation animation) { this.animation = animation; - switch (AnimationConfig.animationCurve.value) { - case 0: - this.curve = Curve::easeInOutCubic; - case 1: - this.curve = Curve::easeOutCubic; - case 2: - this.curve = Curve::easeInOutBack; - default: - break; - } - return this; - } - - public Element animation(Animation animation, Function curve) { - this.animation = animation; - this.curve = curve; return this; } diff --git a/src/main/java/org/saturnclient/ui2/anim/Animation.java b/src/main/java/org/saturnclient/ui2/anim/Animation.java index 5fa328b..142ff78 100644 --- a/src/main/java/org/saturnclient/ui2/anim/Animation.java +++ b/src/main/java/org/saturnclient/ui2/anim/Animation.java @@ -1,10 +1,31 @@ package org.saturnclient.ui2.anim; +import java.util.function.Function; + +import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.Element; public abstract class Animation { public int duration; public int delay = 0; + public Function curve = Curve::easeInOutCubic; + + Animation(AnimationConfig config) { + this.duration = config.duration.value; + switch (config.curve.value) { + case 0: + this.curve = Curve::easeInOutCubic; + break; + case 1: + this.curve = Curve::easeOutCubic; + break; + case 2: + this.curve = Curve::easeInOutBack; + break; + default: + break; + } + } Animation(int duration) { this.duration = duration; diff --git a/src/main/java/org/saturnclient/ui2/anim/Fade.java b/src/main/java/org/saturnclient/ui2/anim/Fade.java index db75ae6..68a0329 100644 --- a/src/main/java/org/saturnclient/ui2/anim/Fade.java +++ b/src/main/java/org/saturnclient/ui2/anim/Fade.java @@ -1,5 +1,6 @@ package org.saturnclient.ui2.anim; +import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.Element; public class Fade extends Animation { @@ -9,6 +10,10 @@ public class Fade extends Animation { super(duration); } + public Fade(AnimationConfig config) { + super(config); + } + @Override public void tick(double progress, Element element) { element.opacity = Math.max(0.1f, targetOpacity * (float) progress); diff --git a/src/main/java/org/saturnclient/ui2/anim/FadeOut.java b/src/main/java/org/saturnclient/ui2/anim/FadeOut.java index 77d93f6..76f39c9 100644 --- a/src/main/java/org/saturnclient/ui2/anim/FadeOut.java +++ b/src/main/java/org/saturnclient/ui2/anim/FadeOut.java @@ -1,5 +1,6 @@ package org.saturnclient.ui2.anim; +import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.Element; public class FadeOut extends Animation { @@ -9,6 +10,10 @@ public class FadeOut extends Animation { super(duration); } + public FadeOut(AnimationConfig config) { + super(config); + } + @Override public void tick(double progress, Element element) { element.opacity = targetOpacity - (float) progress; diff --git a/src/main/java/org/saturnclient/ui2/anim/SlideFade.java b/src/main/java/org/saturnclient/ui2/anim/SlideFade.java index c407cc0..2ede45b 100644 --- a/src/main/java/org/saturnclient/ui2/anim/SlideFade.java +++ b/src/main/java/org/saturnclient/ui2/anim/SlideFade.java @@ -1,5 +1,6 @@ package org.saturnclient.ui2.anim; +import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.Element; public class SlideFade extends Animation { @@ -12,6 +13,10 @@ public class SlideFade extends Animation { this.slideY = new SlideY(duration, offset); } + public SlideFade(AnimationConfig config) { + super(config); + } + @Override public void tick(double progress, Element element) { fade.delay = this.delay; diff --git a/src/main/java/org/saturnclient/ui2/anim/SlideX.java b/src/main/java/org/saturnclient/ui2/anim/SlideX.java index 58d5e8c..b759865 100644 --- a/src/main/java/org/saturnclient/ui2/anim/SlideX.java +++ b/src/main/java/org/saturnclient/ui2/anim/SlideX.java @@ -1,11 +1,20 @@ package org.saturnclient.ui2.anim; +import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.Element; public class SlideX extends Animation { int offset = 20; - int maxOffset = 20; - int elementX; + double startX; + + public SlideX(AnimationConfig config) { + super(config); + } + + public SlideX(AnimationConfig config, int offset) { + super(config); + this.offset = offset; + } public SlideX(int duration) { super(duration); @@ -14,23 +23,17 @@ public class SlideX extends Animation { public SlideX(int duration, int offset) { super(duration); this.offset = offset; - this.maxOffset = offset; - } - - public SlideX(int duration, int offset, int maxOffset) { - super(duration); - this.offset = offset; - this.maxOffset = maxOffset; // ✅ fixed - } - - @Override - public void tick(double progress, Element element) { - element.x = elementX + (int) (offset * progress); } @Override public void init(Element element) { - element.x -= offset; - elementX = element.x; + startX = element.x - offset; + element.x = (int) startX; + } + + @Override + public void tick(double progress, Element element) { + double currentX = startX + offset * progress; + element.x = (int) currentX; } } diff --git a/src/main/java/org/saturnclient/ui2/anim/SlideXAbsolute.java b/src/main/java/org/saturnclient/ui2/anim/SlideXAbsolute.java deleted file mode 100644 index 75a3121..0000000 --- a/src/main/java/org/saturnclient/ui2/anim/SlideXAbsolute.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.saturnclient.ui2.anim; - -import org.saturnclient.ui2.Element; - -public class SlideXAbsolute extends Animation { - int offset = 20; - int maxOffset = 20; - int elementX; - - public SlideXAbsolute(int duration) { - super(duration); - } - - public SlideXAbsolute(int duration, int offset) { - super(duration); - this.offset = offset; - this.maxOffset = offset; - } - - public SlideXAbsolute(int duration, int offset, int maxOffset) { - super(duration); - this.offset = offset; - this.maxOffset = maxOffset; - } - - @Override - public void tick(double progress, Element element) { - element.x = elementX + (int) (offset * progress); - } - - @Override - public void init(Element element) { - elementX = element.x; - } -} diff --git a/src/main/java/org/saturnclient/ui2/anim/SlideY.java b/src/main/java/org/saturnclient/ui2/anim/SlideY.java index 5ca5a97..5c4ce09 100644 --- a/src/main/java/org/saturnclient/ui2/anim/SlideY.java +++ b/src/main/java/org/saturnclient/ui2/anim/SlideY.java @@ -1,28 +1,28 @@ package org.saturnclient.ui2.anim; +import org.saturnclient.saturnclient.config.AnimationConfig; import org.saturnclient.ui2.Element; public class SlideY extends Animation { int offset = 20; - int maxOffset = 20; double startY; + public SlideY(AnimationConfig config) { + super(config); + } + + public SlideY(AnimationConfig config, int offset) { + super(config); + this.offset = offset; + } + public SlideY(int duration) { super(duration); } public SlideY(int duration, int offset) { super(duration); - this.offset = offset; - this.maxOffset = offset; - } - - public SlideY(int duration, int offset, int maxOffset) { - super(duration); - - this.offset = offset; - this.maxOffset = offset; } @Override