From a276d00bc6a64b60c301221452890ca1d1de89dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=27=C3=A9lectron=20rare?= <108685187+electron-rare@users.noreply.github.com> Date: Wed, 13 May 2026 13:43:58 +0200 Subject: [PATCH] feat(launcher): AV-Live-Body row dans menubar Ajoute une ProcessRow AV-Live-Body toujours visible dans le menubar (sauf en mode bodyMesh ou la ligne est deja affichee). L'utilisateur peut maintenant lancer la fenetre RealityKit a la demande depuis n'importe quel mode pour acceder au panel de reglages visuels (touche S). Le guard 'useMultiHMR' dans startBodyApp est supprime : sans worker Multi-HMR la fenetre affichera juste la cam et un fond vide pour le mesh, mais le panel reste utilisable pour tester les sliders / toggles. --- .../AVLiveLauncher/MenuBarContent.swift | 22 +++++++++++-------- .../AVLiveLauncher/ProcessManager.swift | 4 +++- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/launcher/Sources/AVLiveLauncher/MenuBarContent.swift b/launcher/Sources/AVLiveLauncher/MenuBarContent.swift index 8fecded..3baa1e7 100644 --- a/launcher/Sources/AVLiveLauncher/MenuBarContent.swift +++ b/launcher/Sources/AVLiveLauncher/MenuBarContent.swift @@ -74,15 +74,6 @@ struct MenuBarContent: View { .toggleStyle(.switch) .font(.caption) .padding(.horizontal, 4) - if processManager.bodyAppRunning { - ProcessRow( - title: "AV-Live-Body", - subtitle: "RealityKit SMPL-X mesh renderer", - isRunning: true, - start: processManager.startBodyApp, - stop: processManager.stopBodyApp - ) - } } else { ProcessRow( title: "Oscilloscope", @@ -114,6 +105,19 @@ struct MenuBarContent: View { stop: processManager.stopDataFeeds ) + // AV-Live-Body — toujours disponible, lancable a la demande + // depuis n'importe quel mode (le worker Multi-HMR doit tourner + // pour qu'il recoive des vertices, sinon fenetre vide). + if processManager.mode != .bodyMesh { + ProcessRow( + title: "AV-Live-Body", + subtitle: "RealityKit mesh + cam (touche S = panel)", + isRunning: processManager.bodyAppRunning, + start: processManager.startBodyApp, + stop: processManager.stopBodyApp + ) + } + if processManager.mode == .full { HStack { Button(action: processManager.openBrowser) { diff --git a/launcher/Sources/AVLiveLauncher/ProcessManager.swift b/launcher/Sources/AVLiveLauncher/ProcessManager.swift index 8fb3e2f..701cdeb 100644 --- a/launcher/Sources/AVLiveLauncher/ProcessManager.swift +++ b/launcher/Sources/AVLiveLauncher/ProcessManager.swift @@ -690,7 +690,9 @@ final class ProcessManager: ObservableObject { /// Lance l'app SwiftPM AV-Live-Body (RealityKit) qui ecoute les /// vertices SMPL-X sur :57130. Necessite useMultiHMR=true. func startBodyApp() { - guard useMultiHMR else { return } + // Lancable a la demande depuis n'importe quel mode. Si Multi-HMR + // n'est pas actif, la fenetre affichera juste la cam (pas de mesh) + // mais le panel S et les reglages restent fonctionnels. guard bodyAppProc == nil else { return } let pkgDir = URL(fileURLWithPath: metalVizDir) .deletingLastPathComponent()