import { ExhibitOverlay, GuideSteps, GuideStepsItem, Image, MatchQuizPanel, MultipleChoiceQuizPanel, SingleChoiceQuizPanel, Title, } from '@/components' import Cursor from '@/components/cursor' import { ErrorAlert, SuccessAlert } from '@/components/layout' import { useCursorController } from '@/hooks/useCursorController' import { getBackgroundImage, getPublicPath, getStaticImage } from '@/lib/utils' import { useEffect, useMemo, useRef, useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { useNieerStore, saveNieerStore } from '@/store/nieerStore' import { usePuzzleAnimation } from '@/contexts/PuzzleAnimationContext' const NieerPlace5 = () => { const navigate = useNavigate() const { moduleName } = useParams<{ moduleName: string }>() // 获取碎片动画触发方法 const { triggerPuzzleAnimation } = usePuzzleAnimation() const starName = 'nieer' const place = 'place5' const { markExhibitVisited, getVisitedExhibits } = useNieerStore() const setLastVisitedPlace = useNieerStore((s) => s.setLastVisitedPlace) const [activeExhibitId, setActiveExhibitId] = useState<1 | 2 | 3 | null>(null) // 光标1对话(图1) const [guide1Visible, setGuide1Visible] = useState(false) const [guide1Step, setGuide1Step] = useState(0) // 光标2对话(图2) const [guide2Visible, setGuide2Visible] = useState(false) const [guide2Step, setGuide2Step] = useState(0) // 光标3对话(图5) const [guide3Visible, setGuide3Visible] = useState(false) const [guide3Step, setGuide3Step] = useState(0) // 光标2题目1(图3:填空) const [quiz2_1Visible, setQuiz2_1Visible] = useState(false) const quiz2_1WrongCountRef = useRef(0) const [quiz2_1HintVisible, setQuiz2_1HintVisible] = useState(false) const [success2_1Visible, setSuccess2_1Visible] = useState(false) // 光标2题目2(图4:多选) const [quiz2_2Visible, setQuiz2_2Visible] = useState(false) const [success2_2Visible, setSuccess2_2Visible] = useState(false) // 光标3题目1(图6:配对) const [quiz3_1Visible, setQuiz3_1Visible] = useState(false) const [success3_1Visible, setSuccess3_1Visible] = useState(false) // 光标3题目2(图7:判断) const [quiz3_2Visible, setQuiz3_2Visible] = useState(false) const [success3_2Visible, setSuccess3_2Visible] = useState(false) const visitedExhibits = getVisitedExhibits(place) const visited = useMemo(() => new Set(visitedExhibits), [visitedExhibits]) const total = 3 const progressCount = visited.size const completed = progressCount >= total const subtitle = completed ? '已完成' : `${progressCount}/${total}` const { isEnabled } = useCursorController({ initialEnabled: [1], dependencies: { 2: [1], 3: [2], }, visited: visitedExhibits, }) useEffect(() => { if (!quiz2_1Visible) { quiz2_1WrongCountRef.current = 0 setQuiz2_1HintVisible(false) } }, [quiz2_1Visible]) if (!moduleName) return null const exhibitSrcMap: Record<1 | 2 | 3, string> = { 1: 'nieer/place5/场景5展品1', 2: 'nieer/place5/场景5展品3', 3: 'nieer/place5/场景5展品2', } const handleOpenExhibit = (id: 1 | 2 | 3) => { setActiveExhibitId(id) // 光标1显示guide2的内容(选定国歌时间线),光标2显示guide1的内容(宪法修正案) if (id === 1) { setGuide2Step(0) setGuide2Visible(true) } if (id === 2) { setGuide1Step(0) setGuide1Visible(true) } if (id === 3) { setGuide3Step(0) setGuide3Visible(true) } } return (