diff --git a/core/src/main/java/dev/quoije/umd/rco/anim/Tween.java b/core/src/main/java/dev/quoije/umd/rco/anim/Tween.java index 0ccba78..d8b08a6 100644 --- a/core/src/main/java/dev/quoije/umd/rco/anim/Tween.java +++ b/core/src/main/java/dev/quoije/umd/rco/anim/Tween.java @@ -49,10 +49,7 @@ public final class Tween { } private static float ease(float p, int accelMode) { - return switch (accelMode) { - case EASE_IN -> p * p; - case EASE_OUT -> 1f - (1f - p) * (1f - p); - default -> p; - }; + // JPCSP interpolates linearly and ignores accelMode (see AbstractAnimAction). + return p; } } diff --git a/ui/src/main/java/dev/quoije/umd/ui/PlayerApp.java b/ui/src/main/java/dev/quoije/umd/ui/PlayerApp.java index 3a25922..19539da 100644 --- a/ui/src/main/java/dev/quoije/umd/ui/PlayerApp.java +++ b/ui/src/main/java/dev/quoije/umd/ui/PlayerApp.java @@ -492,6 +492,15 @@ public final class PlayerApp extends Application { } public static void main(String[] args) { + // Capture any uncaught exception (video/audio/animator/timer/FX threads) to a file. + Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { + try (java.io.PrintWriter writer = new java.io.PrintWriter(new java.io.FileWriter("/tmp/umd-crash.log", true))) { + writer.println("=== Uncaught in thread " + thread.getName() + " ==="); + throwable.printStackTrace(writer); + } catch (Exception ignored) { + } + throwable.printStackTrace(); + }); launch(args); } }