From 80421d1cbae06011b854316b4a8fe62e0bfef71f Mon Sep 17 00:00:00 2001 From: Mathieu Moran Date: Wed, 16 Sep 2026 12:39:22 -0400 Subject: [PATCH] Align menu animation to JPCSP (linear tween); capture crashes to log JPCSP's AbstractAnimAction interpolates linearly and ignores accelMode, so match that instead of adding easing. Log any uncaught exception from all threads (video/audio/animator/timer/FX) to /tmp/umd-crash.log to diagnose the Scenes/Languages crash. --- core/src/main/java/dev/quoije/umd/rco/anim/Tween.java | 7 ++----- ui/src/main/java/dev/quoije/umd/ui/PlayerApp.java | 9 +++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) 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); } }