import { getBackgroundImage, getPublicPath, getStaticImage } from "@/lib/utils"; import { useState, useEffect } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { Image, GuideSteps, GuideStepsItem, StudyGuideModal, EndingOverlay, } from "@/components"; import { SingleChoiceQuizPanel } from "@/components/layout/quiz"; import SuccessAlert from "@/components/layout/alert/success-alert"; import { usePuzzleAnimation } from "@/contexts/PuzzleAnimationContext"; const starName = "luxun"; // 提示图标位置类型 type HintPosition = | "luxun1" | "guanzhu" | "piping" | "jiaguo" | "luxun2" | "none"; const LuxunReflectionScene3 = () => { //碎片动画触发方法 const { triggerPuzzleAnimation } = usePuzzleAnimation(); const navigate = useNavigate(); const { moduleName } = useParams<{ moduleName: string; }>(); const [showGuanzhu, setShowGuanzhu] = useState(false); // 是否显示"关注底层" const [showPiping, setShowPiping] = useState(false); // 是否显示"批判现实" const [showJiaguo, setShowJiaguo] = useState(false); // 是否显示"家国情怀" const [hintPosition, setHintPosition] = useState("luxun1"); // 提示图标位置 const [showQuiz1, setShowQuiz1] = useState(false); // 是否显示题目1(关注底层) const [showQuiz2, setShowQuiz2] = useState(false); // 是否显示题目2(批判现实) const [showQuiz3, setShowQuiz3] = useState(false); // 是否显示题目3(家国情怀) const [completedQuiz1, setCompletedQuiz1] = useState(false); // 题目1是否完成 const [completedQuiz2, setCompletedQuiz2] = useState(false); // 题目2是否完成 const [completedQuiz3, setCompletedQuiz3] = useState(false); // 题目3是否完成 const [showSummary, setShowSummary] = useState(false); // 是否显示总结 const [completionGuideVisible, setCompletionGuideVisible] = useState(false); // 通关提示对话是否显示 const [showGuideModal, setShowGuideModal] = useState(true); // 成功提示相关状态 const [showSuccessAlert, setShowSuccessAlert] = useState(false); const [successMessage, setSuccessMessage] = useState(""); // 结束语覆盖层是否已关闭 const [endingOverlayFinished, setEndingOverlayFinished] = useState(false); const [showEndingOverlay, setShowEndingOverlay] = useState(false); const allCompleted = completedQuiz1 && completedQuiz2 && completedQuiz3; const progress = (completedQuiz1 ? 1 : 0) + (completedQuiz2 ? 1 : 0) + (completedQuiz3 ? 1 : 0); const totalTasks = 3; // 当显示总结后,延迟1秒显示通关提示对话 useEffect(() => { if (showSummary) { const timer = setTimeout(() => { setCompletionGuideVisible(true); triggerPuzzleAnimation(15); }, 500); return () => clearTimeout(timer); } }, [showSummary]); // 点击"鲁迅1"的处理 const handleLuxun1Click = () => { // 同时显示三个选项 setShowGuanzhu(true); setShowPiping(true); setShowJiaguo(true); // 提示图标会根据完成状态自动显示在对应的选项上 }; // 点击"关注底层"的处理 const handleGuanzhuClick = () => { if (!showGuanzhu || completedQuiz1) return; // 必须先点击"鲁迅1"且未完成 setShowQuiz1(true); }; // 点击"批判现实"的处理 const handlePipingClick = () => { if (!completedQuiz1 || completedQuiz2) return; // 必须先完成题目1且未完成题目2 setShowQuiz2(true); }; // 点击"家国情怀"的处理 const handleJiaguoClick = () => { if (!completedQuiz2 || completedQuiz3) return; // 必须先完成题目2且未完成题目3 setShowQuiz3(true); }; // 题目1提交处理(关注底层) const handleQuiz1Submit = (value: string, isCorrect: boolean) => { if (isCorrect) { setCompletedQuiz1(true); setShowQuiz1(false); // 提示图标会自动移动到"批判现实"旁边(根据完成状态) // 显示成功提示 setSuccessMessage("鲁迅的文字始终聚焦底层百姓的苦难与希望。"); setShowSuccessAlert(true); } }; // 题目2提交处理(批判现实) const handleQuiz2Submit = (value: string, isCorrect: boolean) => { if (isCorrect) { setCompletedQuiz2(true); setShowQuiz2(false); // 提示图标会自动移动到"家国情怀"旁边(根据完成状态) // 显示成功提示 setSuccessMessage("鲁迅以文字批判旧时代的黑暗,唤醒国人的觉醒。"); setShowSuccessAlert(true); } }; // 题目3提交处理(家国情怀) const handleQuiz3Submit = (value: string, isCorrect: boolean) => { if (isCorrect) { setCompletedQuiz3(true); setShowQuiz3(false); setHintPosition("luxun2"); // 提示图标移动到"鲁迅2"旁边 // 显示成功提示 setSuccessMessage("鲁迅一生辗转,只为唤醒国人,守护家国。"); setShowSuccessAlert(true); } }; // 点击"鲁迅2"的处理 const handleLuxun2Click = () => { if (allCompleted) { setShowSummary(true); setHintPosition("none"); // 隐藏提示图标 } }; return (
{/* 离开按钮 */} { if (moduleName && starName) { navigate(`/${moduleName}/${starName}/reflection2`); } }} /> {/* 左侧:鲁迅的文学足迹 - 地图区域 */}
{/* 关注底层 - 同时显示,但按顺序启用 */} {showGuanzhu && ( 关注底层 )} {/* 批判现实 - 同时显示,但按顺序启用 */} {showPiping && ( 批判现实 )} {/* 家国情怀 - 同时显示,但按顺序启用 */} {showJiaguo && ( 家国情怀 )} {/* 提示图标 - 关注底层左侧(未完成题目1时显示) */} {showGuanzhu && !completedQuiz1 && (
点一点图标 点一点
)} {/* 提示图标 - 批判现实旁边(完成题目1但未完成题目2时显示) */} {showPiping && completedQuiz1 && !completedQuiz2 && (
点一点图标 点一点
)} {/* 提示图标 - 家国情怀旁边(完成题目2但未完成题目3时显示) */} {showJiaguo && completedQuiz2 && !completedQuiz3 && (
点一点图标 点一点
)}
{/* 右侧区域 */}
{/* 任务进度 */}
{allCompleted ? "任务进度已完成" : `任务进度:(${progress}/${totalTasks})`}
{/* 鲁迅精神内核 */}
{/* 提示图标 - 鲁迅1左侧 */} {hintPosition === "luxun1" && !showGuanzhu && (
点一点图标 点一点
)} 鲁迅精神内核 鲁迅精神内核 {/* 提示图标 - 鲁迅2旁边 */} {hintPosition === "luxun2" && allCompleted && (
点一点图标 点一点
)}
{/* 精神总结 */}
{showSummary ? ( // 点击鲁迅2后显示总结内容
1.关注底层:他笔下的主角多是社会底层
2.批判现实:他以犀利的文笔批判封建传统
3.家国情怀:他致力于唤醒国人、守护家国
) : ( // 未完成时显示提示内容
请跟随小手指点一点,拼接鲁迅的精神脉络!
)}
{/* 继续前进按钮 - 只在结束语覆盖层关闭后显示 */} {endingOverlayFinished && ( { navigate(`/${moduleName}/${starName}/home`); }} /> )} {/* 题目1:关注底层 */} {/* 题目2:批判现实 */} {/* 题目3:家国情怀 */} {/* 成功提示弹窗 */} { setShowSuccessAlert(false); setSuccessMessage(""); }} onContinue={() => { setShowSuccessAlert(false); setSuccessMessage(""); }} /> {/* 通关提示对话 */} { if (!visible) { setCompletionGuideVisible(false); setShowEndingOverlay(true); } }} showMask={false} highlightSelectors={[]} zIndex={10000} > 恭喜你读懂了鲁迅的文字与初心,愿这份精神能伴你前行! { setShowEndingOverlay(false); setEndingOverlayFinished(true); }} audioSrc={getPublicPath("audio/luxun/mp3_luxun_34.mp3")} /> { setShowGuideModal(false); }} verticalAlign="center" audioSrc={getPublicPath("audio/luxun/mp3_luxun_33.mp3")} > 先生的每一步足迹、每一篇文字,都藏着不变的精神底色——拼出这份精神脉络,读懂先生的初心!
); }; export default LuxunReflectionScene3;