Add debug key M to open the main menu directly

M invokes mm_activate immediately, bypassing the intro chain, to isolate
menu rendering from the state machine.
This commit is contained in:
2026-09-16 08:22:33 -04:00
parent 62d61bad45
commit 539b8e295b
@@ -8,6 +8,8 @@ import dev.quoije.umd.player.PlaybackEngine;
import dev.quoije.umd.playlist.Playlist; import dev.quoije.umd.playlist.Playlist;
import dev.quoije.umd.rco.RcoFile; import dev.quoije.umd.rco.RcoFile;
import dev.quoije.umd.rco.vsmx.Vsmx; import dev.quoije.umd.rco.vsmx.Vsmx;
import dev.quoije.umd.rco.vsmx.interpreter.VsmxBaseObject;
import dev.quoije.umd.rco.vsmx.interpreter.VsmxFunction;
import dev.quoije.umd.rco.vsmx.interpreter.VsmxInterpreter; import dev.quoije.umd.rco.vsmx.interpreter.VsmxInterpreter;
import dev.quoije.umd.rco.vsmx.interpreter.VsmxNativeObject; import dev.quoije.umd.rco.vsmx.interpreter.VsmxNativeObject;
import dev.quoije.umd.rco.vsmx.objects.Controller; import dev.quoije.umd.rco.vsmx.objects.Controller;
@@ -66,6 +68,9 @@ public final class PlayerApp extends Application {
private int videoBufferIndex = 0; private int videoBufferIndex = 0;
private volatile boolean skipRequested = false; private volatile boolean skipRequested = false;
private volatile VsmxInterpreter menuInterpreter;
private volatile VsmxBaseObject mmActivate;
@Override @Override
public void start(Stage stage) { public void start(Stage stage) {
// Gradle's --args splits on whitespace; rejoin so paths with spaces work. // Gradle's --args splits on whitespace; rejoin so paths with spaces work.
@@ -119,6 +124,10 @@ public final class PlayerApp extends Application {
skipRequested = true; skipRequested = true;
return; return;
} }
case M -> {
openMenuDirectly();
return;
}
default -> { } default -> { }
} }
@@ -136,6 +145,15 @@ public final class PlayerApp extends Application {
} }
} }
private void openMenuDirectly() {
VsmxBaseObject fn = mmActivate;
VsmxInterpreter interpreter = menuInterpreter;
if (fn instanceof VsmxFunction function && interpreter != null) {
System.err.println("[debug] opening menu directly");
interpreter.interpretFunction(function, null, new VsmxBaseObject[0]);
}
}
private void loadMenu(String isoPath) { private void loadMenu(String isoPath) {
try (UmdIsoReader iso = new UmdIsoReader(Path.of(isoPath))) { try (UmdIsoReader iso = new UmdIsoReader(Path.of(isoPath))) {
Playlist playlist = Playlist.parse(iso); Playlist playlist = Playlist.parse(iso);
@@ -189,6 +207,8 @@ public final class PlayerApp extends Application {
interpreter.run(globals); interpreter.run(globals);
controller = (Controller) controllerObject.getObject(); controller = (Controller) controllerObject.getObject();
moviePlayer = (MoviePlayer) movieplayer.getObject(); moviePlayer = (MoviePlayer) movieplayer.getObject();
menuInterpreter = interpreter;
mmActivate = globals.getPropertyValue("mm_activate");
controller.callCallback(interpreter, "onAutoPlay", null); controller.callCallback(interpreter, "onAutoPlay", null);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();