cocos02
0dec8a2376
docs: add P22 StoryGallery consolidation plan (chapters + gallery merge)
2026-06-10 15:49:11 +08:00
cocos02
7c1c734572
fix: i18n all settings labels, add ja to language select, dynamic lang options
2026-06-10 15:42:33 +08:00
cocos02
4c20c6444b
fix: add missing Japanese UI keys, deduplicate resume key, use pauseResume for pause menu
2026-06-10 15:38:39 +08:00
cocos02
642e18fb5e
feat: auto-hide top-bar and cursor after 3s idle, restore on mouse move
2026-06-10 15:35:12 +08:00
cocos02
bf4b09f4e0
feat: pause menu, accessibility improvements, main menu polish, roadmap update
2026-06-10 15:18:39 +08:00
cocos02
e7ed52d89b
fix: reduce menu overlay opacity to show background video
2026-06-10 14:54:28 +08:00
cocos02
ea01e61fde
chore: trim menu_bg to 3 seconds
2026-06-10 14:50:29 +08:00
cocos02
76581d0326
feat: intro video, asset updates, roadmap and engine improvements
2026-06-10 14:47:45 +08:00
cocos02
bb289f5438
feat: switch hotspot coordinates from container percentage to absolute content pixels
2026-06-10 12:45:41 +08:00
cocos02
5eac0f23a8
fix: prefix locales path with assetBase so fetch resolves correctly
2026-06-10 12:32:20 +08:00
cocos02
8f6138f97e
fix: remove scene. prefix from textKey, add fallback to choice.text when locale key missing
2026-06-10 12:29:01 +08:00
cocos02
86a0aebdc8
feat: configurable locales path per story, dynamic language switching from story data
2026-06-10 12:17:52 +08:00
cocos02
4cf2263c78
refactor: separate story locales (public/) from UI locales (src/), async fetch for story messages
2026-06-10 12:10:03 +08:00
cocos02
0071a34acf
feat: add Japanese language support, three-language subtitles for all demo scenes
2026-06-10 11:55:03 +08:00
cocos02
25aafb034f
chore: shorten scene_1 placeholder video to 2s
2026-06-10 11:48:45 +08:00
cocos02
3a46c2c6c8
chore: add placeholder test videos for main.json starter template
2026-06-10 11:46:07 +08:00
cocos02
4258bc4034
feat: add minimal main.json as creator starter template
2026-06-10 11:43:44 +08:00
cocos02
b38969b108
refactor: set assetBase to demo/ and strip redundant demo/ prefix from all paths
2026-06-10 11:32:14 +08:00
cocos02
9409c893b3
chore: update demo.json paths to match scene-based asset organization
2026-06-10 11:29:45 +08:00
cocos02
937e709dca
feat: global assetBase for scene JSON, convert demo to relative paths
2026-06-10 11:01:21 +08:00
cocos02
76477050d3
chore: add default config.json pointing to demo.json
2026-06-10 10:52:30 +08:00
cocos02
23478f0065
feat: three-layer scene loading (?scene > config.json > main.json)
2026-06-10 10:48:17 +08:00
cocos02
25d73f5443
feat: electron packaging, build scripts, gitignore and docs update
2026-06-09 23:53:32 +08:00
cocos02
48fb89449a
fix: clear gameEnded flag on new game start so MainMenu dismisses
2026-06-09 20:20:04 +08:00
cocos02
87ba62b9ef
feat: main menu component, roadmap update
2026-06-09 20:15:46 +08:00
cocos02
48da959b3a
fix: sync adjusted QTE total to ring animation via qteTimer event
2026-06-09 20:07:03 +08:00
cocos02
1c00ff9de5
fix: sync adjusted QTE total to ring animation via qteTimer event
2026-06-09 20:06:16 +08:00
cocos02
5eb727f17e
fix: watch QTE settings for immediate sync to engine during gameplay
2026-06-09 19:57:02 +08:00
cocos02
3185dc5819
fix: change pause key from Space to P, disable pause during QTE
2026-06-09 19:46:51 +08:00
cocos02
c9d29019a0
feat: accessibility settings, subtitle/QTE improvements, docs update
2026-06-09 19:42:08 +08:00
cocos02
33ad26ed52
docs: add P15 Dagre key-moment timeline plan to FUTURE, preserve platform extensions
2026-06-09 19:22:27 +08:00
cocos02
5476c1b5cf
docs: update P15 to reflect list-based recap, add Dagre timeline future plan
2026-06-09 19:20:11 +08:00
cocos02
906965c963
fix: wire up EndingGallery click to open ChapterRecap via chapterId
2026-06-09 17:57:21 +08:00
cocos02
9297117544
feat: P15 ending gallery, chapter recap, visited tracking, save system v6
2026-06-09 17:49:07 +08:00
cocos02
47d6ce50fe
docs: add P15 ending gallery, chapter recap, and branch map design doc
2026-06-09 17:48:28 +08:00
cocos02
341316c357
chore: demo scene updates
2026-06-09 17:30:20 +08:00
cocos02
451c6ea025
chore: sync latest changes
2026-06-09 17:21:54 +08:00
cocos02
bca137535b
fix: hoist prompt toast to App.vue so it survives ChoicePanel unmount after selection
2026-06-09 16:55:57 +08:00
cocos02
bf4b85f727
feat: choice conditions with variables, demo updates, roadmap update
2026-06-09 16:46:06 +08:00
cocos02
beb1e5cfd5
docs: update roadmap
2026-06-09 16:19:55 +08:00
cocos02
fddef6d1fc
docs: scope P14 SFX to UI feedback only, scene audio belongs in video production
2026-06-09 16:18:11 +08:00
cocos02
7a7c6c935c
docs: update roadmap
2026-06-09 16:08:08 +08:00
cocos02
f044ed0b60
refactor: switch to key-based i18n for choices, revert inline textEn approach
2026-06-09 15:54:55 +08:00
cocos02
8e7f77bc38
feat: inline bilingual choice text (textEn), lang-aware choice rendering
2026-06-09 15:51:37 +08:00
cocos02
daec24d69b
fix: App.vue updates
2026-06-09 15:45:58 +08:00
cocos02
59aed77199
feat: i18n system, lang switch component, english subtitles, UI improvements, roadmap update
2026-06-09 15:40:51 +08:00
cocos02
6b4114af43
feat: press Esc to open menu during gameplay, close with Esc
2026-06-09 15:40:01 +08:00
cocos02
72e442f2c3
feat: UI polish, chapter select improvements, save system enhancements, roadmap update
2026-06-09 15:19:53 +08:00
cocos02
2748b2c16f
fix: remove absolute positioning from PlaybackBar to prevent overlap with top-bar buttons
2026-06-09 15:03:18 +08:00
cocos02
66c7028b32
fix: move skippable flag from QTE result scenes to the triggering scene
2026-06-09 14:57:46 +08:00
cocos02
0a6d26ecb0
fix: suppress videoEnd during QTE, clear QTE UI on game end and chapter restart
2026-06-09 14:55:13 +08:00
cocos02
660fa9347c
feat: playback bar component, save system improvements, demo and roadmap updates
2026-06-09 14:21:41 +08:00
cocos02
ca71b6d52e
docs: update README
2026-06-09 12:35:55 +08:00
cocos02
652162f565
fix: restore opacity when replaying same video after image scene
2026-06-09 12:32:48 +08:00
cocos02
ed435f790f
refactor: extract enterScene as single source of truth for scene transitions
2026-06-09 12:26:38 +08:00
cocos02
bdf62bf0a6
fix: set currentScene before image branch in resumeScene so hotspots are clickable
2026-06-09 12:18:42 +08:00
cocos02
9e339c7c16
refactor: inline event registration at setup level, remove registerEvents duplication across entry points
2026-06-09 12:06:40 +08:00
cocos02
ace5ed1fb3
feat: chapter select system, multi-chapter support, scene manager refactor, and docs update
2026-06-09 11:35:11 +08:00
cocos02
655b9a23d0
feat: fullscreen composable, roadmap update, and future plans doc
2026-06-09 10:47:14 +08:00
cocos02
4bfdfbc27d
feat: audio system, demo scene updates, docs, and engine improvements
2026-06-08 23:18:33 +08:00
cocos02
514c8f5207
fix: shorten stay subtitle cue to avoid overlap with loop segment
2026-06-08 22:02:19 +08:00
cocos02
0dbe1b097d
feat: video loop support for hotspot scenes, demo updates, docs, and engine fixes
2026-06-08 21:48:47 +08:00
cocos02
5b40781d0a
fix: hide old video frame before crossfade when coming from image scene
2026-06-08 21:24:28 +08:00
cocos02
972738572f
fix: filter stale timeupdate events by tracking sceneVideo element
2026-06-08 21:09:10 +08:00
cocos02
6c0deea0e2
fix: pause old video before switching to prevent stale timeupdate triggering wrong hotspot states
2026-06-08 15:29:28 +08:00
cocos02
17c479525d
fix: emit initial hotspot state immediately after sceneChange to prevent flash
2026-06-08 15:17:43 +08:00
cocos02
077de2a64e
fix: emit sceneChange before video start to avoid hotspot flash, prevent game end for hotspot-only scenes
2026-06-08 15:02:38 +08:00
cocos02
d81042174a
fix: skip crossfade when switching to same video, replay from start
2026-06-08 14:32:34 +08:00
cocos02
fa7c333214
fix: use v-show instead of v-if for GamePlayer to prevent video element detach during image scenes
2026-06-08 14:26:21 +08:00
cocos02
6b67989007
feat: engine improvements, new scenes, videos, subtitles, hotspot component and docs update
2026-06-08 14:01:58 +08:00
cocos02
e68ed9c962
fix: await nextTick before setting video src on first preview
2026-06-08 13:48:50 +08:00
cocos02
a0749261bf
feat: highlight upstream/downstream edges when node selected
2026-06-08 13:09:47 +08:00
cocos02
a16f34acd9
docs: add graph layout optimization record to editor README
2026-06-08 13:07:18 +08:00
cocos02
b542660095
feat: replace BFS layout with dagre for professional graph layout
2026-06-08 13:01:17 +08:00
cocos02
e323f7973a
fix: pass SmoothStepEdge component instead of string to default-edge-type
2026-06-08 12:49:42 +08:00
cocos02
a008c927a5
feat: use smoothstep edge type for orthogonal lines
2026-06-08 12:24:42 +08:00
cocos02
419bfab1f4
fix: remove animated edges
2026-06-08 12:22:41 +08:00
cocos02
23f8fb97a6
feat: BFS-based left-to-right tree layout for scene graph
2026-06-08 12:21:05 +08:00
cocos02
f439f7784e
fix: add immediate:true to watcher so initial data renders on first mount
2026-06-08 12:14:57 +08:00
cocos02
b48a760a1e
fix: use local refs for nodes/edges, only useVueFlow for events and fitView
2026-06-08 12:10:18 +08:00
cocos02
518c451a59
fix: remove redundant :nodes/:edges props from VueFlow, useVueFlow already provides them via inject
2026-06-08 12:05:54 +08:00
cocos02
4d48463164
refactor: rewrite editor with immutable state, async-safe Vue Flow, and loading guard
2026-06-07 23:18:43 +08:00
cocos02
45461b4ed7
fix: prevent Vue Flow edge render crash by clearing edges before structural node changes
2026-06-07 23:01:52 +08:00
cocos02
dad5e9b8c3
docs: add editor README with usage guide
2026-06-07 22:51:56 +08:00
cocos02
a22dd8497e
fix: move critical layout CSS to index.html, revert broken absolute positioning
2026-06-07 22:50:20 +08:00
cocos02
469fc1ff33
fix: ensure Vue Flow parent container has explicit dimensions
2026-06-07 22:41:51 +08:00
cocos02
f9ee24197a
chore: update roadmap and session log
2026-06-07 22:00:30 +08:00
cocos02
3b4c6d7024
feat: P3 - visual scenario editor with Vue Flow
...
- editor/: stand-alone Vite multi-page app for visual scenario editing
- editor/components/SceneGraph.vue: Vue Flow graph with scene nodes, branch/default/QTE edges
- editor/components/NodeEditor.vue: right panel editing video/subtitle paths, choices, QTE params
- editor/components/PreviewPanel.vue: embedded video player previewing selected scene
- editor/composables/useGraphEditor.ts: bidirectional graph<->JSON sync
- editor/App.vue: toolbar (new scene, import/export JSON, load demo, start scene selector)
- @vue-flow/core|background|controls: graph visualization dependencies
- vite.config.ts: multi-page build (main + editor)
- ROADMAP: mark P3 as completed
2026-06-07 21:38:08 +08:00
cocos02
65c26e0972
fix: clear old subtitle cues when switching to scene without subtitles
...
Previously when subtitleUrl became null, the old cues array was retained
and would replay from the beginning on the next scene.
2026-06-07 21:22:45 +08:00
cocos02
a34d787336
fix: register checkQTE once in constructor instead of per-scene
...
Previously goToScene added a new checkQTE closure to onTimeUpdate on
every scene transition, accumulating stale closures that re-triggered
old QTE. Now checkQTE is an arrow property registered once in the
constructor, reading this.currentScene directly — no closure, no stale
references, no guard condition needed.
2026-06-07 21:16:31 +08:00
cocos02
4da4d65d5e
fix: checkQTE guard against stale scene closures
...
Since onTimeUpdate callbacks are now additive (Set), goToScene closures
for old scenes persist. Add currentScene?.id !== scene.id check to
prevent QTE from re-triggering for past scenes after scene transitions.
2026-06-07 21:14:40 +08:00
cocos02
bb657b3547
fix: capture save thumbnail on videoEnd instead of sceneChange
...
Previously thumbnail was captured during sceneChange (before video starts
playing), so readyState was low and capture was skipped. Now capture on
videoEnd when frame is guaranteed visible, store in lastThumbnail, and
reuse for both auto-save (slot 0) and manual save.
2026-06-07 21:11:18 +08:00
cocos02
b6eb3c3959
fix: QTE false race condition + restore auto-save slot in menu
...
- QTESystem: add if (!this.active) return guard in setInterval/setTimeout
callbacks to prevent false result from firing after successful key press
- SaveLoadMenu: restore auto-save slot 0 row with blue styling, thumbnail,
scene label, and read-only load button
2026-06-07 21:07:21 +08:00
cocos02
e2670c50d4
refactor: rename Subtitles prop videoUrl to subtitleUrl
2026-06-07 20:48:39 +08:00
cocos02
b3bbe7b39d
fix: support multiple onTimeUpdate callbacks in VideoManager
...
Previously onTimeCallback was a single nullable function pointer, so
registerEvents()'s store.setVideoTime callback was overwritten by
goToScene()'s checkQTE callback, causing videoTime to stay at 0.
Changed to a Set to support multiple concurrent listeners.
2026-06-07 20:38:24 +08:00
cocos02
ef00babdb7
feat: add dump() method to GameStore for debugging
2026-06-07 20:30:39 +08:00
cocos02
64a474a741
feat: expose store as window.__store for debugging
2026-06-07 20:29:14 +08:00
cocos02
12d30cc128
docs: add QTE explanation comment in QTESystem
2026-06-07 19:50:45 +08:00
cocos02
319a379921
feat: P2 - QTE system, subtitles, save thumbnails
...
- QTESystem: trigger detection via timeupdate, multi-key matching, timeout handling
- QTEOverlay: SVG countdown ring + key prompts + success/fail animation
- Engine: integrate QTE (timeupdate check, conditional branching, effect application)
- Subtitles: WebVTT parsing + synchronized subtitle rendering
- GamePlayer: overlay QTE and subtitle components
- SaveSystem: DB v2 with thumbnail field, canvas snapshot at 320x180 JPEG
- SaveLoadMenu: thumbnail preview for save slots
- VideoManager: getActiveVideoElement() for canvas capture
- App.vue: QTE/subtitle integration, thumbnail capture on save
- stores: QTE state management, save list with thumbnails
- demo.json: QTE scene (right_door), subtitles, new event types
- ROADMAP: mark P2 as completed
2026-06-07 19:35:14 +08:00
cocos02
c168e30e52
tweak: reduce intro timeLimit from 15s to 5s for faster testing
2026-06-07 19:00:16 +08:00