diff --git a/electron/main.js b/electron/main.js index 84e1a45..61cafa8 100644 --- a/electron/main.js +++ b/electron/main.js @@ -2,12 +2,15 @@ const { app, BrowserWindow } = require('electron') const path = require('path') app.whenReady().then(() => { + const sceneArg = process.argv.find(a => a.startsWith('--scene=')) + const query = sceneArg ? { scene: sceneArg.split('=')[1] } : {} + const win = new BrowserWindow({ fullscreen: true, autoHideMenuBar: true, webPreferences: { nodeIntegration: false } }) - win.loadFile(path.join(__dirname, '..', 'dist', 'index.html')) + win.loadFile(path.join(__dirname, '..', 'dist', 'index.html'), { query }) }) app.on('window-all-closed', () => app.quit()) diff --git a/src/App.vue b/src/App.vue index b2986ce..0d6c56f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -43,8 +43,25 @@ const { loadGame, start, resumeAutoSave, makeChoice, clickHotspot, startChapter, saveGame, loadGameFromSlot, refreshSaves, saveSystem, engine } = useGameEngine(() => [videoElA.value, videoElB.value]) +async function resolveScenePath(): Promise { + const params = new URLSearchParams(location.search) + const queryScene = params.get('scene') + if (queryScene) return queryScene.startsWith('/') ? queryScene : '/' + queryScene + + try { + const resp = await fetch('/scenes/config.json') + if (resp.ok) { + const config = await resp.json() + if (config.sceneFile) return '/scenes/' + config.sceneFile + } + } catch { /* config.json optional */ } + + return '/scenes/main.json' +} + async function init() { - await loadGame('/scenes/demo.json') + const scenePath = await resolveScenePath() + await loadGame(scenePath) loading.value = false hasAutoSave.value = (await saveSystem.load(0)) !== null }