fix(play): story-card clicks no longer trigger vision
Symptom: on a choice beat, clicking the dialogue/narration card fired
the vision ("识图") flow instead of doing nothing. Picking an option with
fast clicks that landed on the card repeatedly kicked off the expensive
/api/vision → insert-beat/scene chain — janky and confusing.
Root cause: the story-card <div> had `pointer-events-none`, so clicks
passed through to the background <img> onClick (handleImageClick), which
on choice beats calls onBackgroundClick → vision.
Fix: the card now owns its clicks (`pointer-events-auto` + handleCardClick):
- mid-typing → completes the text (VN skip affordance, unchanged)
- continue beat → advances, as before
- choice beat → no-op (no vision)
Clicking the actual scene art still triggers vision; choice buttons
already had pointer-events-auto and are unaffected.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -276,6 +276,18 @@ export function PlayCanvas({
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Card swallows its own clicks so they never fall through to the image's
|
||||||
|
// vision (识图) trigger: while typing a click completes the text, a continue
|
||||||
|
// beat advances, and a choice beat stays inert (player must pick an option).
|
||||||
|
function handleCardClick() {
|
||||||
|
if (phase !== "ready" || !beat) return;
|
||||||
|
if (!typingDone) {
|
||||||
|
skipTypewriter();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (beat.next.type === "continue") onAdvance();
|
||||||
|
}
|
||||||
|
|
||||||
const interactive = phase === "ready" && !!imageUrl;
|
const interactive = phase === "ready" && !!imageUrl;
|
||||||
const dimmed = phase === "transitioning";
|
const dimmed = phase === "transitioning";
|
||||||
|
|
||||||
@@ -366,7 +378,8 @@ export function PlayCanvas({
|
|||||||
|
|
||||||
{(beat.narration || beat.line) && (
|
{(beat.narration || beat.line) && (
|
||||||
<div
|
<div
|
||||||
className="pointer-events-none mx-[2%] mb-[2%] px-[3%] py-[2.2%] relative"
|
className="pointer-events-auto mx-[2%] mb-[2%] px-[3%] py-[2.2%] relative"
|
||||||
|
onClick={handleCardClick}
|
||||||
style={{
|
style={{
|
||||||
background: "rgba(14, 10, 6, 0.72)",
|
background: "rgba(14, 10, 6, 0.72)",
|
||||||
border: "1.5px solid rgba(175, 138, 72, 0.60)",
|
border: "1.5px solid rgba(175, 138, 72, 0.60)",
|
||||||
|
|||||||
Reference in New Issue
Block a user