feat: three-layer scene loading (?scene > config.json > main.json)
This commit is contained in:
19
src/App.vue
19
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<string> {
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user