From 9baa7b5ab34fd5db6c792ee3e58ddf3a95884479 Mon Sep 17 00:00:00 2001 From: cocos02 Date: Fri, 12 Jun 2026 12:08:39 +0800 Subject: [PATCH] feat: add scene thumbnails to TreeFlow nodes with auto-generated demo thumbs --- engine/types.ts | 1 + public/demo/alone_ending/thumb.jpg | Bin 0 -> 10361 bytes public/demo/corridor/thumb.jpg | Bin 0 -> 11092 bytes public/demo/intro/thumb.jpg | Bin 0 -> 16953 bytes public/demo/left_door/thumb.jpg | Bin 0 -> 12841 bytes public/demo/qte_fail/thumb.jpg | Bin 0 -> 10178 bytes public/demo/qte_success/thumb.jpg | Bin 0 -> 9992 bytes public/demo/right_door/thumb.jpg | Bin 0 -> 13102 bytes public/demo/shared/thumb.jpg | Bin 0 -> 10398 bytes public/demo/stay/thumb.jpg | Bin 0 -> 10713 bytes public/demo/trust_ending/thumb.jpg | Bin 0 -> 10281 bytes public/scenes/demo.json | 242 +++++++++++++++++++++++------ src/components/StoryGallery.vue | 1 + src/components/TreeFlow.vue | 44 ++++-- 14 files changed, 230 insertions(+), 58 deletions(-) create mode 100644 public/demo/alone_ending/thumb.jpg create mode 100644 public/demo/corridor/thumb.jpg create mode 100644 public/demo/intro/thumb.jpg create mode 100644 public/demo/left_door/thumb.jpg create mode 100644 public/demo/qte_fail/thumb.jpg create mode 100644 public/demo/qte_success/thumb.jpg create mode 100644 public/demo/right_door/thumb.jpg create mode 100644 public/demo/shared/thumb.jpg create mode 100644 public/demo/stay/thumb.jpg create mode 100644 public/demo/trust_ending/thumb.jpg diff --git a/engine/types.ts b/engine/types.ts index cc0ff85..40e12bf 100644 --- a/engine/types.ts +++ b/engine/types.ts @@ -3,6 +3,7 @@ export interface SceneNode { type?: 'video' | 'image' videoUrl: string imageUrl?: string + thumbnail?: string contentSize?: { w: number; h: number } subtitleUrl?: string subtitles?: Record diff --git a/public/demo/alone_ending/thumb.jpg b/public/demo/alone_ending/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab155d54e363f2a7df5421da1124873821db7ba6 GIT binary patch literal 10361 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 literal 0 HcmV?d00001 diff --git a/public/demo/corridor/thumb.jpg b/public/demo/corridor/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e658d8ba63ed87fb8071cf85b168bf2de158b079 GIT binary patch literal 11092 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 literal 0 HcmV?d00001 diff --git a/public/demo/qte_fail/thumb.jpg b/public/demo/qte_fail/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3f9c77572554216a21666135056b5a6663ba0f9d GIT binary patch literal 10178 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

ZEG1+evAf{QC;I0?T)j#fRHVNnqde}r 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 i#~;#h_mb=p*dwq&hI4AGOol4R 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 Q;5~u&1pe;?_8DjX2Y0X&z5oCK literal 0 HcmV?d00001 diff --git a/public/demo/shared/thumb.jpg b/public/demo/shared/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..121fc48f60057717788c46ea57fe4d266c6bfa3c GIT binary patch literal 10398 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 literal 0 HcmV?d00001 diff --git a/public/demo/stay/thumb.jpg b/public/demo/stay/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ca95b81e33359f176ad66c24f29ce0a43aaa218 GIT binary patch literal 10713 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 RfWQHP0|Nh#37poB{5NGUDDeOQ literal 0 HcmV?d00001 diff --git a/public/demo/trust_ending/thumb.jpg b/public/demo/trust_ending/thumb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab85473d90aefa7ef8f33dd016e38fead60a6e9b GIT binary patch literal 10281 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 literal 0 HcmV?d00001 diff --git a/public/scenes/demo.json b/public/scenes/demo.json index 5dc82ad..af37459 100644 --- a/public/scenes/demo.json +++ b/public/scenes/demo.json @@ -2,7 +2,11 @@ "assetBase": "demo/", "locales": { "path": "locales/", - "languages": ["zh", "en", "ja"] + "languages": [ + "zh", + "en", + "ja" + ] }, "startScene": "intro", "variables": { @@ -21,7 +25,11 @@ "descKey": "achievement.qte_master.desc", "icon": "", "hidden": false, - "condition": { "variable": "qte_succeeded", "op": ">=", "value": 1 } + "condition": { + "variable": "qte_succeeded", + "op": ">=", + "value": 1 + } }, { "id": "explorer", @@ -31,7 +39,11 @@ "descKey": "achievement.explorer.desc", "icon": "", "hidden": false, - "condition": { "variable": "investigation", "op": ">=", "value": 2 } + "condition": { + "variable": "investigation", + "op": ">=", + "value": 2 + } }, { "id": "game_finished", @@ -41,13 +53,38 @@ "descKey": "achievement.game_finished.desc", "icon": "", "hidden": false, - "condition": { "variable": "completed_game", "op": ">=", "value": 1 } + "condition": { + "variable": "completed_game", + "op": ">=", + "value": 1 + } } ], "endings": [ - { "id": "trust_end", "label": "信任的伙伴", "labelKey": "ending.trust_end", "sceneId": "trust_ending", "chapterId": "ch1", "thumbnail": "ui/images/end_trust.jpg" }, - { "id": "alone_end", "label": "独行之路", "labelKey": "ending.alone_end", "sceneId": "alone_ending", "chapterId": "ch1", "thumbnail": "ui/images/end_alone.jpg" }, - { "id": "continue_end", "label": "继续前行", "labelKey": "ending.continue_end", "sceneId": "continue_ending", "chapterId": "ch3", "thumbnail": "ui/images/end_continue.jpg" } + { + "id": "trust_end", + "label": "信任的伙伴", + "labelKey": "ending.trust_end", + "sceneId": "trust_ending", + "chapterId": "ch1", + "thumbnail": "ui/images/end_trust.jpg" + }, + { + "id": "alone_end", + "label": "独行之路", + "labelKey": "ending.alone_end", + "sceneId": "alone_ending", + "chapterId": "ch1", + "thumbnail": "ui/images/end_alone.jpg" + }, + { + "id": "continue_end", + "label": "继续前行", + "labelKey": "ending.continue_end", + "sceneId": "continue_ending", + "chapterId": "ch3", + "thumbnail": "ui/images/end_continue.jpg" + } ], "chapters": [ { @@ -56,7 +93,11 @@ "labelKey": "chapter.ch1", "startScene": "intro", "thumbnail": "ui/images/ch1.jpg", - "defaultVariables": { "trust": 50, "courage": 0, "investigation": 0 } + "defaultVariables": { + "trust": 50, + "courage": 0, + "investigation": 0 + } }, { "id": "ch2", @@ -64,7 +105,11 @@ "labelKey": "chapter.ch2", "startScene": "desk_detail", "thumbnail": "ui/images/ch2.jpg", - "defaultVariables": { "trust": 60, "courage": 10, "investigation": 1 } + "defaultVariables": { + "trust": 60, + "courage": 10, + "investigation": 1 + } }, { "id": "ch3", @@ -72,7 +117,11 @@ "labelKey": "chapter.ch3", "startScene": "qte_success", "thumbnail": "ui/images/ch3.jpg", - "defaultVariables": { "trust": 70, "courage": 20, "investigation": 2 } + "defaultVariables": { + "trust": 70, + "courage": 20, + "investigation": 2 + } } ], "scenes": { @@ -95,7 +144,11 @@ "textKey": "intro.choice.left_door", "targetScene": "left_door", "effects": [ - { "type": "add", "target": "courage", "value": 10 } + { + "type": "add", + "target": "courage", + "value": 10 + } ] }, { @@ -103,7 +156,11 @@ "textKey": "intro.choice.right_door", "targetScene": "right_door", "effects": [ - { "type": "add", "target": "courage", "value": -5 } + { + "type": "add", + "target": "courage", + "value": -5 + } ] }, { @@ -116,14 +173,18 @@ "textKey": "intro.choice.stay", "targetScene": "stay" } - ] + ], + "thumbnail": "intro/thumb.jpg" }, "investigation_site": { "id": "investigation_site", "type": "image", "videoUrl": "", "imageUrl": "investigation_site/investigation_scene.jpg", - "contentSize": { "w": 1280, "h": 720 }, + "contentSize": { + "w": 1280, + "h": 720 + }, "subtitleUrl": "investigation_site/investigation.vtt", "subtitles": { "zh": "investigation_site/investigation.vtt", @@ -136,10 +197,20 @@ "label": "查看书桌", "labelKey": "investigation_site.hotspot.desk", "targetScene": "desk_detail", - "x": 154, "y": 144, "width": 230, "height": 101, + "x": 154, + "y": 144, + "width": 230, + "height": 101, "effects": [ - { "type": "add", "target": "investigation", "value": 1 }, - { "type": "toggleFlag", "target": "checked_desk" } + { + "type": "add", + "target": "investigation", + "value": 1 + }, + { + "type": "toggleFlag", + "target": "checked_desk" + } ] }, { @@ -147,56 +218,86 @@ "label": "查看窗户", "labelKey": "investigation_site.hotspot.window", "targetScene": "corridor", - "x": 602, "y": 43, "width": 192, "height": 202 + "x": 602, + "y": 43, + "width": 192, + "height": 202 }, { "id": "hs_closet", "label": "检查衣柜", "labelKey": "investigation_site.hotspot.closet", "targetScene": "desk_detail", - "x": 422, "y": 346, "width": 128, "height": 187, + "x": 422, + "y": 346, + "width": 128, + "height": 187, "conditions": [ - { "variable": "investigation", "op": ">=", "value": 1 } + { + "variable": "investigation", + "op": ">=", + "value": 1 + } ], "effects": [ - { "type": "add", "target": "investigation", "value": 1 } + { + "type": "add", + "target": "investigation", + "value": 1 + } ] } ], - "choices": [ - ] + "choices": [] }, "corridor": { "id": "corridor", "videoUrl": "corridor/corridor.mp4", - "contentSize": { "w": 1280, "h": 720 }, + "contentSize": { + "w": 1280, + "h": 720 + }, "skippable": false, "hotspots": [ { "id": "hs_left", "label": "走向左边通道", "targetScene": "left_door", - "x": 26, "y": 216, "width": 384, "height": 324, + "x": 26, + "y": 216, + "width": 384, + "height": 324, "showAt": 1.5, "effects": [ - { "type": "add", "target": "courage", "value": 5 } + { + "type": "add", + "target": "courage", + "value": 5 + } ] }, { "id": "hs_center", "label": "走向中间通道", "targetScene": "trust_ending", - "x": 422, "y": 180, "width": 435, "height": 396, + "x": 422, + "y": 180, + "width": 435, + "height": 396, "showAt": 3.0 }, { "id": "hs_right", "label": "走向右边通道", "targetScene": "alone_ending", - "x": 870, "y": 216, "width": 384, "height": 324, + "x": 870, + "y": 216, + "width": 384, + "height": 324, "showAt": 5.0 } - ] + ], + "thumbnail": "corridor/thumb.jpg" }, "left_door": { "id": "left_door", @@ -215,7 +316,11 @@ "promptKey": "left_door.prompt.handshake", "targetScene": "trust_ending", "effects": [ - { "type": "add", "target": "trust", "value": 30 } + { + "type": "add", + "target": "trust", + "value": 30 + } ] }, { @@ -223,7 +328,8 @@ "textKey": "left_door.choice.reject", "targetScene": "alone_ending" } - ] + ], + "thumbnail": "left_door/thumb.jpg" }, "right_door": { "id": "right_door", @@ -237,18 +343,38 @@ "triggerTime": 1.0, "prompt": "躲避飞来的石块!", "promptKey": "right_door.qte.dodge", - "keys": ["ArrowLeft", "ArrowRight", "a", "d"], + "keys": [ + "ArrowLeft", + "ArrowRight", + "a", + "d" + ], "timeLimit": 3.0, "successScene": "qte_success", "failScene": "qte_fail", "effects": { "success": [ - { "type": "add", "target": "courage", "value": 15 }, - { "type": "set", "target": "qte_succeeded", "value": 1 } + { + "type": "add", + "target": "courage", + "value": 15 + }, + { + "type": "set", + "target": "qte_succeeded", + "value": 1 + } ], - "fail": [{ "type": "add", "target": "trust", "value": -20 }] + "fail": [ + { + "type": "add", + "target": "trust", + "value": -20 + } + ] } - } + }, + "thumbnail": "right_door/thumb.jpg" }, "qte_success": { "id": "qte_success", @@ -264,7 +390,8 @@ "textKey": "qte_success.choice.back", "targetScene": "intro" } - ] + ], + "thumbnail": "qte_success/thumb.jpg" }, "qte_fail": { "id": "qte_fail", @@ -280,7 +407,8 @@ "textKey": "qte_fail.choice.back", "targetScene": "intro" } - ] + ], + "thumbnail": "qte_fail/thumb.jpg" }, "desk_detail": { "id": "desk_detail", @@ -296,7 +424,8 @@ "textKey": "desk_detail.choice.leave", "targetScene": "corridor" } - ] + ], + "thumbnail": "shared/thumb.jpg" }, "stay": { "id": "stay", @@ -313,8 +442,13 @@ "loopStart": 3.0, "loopEnd": 6.0, "choices": [ - { "text": "站起来离开", "textKey": "stay.choice.stand", "targetScene": "alone_ending" } - ] + { + "text": "站起来离开", + "textKey": "stay.choice.stand", + "targetScene": "alone_ending" + } + ], + "thumbnail": "stay/thumb.jpg" }, "trust_ending": { "id": "trust_ending", @@ -327,7 +461,11 @@ "promptKey": "trust_ending.prompt.journey", "targetScene": "secret_ending", "conditions": [ - { "variable": "trust", "op": ">=", "value": 80 } + { + "variable": "trust", + "op": ">=", + "value": 80 + } ] }, { @@ -335,25 +473,33 @@ "textKey": "trust_ending.choice.leave", "targetScene": "alone_ending" } - ] + ], + "thumbnail": "trust_ending/thumb.jpg" }, "secret_ending": { "id": "secret_ending", "videoUrl": "shared/continue_ending.mp4", - "choices": [] + "choices": [], + "thumbnail": "shared/thumb.jpg" }, "alone_ending": { "id": "alone_ending", "videoUrl": "alone_ending/alone_ending.mp4", "choices": [], "onEnter": [ - { "type": "set", "target": "completed_game", "value": 1 } - ] + { + "type": "set", + "target": "completed_game", + "value": 1 + } + ], + "thumbnail": "alone_ending/thumb.jpg" }, "continue_ending": { "id": "continue_ending", "videoUrl": "shared/continue_ending.mp4", - "choices": [] + "choices": [], + "thumbnail": "shared/thumb.jpg" } } -} +} \ No newline at end of file diff --git a/src/components/StoryGallery.vue b/src/components/StoryGallery.vue index f767672..0ca2a57 100644 --- a/src/components/StoryGallery.vue +++ b/src/components/StoryGallery.vue @@ -205,6 +205,7 @@ const tree = computed(() => buildTreeForChapter(currentChapterId.value)) diff --git a/src/components/TreeFlow.vue b/src/components/TreeFlow.vue index a8167c2..d428183 100644 --- a/src/components/TreeFlow.vue +++ b/src/components/TreeFlow.vue @@ -5,6 +5,7 @@ import dagre from 'dagre' const props = defineProps<{ node: PlayerTreeNode | null + scenes?: Record }>() const emit = defineEmits<{ @@ -15,6 +16,7 @@ interface FlowNode { id: string sceneId: string label: string + thumbnail?: string visited: boolean isMystery: boolean locked: boolean @@ -38,7 +40,7 @@ const containerW = ref(800) const containerH = ref(400) function buildFlow(root: PlayerTreeNode) { - const dagreNodes: { id: string; sceneId: string; parent: string | null; label: string; visited: boolean; isMystery: boolean; locked: boolean; lockHint?: string }[] = [] + const dagreNodes: { id: string; sceneId: string; thumbnail?: string; parent: string | null; label: string; visited: boolean; isMystery: boolean; locked: boolean; lockHint?: string }[] = [] const dagreEdges: { from: string; to: string; visited: boolean }[] = [] function walk(node: PlayerTreeNode, parentId: string | null) { @@ -47,6 +49,7 @@ function buildFlow(root: PlayerTreeNode) { dagreNodes.push({ id: dagreId, sceneId: node.sceneId, + thumbnail: props.scenes?.[node.sceneId]?.thumbnail, parent: parentId, label: node.label, visited: true, @@ -91,11 +94,13 @@ function buildFlow(root: PlayerTreeNode) { g.setGraph({ rankdir: 'LR', nodesep: 40, ranksep: 80, marginx: 24, marginy: 24 }) g.setDefaultEdgeLabel(() => ({})) - const nodeW = 120 - const nodeH = 44 + const baseW = 128 + const baseH = 40 + const thumbH = 78 for (const n of dagreNodes) { - g.setNode(n.id, { width: nodeW, height: nodeH }) + const hasThumb = !!n.thumbnail + g.setNode(n.id, { width: hasThumb ? baseW + 20 : baseW, height: hasThumb ? baseH + thumbH + 8 : baseH }) } for (const e of dagreEdges) { g.setEdge(e.from, e.to) @@ -105,18 +110,22 @@ function buildFlow(root: PlayerTreeNode) { const resultNodes: FlowNode[] = dagreNodes.map((n) => { const pos = g.node(n.id) + const hasThumb = !!n.thumbnail + const nw = hasThumb ? baseW + 20 : baseW + const nh = hasThumb ? baseH + thumbH + 8 : baseH return { id: n.id, sceneId: n.sceneId, + thumbnail: n.thumbnail, label: n.label, visited: n.visited, isMystery: n.isMystery, locked: n.locked, lockHint: n.lockHint, - x: pos.x - nodeW / 2, - y: pos.y - nodeH / 2, - w: nodeW, - h: nodeH, + x: pos.x - nw / 2, + y: pos.y - nh / 2, + w: nw, + h: nh, } }) @@ -234,6 +243,7 @@ const svgH = computed(() => containerH.value) :title="n.lockHint || ''" @click="n.visited && n.sceneId && emit('selectScene', n.sceneId)" > + {{ n.visited ? '✦' : n.isMystery ? '?' : '⬜' }} {{ n.label }} @@ -264,15 +274,29 @@ const svgH = computed(() => containerH.value) .flow-node { position: absolute; display: flex; + flex-direction: column; align-items: center; - gap: 6px; - padding: 0 10px; + justify-content: center; + gap: 4px; + padding: 4px 8px 6px; border-radius: 4px; font-size: 12px; transition: all 0.15s; overflow: hidden; } +.flow-node:has(.node-thumb) { + padding: 4px 4px 6px; +} + +.node-thumb { + width: 128px; + height: 72px; + object-fit: cover; + border-radius: 3px; + border: 1px solid rgba(255,255,255,0.06); +} + .flow-node.clickable { cursor: pointer; }