From 509ba6dc2f76618a56f32b6cbc6991ae15313f3d Mon Sep 17 00:00:00 2001 From: ElitTerrator Date: Sun, 30 Aug 2026 20:54:50 +0200 Subject: [PATCH] Smooth Interpolation added for Necromancer Animator Keyframe --- .../animation/keyframe/Interpolation.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/common/src/main/java/foundry/veil/api/client/necromancer/animation/keyframe/Interpolation.java b/common/src/main/java/foundry/veil/api/client/necromancer/animation/keyframe/Interpolation.java index d19e405a9..0bf440a98 100644 --- a/common/src/main/java/foundry/veil/api/client/necromancer/animation/keyframe/Interpolation.java +++ b/common/src/main/java/foundry/veil/api/client/necromancer/animation/keyframe/Interpolation.java @@ -13,8 +13,24 @@ public enum Interpolation { LINEAR( (a, b, t) -> Mth.lerp(t, a, b), Quaternionfc::slerp + ), + EASE_IN( + (a, b, t) -> MathHelper.lerp(t * t, a, b), + (a, b, t, result) -> result.set(a).slerp(b, t * t) + ), + EASE_OUT( + (a, b, t) -> MathHelper.lerp(1F - (1F - t) * (1F - t), a, b), + (a, b, t, result) -> result.set(a).slerp(b, 1F - (1F - t) * (1F - t)) + ), + EASE_IN_OUT( + (a, b, t) -> MathHelper.lerp(easeInOutT(t), a, b), + (a, b, t, result) -> result.set(a).slerp(b, easeInOutT(t)) ); + private static float easeInOutT(float t) { + return t < 0.5F ? 2F * t * t : 1F - (float) Math.pow(-2F * t + 2F, 2) / 2F; + } + private final FloatInterpolator fInterpolator; private final QuaternionInterpolator qInterpolator;