From aeb6dc46a44daafb0b53322d12cbe92c43182eb9 Mon Sep 17 00:00:00 2001 From: cocos02 Date: Sun, 7 Jun 2026 13:50:05 +0800 Subject: [PATCH] init --- .gitignore | 24 + ROADMAP.md | 199 +++ engine/core/Engine.ts | 103 ++ engine/core/SceneManager.ts | 25 + engine/core/StateManager.ts | 94 ++ engine/core/VideoManager.ts | 58 + engine/types.ts | 71 + index.html | 12 + package-lock.json | 1342 +++++++++++++++++++ package.json | 21 + public/scenes/demo.json | 84 ++ public/videos/alone_ending.mp4 | Bin 0 -> 18337 bytes public/videos/continue_ending.mp4 | Bin 0 -> 17374 bytes public/videos/intro.mp4 | Bin 0 -> 14337 bytes public/videos/left_door.mp4 | Bin 0 -> 14247 bytes public/videos/right_door.mp4 | Bin 0 -> 8179 bytes public/videos/stay.mp4 | Bin 0 -> 14962 bytes public/videos/trust_ending.mp4 | Bin 0 -> 11876 bytes session-ses_15fa.md | 2080 +++++++++++++++++++++++++++++ src/App.vue | 103 ++ src/components/ChoicePanel.vue | 71 + src/components/GamePlayer.vue | 40 + src/composables/useGameEngine.ts | 53 + src/main.ts | 7 + src/stores/gameStore.ts | 27 + src/vite-env.d.ts | 7 + tsconfig.json | 24 + vite.config.ts | 13 + 28 files changed, 4458 insertions(+) create mode 100644 .gitignore create mode 100644 ROADMAP.md create mode 100644 engine/core/Engine.ts create mode 100644 engine/core/SceneManager.ts create mode 100644 engine/core/StateManager.ts create mode 100644 engine/core/VideoManager.ts create mode 100644 engine/types.ts create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/scenes/demo.json create mode 100644 public/videos/alone_ending.mp4 create mode 100644 public/videos/continue_ending.mp4 create mode 100644 public/videos/intro.mp4 create mode 100644 public/videos/left_door.mp4 create mode 100644 public/videos/right_door.mp4 create mode 100644 public/videos/stay.mp4 create mode 100644 public/videos/trust_ending.mp4 create mode 100644 session-ses_15fa.md create mode 100644 src/App.vue create mode 100644 src/components/ChoicePanel.vue create mode 100644 src/components/GamePlayer.vue create mode 100644 src/composables/useGameEngine.ts create mode 100644 src/main.ts create mode 100644 src/stores/gameStore.ts create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..000003a --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +node_modules/ +dist/ +*.local +.env +.env.* +!.env.example + +# IDE +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log +npm-debug.log* + +# TypeScript +*.tsbuildinfo diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..2c0c718 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,199 @@ +# 交互式电影游戏引擎 — Roadmap + +## 技术栈 + +- **框架**: Vue 3 (Composition API + ` + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..618a1f8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1342 @@ +{ + "name": "moviegame", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "moviegame", + "version": "0.1.0", + "dependencies": { + "pinia": "^2.1.0", + "vue": "^3.4.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "typescript": "~5.6.0", + "vite": "^5.4.0", + "vue-tsc": "^2.1.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", + "dependencies": { + "@babel/types": "^7.29.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", + "dependencies": { + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.61.1.tgz", + "integrity": "sha512-JnBB8MdXj45cajvTuO5FmPlvFVJRQgvrz1uSEl3NwqFnReAPGwb8EanbGi4z2nRaqLzjJSv5/JmycoTKlRZxHA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.61.1.tgz", + "integrity": "sha512-Jx2g7iSjw4AOT0HDPHM9RV3GNjRXwybWtSFZiZAYUTjUwjVrYIwq3kBf+LnhqJlzXFAqTAh2F7IGI+O568exPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.61.1.tgz", + "integrity": "sha512-0F1L/Z3Eqv8mT2n3dCpeO8GcTvHvVqkP5/t6DMsn0KzhYVcg+s7Ncl5DS8qjKYEeio6Az0Gt6nyBORay5qIlCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.61.1.tgz", + "integrity": "sha512-qLttcH871ujY4YcVfUSShhOw+CsoTatYz8gRbHO7Bb92QH059/P0y5do1KMs41fY0BpD2x4AJH/gID0zFiqVKQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.61.1.tgz", + "integrity": "sha512-fUI4RapGE0Oh3mb8mgfvC1O2nU1RpDZUKnDQm3xB1Ipg7C2wTs5Kstz7G2uWK99a8S2yTMq8/P4uycwNa0nJyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.61.1.tgz", + "integrity": "sha512-H5YrdvJaDtI/U9/emrD4b++xkvp3y/JvOe4rizHbxvkyMfRS/CiRYdji+Pl8D0brEaNFWUh1drQxgAGIl6Xudw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.61.1.tgz", + "integrity": "sha512-Q8CBCCQtDFrYtXoeUXSrnFXKOnyUhx6bz+SkL6A0E7V8kAiCJ5pamq1WtbfpVGhR5TSpXY6ak3avmDc5fHTyJA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.61.1.tgz", + "integrity": "sha512-nwnhk1581l0FBVellGcVCAT0Oi06onEA3WB53sf01VO3I0UPBkMH9sXONYME2K0ovXcNayJfNtHfm6mpJElatQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.61.1.tgz", + "integrity": "sha512-x5Xr49hwt3hdW75UOZm3395YwwzPyauktslv29KpWL/T+vVAzoT3azLcTWv0eMciBNrx+DYjH4paehHoLpPvpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.61.1.tgz", + "integrity": "sha512-unMS3H73DpaoPyyEVPjGKleM/s0mkmsauTENpw4INQY8y4+IuLNjkueQ5QCtC0D3N38Y38yhAU8OoZ20S2Tm6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.61.1.tgz", + "integrity": "sha512-zNZzGRnAhwjFEYmvphJRV5XaQGjs62cCmeYYHUT//NbvEnHauw+I85nGG+SiVg5ld4GX8D1IbKIX+ozITQnhMQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.61.1.tgz", + "integrity": "sha512-LdpWGL8X209B2SIvWjqlc8VZgM6PKfontSerGepuldQmHYrAOtnMCXeJkxXGbC+PPZVOuu5czJo7fNV6aeW8rQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.61.1.tgz", + "integrity": "sha512-EC5kTtNaNGOmbMGqar8dvJy6y/hg99GAwjfBz++pxZhQATXGcRjd6c5en5wcbru0vkRmiMGsQKdMJOOf6sza4g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.61.1.tgz", + "integrity": "sha512-8hiwp6D4acEcNK78I4rP0/XtS1sknWIAMJBPdR4l6zUtyTm5KiTDr5bXmWt4foY7nAN7AThDHgkLIEZOWKbzWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.61.1.tgz", + "integrity": "sha512-10dh/h/BqA7DuMPWSxkR8uks18FRwnwOEqr5zOTEl+NOwP/OMzKX8OFR/Of9xxDA7D5qef1Nzar5WDD2kCCr1g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.61.1.tgz", + "integrity": "sha512-YKJ5lg35DP17gcAOggnihe+APw9HLyj1Xn7gsmGumBJAUDa6NGXNixJzmkWLhcK9TOuuyQjdamzvJefkO7qHZQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.61.1.tgz", + "integrity": "sha512-Mlil5G2Jj6a7B3LWGctg+XPL9vdXYuzCtNXfxOQ0nPjc2m6ueUktocPGH9bnAM0bNRKb/bAWTujUU7IJQdQA+g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.61.1.tgz", + "integrity": "sha512-bVWIOIk6pV01p4CdUbPP7CJ/434z+OooYjDuFcR+44N35YvKUC66G8MGnvcWx5mWKW3g61J+t74l3Kj15Kwn2Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.61.1.tgz", + "integrity": "sha512-qy5pBvZbqNFheBz61R1rzsezjm0J7O2oNGoWtGoY89SZYLUfxAJTBAqDChqAIdB4rCiIbi9nF7yZ83GnNiLwSw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.61.1.tgz", + "integrity": "sha512-E83TXjI4zm0+5f2qO+UOudaCYIhYwpJ5jq6YCZNIZ+6CbfhKrkAGezeiASBL9ElxAxFsRS9ZhESv8mfnj6TKeg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.61.1.tgz", + "integrity": "sha512-fbWnKqVkjrJN38vNe3ahkbk6iejS/3b0Nt7EEtPpE6RBacZcGXNKbzfHN3GUUlXOPghUg0j6XUGrtjX9z1sIvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.61.1.tgz", + "integrity": "sha512-ArMl38iVAbk0New1ogihQNY6iphLi4ZaRsa037gUzv5yeKPY8TD3Dmy4x2RNC1VztU/uqm+G+/RwFrSka3Oy2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.61.1.tgz", + "integrity": "sha512-0mYtjHS9ucAbcATycCNK9IGBk/cCe/ma7EmSLGZdsxnOA8cjRIyU04wDpVAD9NiOfLUR9KTxdiO53uOkherqjQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.61.1.tgz", + "integrity": "sha512-gK1iCEPfpoSG9wfBihXxvBMi8ZfcWffYkEsC/Eih+iFENTaewvNcrEQ69lIOWYO5pePHKLHHO7nq5AILGO/HQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.61.1.tgz", + "integrity": "sha512-X+zaP2x+j4RXGfbp/seSoRHWnPxzApilDszisZxbYH5C/jTxFhCtDNdPGZb9lJyYPs24wGxruPF7Y+sIXt9Gzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", + "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.15.tgz", + "integrity": "sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==", + "dev": true, + "dependencies": { + "@volar/source-map": "2.4.15" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.15.tgz", + "integrity": "sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==", + "dev": true + }, + "node_modules/@volar/typescript": { + "version": "2.4.15", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.15.tgz", + "integrity": "sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.15", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.35.tgz", + "integrity": "sha512-BUmHaR1J+O+CKZ9uJucdVTEr1LHsdyvv7vG3eNRhK3CczEHeMd/LtsHAuD7PbrxvI2envCY2v7HI1vC1aBRzKw==", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/shared": "3.5.35", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.35.tgz", + "integrity": "sha512-k+bprkXxuqhVajgTx5mUHuir7TwQzUKOWR40ng1ncAqQRPnrLngGGgqVEEhOnTMlc8btHYVKmrP8s5Qyg0hvYA==", + "dependencies": { + "@vue/compiler-core": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.35.tgz", + "integrity": "sha512-G5VPMcXTSywXBgtFOZOnHKBxKSrwXUcvY1iaF5/hRcy7t0J6CH/d8ha9F4nzi00Fax1eLV0QHM7v4mQu68jydw==", + "dependencies": { + "@babel/parser": "^7.29.3", + "@vue/compiler-core": "3.5.35", + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.15", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.35.tgz", + "integrity": "sha512-rGhAeXgdM7/ffTJGXT69rCCdTmjDewnFuUZfBQQHTdcEBeWdT5HCGY60y2ytLJr9/Dsu7IntUi5z/w0h6Rjnzw==", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/compiler-vue2": { + "version": "2.7.16", + "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", + "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "node_modules/@vue/language-core": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.12.tgz", + "integrity": "sha512-IsGljWbKGU1MZpBPN+BvPAdr55YPkj2nB/TBNGNC32Vy2qLG25DYu/NBN2vNtZqdRbTRjaoYrahLrToim2NanA==", + "dev": true, + "dependencies": { + "@volar/language-core": "2.4.15", + "@vue/compiler-dom": "^3.5.0", + "@vue/compiler-vue2": "^2.7.16", + "@vue/shared": "^3.5.0", + "alien-signals": "^1.0.3", + "minimatch": "^9.0.3", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.35.tgz", + "integrity": "sha512-tVc+SsHConvh/Lz64qq1pP3rYArBmK42xonovEcxY74SQtvctZodG/zhq54P5dr38cVuw25d27cPNRdlMidpGQ==", + "dependencies": { + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.35.tgz", + "integrity": "sha512-A/xFNX9loIcWDygeQuNCfKuh0CoYBzxhqEMNah5TSFg9Z53DrFYEN2qi5CU9necjM1OWYegYREUTHmXTmhfXtg==", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/shared": "3.5.35" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.35.tgz", + "integrity": "sha512-odrJ1C391dbGnyDRh8U+rnP7J2amIEzfmRk5vXy7xi3aZhEXofTvpi0T4HJb6jlNqQZTNPR5MPHSB3RHNkIORA==", + "dependencies": { + "@vue/reactivity": "3.5.35", + "@vue/runtime-core": "3.5.35", + "@vue/shared": "3.5.35", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.35.tgz", + "integrity": "sha512-NkebSOYdB97wi8OQcO3HqzZSlymJi/aWsN/7h74OSVhRTm6qGs3Jp3e0rCXynmWwSlKeRrnlIug+ilYoHBmQDA==", + "dependencies": { + "@vue/compiler-ssr": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "vue": "3.5.35" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.35.tgz", + "integrity": "sha512-zSbjL7gRXwks2ZQLRGCajBtBXEOXW9Ddhn/HvSdrGkE2dqGnumzW8XtusRrxrE9LvqtiqDXQ+A60Hp6mvdYxfA==" + }, + "node_modules/alien-signals": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-1.0.13.tgz", + "integrity": "sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.1.tgz", + "integrity": "sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", + "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/pinia": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", + "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "dependencies": { + "@vue/devtools-api": "^6.6.3", + "vue-demi": "^0.14.10" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/rollup": { + "version": "4.61.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.61.1.tgz", + "integrity": "sha512-I4KW6iuRpuu2uHBLraZ1wNZe0DP7lnRha+VJ9tNaYVaVgKhW0aI3h4RYnoRPeql0flHm/Co55b7snEDcOfOJrA==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.61.1", + "@rollup/rollup-android-arm64": "4.61.1", + "@rollup/rollup-darwin-arm64": "4.61.1", + "@rollup/rollup-darwin-x64": "4.61.1", + "@rollup/rollup-freebsd-arm64": "4.61.1", + "@rollup/rollup-freebsd-x64": "4.61.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.61.1", + "@rollup/rollup-linux-arm-musleabihf": "4.61.1", + "@rollup/rollup-linux-arm64-gnu": "4.61.1", + "@rollup/rollup-linux-arm64-musl": "4.61.1", + "@rollup/rollup-linux-loong64-gnu": "4.61.1", + "@rollup/rollup-linux-loong64-musl": "4.61.1", + "@rollup/rollup-linux-ppc64-gnu": "4.61.1", + "@rollup/rollup-linux-ppc64-musl": "4.61.1", + "@rollup/rollup-linux-riscv64-gnu": "4.61.1", + "@rollup/rollup-linux-riscv64-musl": "4.61.1", + "@rollup/rollup-linux-s390x-gnu": "4.61.1", + "@rollup/rollup-linux-x64-gnu": "4.61.1", + "@rollup/rollup-linux-x64-musl": "4.61.1", + "@rollup/rollup-openbsd-x64": "4.61.1", + "@rollup/rollup-openharmony-arm64": "4.61.1", + "@rollup/rollup-win32-arm64-msvc": "4.61.1", + "@rollup/rollup-win32-ia32-msvc": "4.61.1", + "@rollup/rollup-win32-x64-gnu": "4.61.1", + "@rollup/rollup-win32-x64-msvc": "4.61.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/vite": { + "version": "5.4.21", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", + "dev": true + }, + "node_modules/vue": { + "version": "3.5.35", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.35.tgz", + "integrity": "sha512-cx89fnr+0kVGHiNFG6y6s0bdjypJRFNZn6x3WPstNdQR1bi1mbB7h4v5IBGTsPJU3nK1+0Iqj3Zf+hZWMieR4Q==", + "dependencies": { + "@vue/compiler-dom": "3.5.35", + "@vue/compiler-sfc": "3.5.35", + "@vue/runtime-dom": "3.5.35", + "@vue/server-renderer": "3.5.35", + "@vue/shared": "3.5.35" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-tsc": { + "version": "2.2.12", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.12.tgz", + "integrity": "sha512-P7OP77b2h/Pmk+lZdJ0YWs+5tJ6J2+uOQPo7tlBnY44QqQSPYvS0qVT4wqDJgwrZaLe47etJLLQRFia71GYITw==", + "dev": true, + "dependencies": { + "@volar/typescript": "2.4.15", + "@vue/language-core": "2.2.12" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3fde6bd --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "moviegame", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "vue": "^3.4.0", + "pinia": "^2.1.0" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^5.0.0", + "typescript": "~5.6.0", + "vite": "^5.4.0", + "vue-tsc": "^2.1.0" + } +} diff --git a/public/scenes/demo.json b/public/scenes/demo.json new file mode 100644 index 0000000..0420f9b --- /dev/null +++ b/public/scenes/demo.json @@ -0,0 +1,84 @@ +{ + "startScene": "intro", + "variables": { + "trust": 50, + "courage": 0 + }, + "scenes": { + "intro": { + "id": "intro", + "videoUrl": "/videos/intro.mp4", + "choices": [ + { + "text": "走向左边那扇发光的门", + "targetScene": "left_door", + "effects": [ + { "type": "add", "target": "courage", "value": 10 } + ] + }, + { + "text": "走向右边那扇普通的门", + "targetScene": "right_door", + "effects": [ + { "type": "add", "target": "courage", "value": -5 } + ] + }, + { + "text": "留在原地,什么也不做", + "targetScene": "stay" + } + ] + }, + "left_door": { + "id": "left_door", + "videoUrl": "/videos/left_door.mp4", + "choices": [ + { + "text": "与陌生人握手", + "targetScene": "trust_ending", + "effects": [ + { "type": "add", "target": "trust", "value": 30 } + ] + }, + { + "text": "拒绝握手,保持警惕", + "targetScene": "alone_ending" + } + ] + }, + "right_door": { + "id": "right_door", + "videoUrl": "/videos/right_door.mp4", + "choices": [ + { + "text": "继续前进", + "targetScene": "continue_ending" + }, + { + "text": "回头", + "targetScene": "intro" + } + ] + }, + "stay": { + "id": "stay", + "videoUrl": "/videos/stay.mp4", + "nextScene": "alone_ending" + }, + "trust_ending": { + "id": "trust_ending", + "videoUrl": "/videos/trust_ending.mp4", + "choices": [] + }, + "alone_ending": { + "id": "alone_ending", + "videoUrl": "/videos/alone_ending.mp4", + "choices": [] + }, + "continue_ending": { + "id": "continue_ending", + "videoUrl": "/videos/continue_ending.mp4", + "choices": [] + } + } +} diff --git a/public/videos/alone_ending.mp4 b/public/videos/alone_ending.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..037aa3b75f1c5056899f86e3e74445ae2b1d5a3b GIT binary patch literal 18337 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 VJX;47f(Zps%R-@+&4fy3`#&)7!gl}w literal 0 HcmV?d00001 diff --git a/public/videos/continue_ending.mp4 b/public/videos/continue_ending.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..205824cd970c5b2f202a8a2372591371f6b449a6 GIT binary patch literal 17374 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 literal 0 HcmV?d00001 diff --git a/public/videos/intro.mp4 b/public/videos/intro.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..bb99184b485e4e7bbd0c749094f900f0009cb7e5 GIT binary patch literal 14337 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 literal 0 HcmV?d00001 diff --git a/public/videos/left_door.mp4 b/public/videos/left_door.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..595cb83685f3706e347155a00f8b6a2c07017bce GIT binary patch literal 14247 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 literal 0 HcmV?d00001 diff --git a/public/videos/right_door.mp4 b/public/videos/right_door.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..89ea08a1440e844a905033165345b609d6e4ca5e GIT binary patch literal 8179 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 literal 0 HcmV?d00001 diff --git a/public/videos/trust_ending.mp4 b/public/videos/trust_ending.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..8ac43975f4a4eacbebf947c26efc5fed736dfc74 GIT binary patch literal 11876 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 literal 0 HcmV?d00001 diff --git a/session-ses_15fa.md b/session-ses_15fa.md new file mode 100644 index 0000000..cf0e644 --- /dev/null +++ b/session-ses_15fa.md @@ -0,0 +1,2080 @@ +# 交互式电影游戏引擎制作 + +**Session ID:** ses_15fa30338ffeGz9a7yARxKe4oB +**Created:** 6/7/2026, 12:35:09 PM +**Updated:** 6/7/2026, 1:46:30 PM + +--- + +## User + +交互式电影游戏的游戏引擎怎么制作 + +--- + +## Assistant (Plan · DeepSeek V4 Pro · 116.1s) + +_Thinking:_ + +The user is asking about how to create a game engine for an interactive movie game (交互式电影游戏). This is a high-level conceptual question, not related to any specific codebase. Let me think about this carefully. + +An interactive movie game (like Black Mirror: Bandersnatch, Late Shift, The Complex, or games by Quantic Dream like Detroit: Become Human) is essentially a game where players make choices at decision points that branch the narrative. + +Let me think about the key components of an interactive movie game engine: + +1. **Video Playback System** - Playing video clips seamlessly +2. **Branching Narrative System** - Decision trees that lead to different video segments +3. **Choice/Decision UI** - Presenting options to the player at decision points +4. **State Management** - Tracking what choices were made, character relationships, etc. +5. **Seamless Transitions** - Smooth transitions between video clips +6. **Save/Load System** - Persisting game state + +Let me ask the user some clarifying questions since this is a very broad topic. But first, let me think about what aspects they might be asking about: + +- Are they asking about the technical architecture? +- Which platform/language? +- Are they looking for a specific implementation? + +Since we're in "Plan Mode" (read-only), I should discuss and plan rather than implement. Let me ask some clarifying questions. + +Actually, the user simply asked "交互式电影游戏的游戏引擎怎么制作" - "How to make a game engine for interactive movie games". This is quite broad. Let me provide a comprehensive plan/overview and ask clarifying questions. + +Let me think about the core architecture: + +**Core Architecture of an Interactive Movie Game Engine:** + +1. **Video Engine Layer** + - Video decoder/player (FFmpeg, libvlc, or platform-native) + - Seamless looping and preloading + - Multiple video track support (for different quality levels) + - Subtitle overlay support + +2. **Narrative/Dialogue Engine** + - Decision tree / directed graph data structure + - Scene/Chapter management + - Conditional branching based on state variables + - Timeline management + +3. **State Machine** + - Player choice history + - Character relationship values + - Global flags and variables + - Checkpoint system + +4. **UI Layer** + - Choice presentation (buttons, timed choices) + - QTE (Quick Time Events) overlay + - HUD elements + +5. **Asset Pipeline** + - Script/scenario authoring tool + - Video encoding pipeline + - Asset bundling + +**Technology Choices:** +- **Unity + AVPro Video** or similar - good for cross-platform +- **Unreal Engine** - good for high-end graphics +- **Custom engine with FFmpeg/libvlc** - full control +- **Web-based (HTML5 video + JavaScript)** - accessible + +Let me ask the user some clarifying questions to narrow this down. + +制作交互式电影游戏引擎可以从多个维度切入。在给出具体方案前,先确认几个关键方向: + +**Tool: question** + +**Input:** +```json +{ + "questions": [ + { + "question": "你倾向用什么技术栈?", + "header": "技术选型", + "options": [ + { + "label": "Unity + C#", + "description": "跨平台、生态成熟,有 AVPro Video 等视频插件" + }, + { + "label": "Unreal Engine + C++/Blueprint", + "description": "画质上限高,适合3A级项目" + }, + { + "label": "Web 技术 (HTML5/JS)", + "description": "浏览器即可运行,分发成本低,适合轻量级" + }, + { + "label": "自研引擎 (C++/FFmpeg)", + "description": "完全掌控,但开发成本最高" + } + ] + }, + { + "question": "你需要哪些核心功能?", + "header": "功能需求", + "multiple": true, + "options": [ + { + "label": "分支叙事+选择", + "description": "玩家在关键节点做选择,走向不同分支" + }, + { + "label": "QTE 快速反应事件", + "description": "限时按键操作,类似《底特律:变人》" + }, + { + "label": "人物关系/状态系统", + "description": "选择影响角色好感度、剧情走向" + }, + { + "label": "无缝视频切换", + "description": "选择后无黑屏/卡顿,流畅过渡到下一段" + }, + { + "label": "编辑器/脚本工具", + "description": "可视化编辑剧情树,非程序员也能用" + }, + { + "label": "Save/Load 存档系统", + "description": "随时存档读档" + } + ] + }, + { + "question": "目标平台是?", + "header": "目标平台", + "multiple": true, + "options": [ + { + "label": "PC (Windows/Mac/Linux)", + "description": "桌面端" + }, + { + "label": "移动端 (iOS/Android)", + "description": "手机/平板" + }, + { + "label": "主机 (PS5/Switch/Xbox)", + "description": "家用游戏机" + }, + { + "label": "Web 浏览器", + "description": "无需安装,链接即玩" + } + ] + } + ] +} +``` + +**Output:** +``` +User has answered your questions: "你倾向用什么技术栈?"="Web 技术 (HTML5/JS)", "你需要哪些核心功能?"="分支叙事+选择, 编辑器/脚本工具, Save/Load 存档系统, 无缝视频切换, 人物关系/状态系统, QTE 快速反应事件", "目标平台是?"="Web 浏览器". You can now continue with the user's answers in mind. +``` + +--- + +## Assistant (Plan · DeepSeek V4 Pro · 63.1s) + +_Thinking:_ + +Good, the user wants: +- **Web tech stack** (HTML5/JS) +- **All 6 core features**: branching narrative, editor/scripting tools, save/load, seamless video switching, character relationship/state system, QTE +- **Target: Web browser** + +Now let me design a comprehensive plan for building this interactive movie game engine. + +Let me think about the architecture: + +## Architecture Plan + +### 1. Core Engine Architecture (JavaScript/TypeScript) + +**Scene Graph / Narrative Engine:** +- A directed graph where nodes are scenes (video clips) and edges are player choices +- JSON-based scene definition format +- Support for conditional branching based on state variables + +**Video Manager:** +- Preload next possible videos while current one is playing +- Seamless transition by having hidden video elements pre-buffered +- Handle video end events to trigger choice UI + +**State Manager:** +- Global state object tracking all variables +- Character relationship scores +- Choice history +- Flags for conditional content + +**QTE System:** +- Timed UI overlays during video playback +- Success/failure branches + +**Save/Load:** +- localStorage or IndexedDB for browser +- Serialize/deserialize game state + current scene position + +### 2. Project Structure + +``` +moviegame-engine/ +├── src/ +│ ├── core/ +│ │ ├── Engine.js - Main game loop +│ │ ├── SceneManager.js - Scene graph traversal +│ │ ├── VideoManager.js - Video playback & preloading +│ │ └── StateManager.js - Game state & variables +│ ├── systems/ +│ │ ├── ChoiceSystem.js - Decision UI & logic +│ │ ├── QTESystem.js - Quick time events +│ │ ├── SaveSystem.js - Save/load +│ │ └── AudioSystem.js - Audio management +│ ├── ui/ +│ │ ├── Player.js - Main player component +│ │ ├── ChoicePanel.js - Choice UI +│ │ ├── QTEOverlay.js - QTE display +│ │ └── HUD.js - Heads up display +│ ├── editor/ +│ │ ├── Editor.js - Visual editor +│ │ └── ... +│ └── data/ +│ └── scenes.json - Scene definitions +├── assets/ +│ └── videos/ - Video files +└── index.html +``` + +### 3. Scene Data Format (JSON Schema) + +```json +{ + "scenes": { + "scene_001": { + "id": "scene_001", + "video": "assets/videos/scene_001.mp4", + "subtitles": "assets/subtitles/scene_001.vtt", + "choices": [ + { + "id": "choice_a", + "text": "打开左边的门", + "targetScene": "scene_002a", + "conditions": { "courage": { ">=": 5 } }, + "effects": { "courage": "+2", "flags": ["opened_left_door"] } + }, + { + "id": "choice_b", + "text": "打开右边的门", + "targetScene": "scene_002b" + } + ], + "qte": { + "triggerTime": 5.0, + "key": "Space", + "successScene": "scene_qte_win", + "failScene": "scene_qte_lose", + "timeLimit": 2.0 + }, + "nextScene": "scene_002" // auto-advance if no choices + } + }, + "startScene": "scene_001", + "variables": { + "courage": 0, + "trust": 50 + } +} +``` + +### 4. Key Technical Details + +**Seamless Video Switching:** +- Use dual `