| import { IconButton, Tooltip } from "@mui/material"; | |
| import ArrowBackIcon from "@mui/icons-material/ArrowBack"; | |
| import VolumeOffIcon from "@mui/icons-material/VolumeOff"; | |
| import VolumeUpIcon from "@mui/icons-material/VolumeUp"; | |
| import PhotoCameraOutlinedIcon from "@mui/icons-material/PhotoCameraOutlined"; | |
| import { useNavigate } from "react-router-dom"; | |
| import { useSoundSystem } from "../contexts/SoundContext"; | |
| import { useStoryCapture } from "../hooks/useStoryCapture"; | |
| import { useRef } from "react"; | |
| import { storyApi } from "../utils/api"; | |
| const SOUND_ENABLED_KEY = "sound_enabled"; | |
| export function GameNavigation() { | |
| const navigate = useNavigate(); | |
| const { isSoundEnabled, setIsSoundEnabled, playSound } = useSoundSystem(); | |
| const { downloadStoryImage } = useStoryCapture(); | |
| const containerRef = useRef(null); | |
| const location = window.location.pathname; | |
| const handleBack = () => { | |
| playSound("page"); | |
| if (location === "/game") { | |
| window.location.href = "/"; | |
| } else { | |
| window.location.href = "/"; | |
| } | |
| }; | |
| const handleToggleSound = () => { | |
| const newSoundState = !isSoundEnabled; | |
| setIsSoundEnabled(newSoundState); | |
| localStorage.setItem(SOUND_ENABLED_KEY, newSoundState); | |
| storyApi.setSoundEnabled(newSoundState); | |
| }; | |
| const handleCapture = async () => { | |
| playSound("page"); | |
| const container = document.querySelector( | |
| "[data-comic-layout]" | |
| )?.parentElement; | |
| if (container) { | |
| await downloadStoryImage( | |
| { current: container }, | |
| `your-story-${Date.now()}.png` | |
| ); | |
| } | |
| }; | |
| return ( | |
| <div style={{ position: "relative", zIndex: 1000 }} ref={containerRef}> | |
| {window.location.pathname !== "/" && ( | |
| <Tooltip title="Back to home"> | |
| <IconButton | |
| onClick={handleBack} | |
| size="large" | |
| sx={{ | |
| position: "fixed", | |
| top: 24, | |
| left: 24, | |
| color: "white", | |
| backgroundColor: "rgba(0, 0, 0, 0.5)", | |
| "&:hover": { | |
| backgroundColor: "rgba(0, 0, 0, 0.7)", | |
| }, | |
| pointerEvents: "auto", | |
| }} | |
| > | |
| <ArrowBackIcon /> | |
| </IconButton> | |
| </Tooltip> | |
| )} | |
| {/* <Tooltip title="Capture story"> | |
| <IconButton | |
| onClick={handleCapture} | |
| sx={{ | |
| position: "fixed", | |
| top: 24, | |
| right: 88, | |
| color: "white", | |
| backgroundColor: "rgba(0, 0, 0, 0.5)", | |
| "&:hover": { | |
| backgroundColor: "rgba(0, 0, 0, 0.7)", | |
| }, | |
| pointerEvents: "auto", | |
| }} | |
| > | |
| <PhotoCameraOutlinedIcon /> | |
| </IconButton> | |
| </Tooltip> */} | |
| <Tooltip title={isSoundEnabled ? "Mute sound" : "Unmute sound"}> | |
| <IconButton | |
| onClick={handleToggleSound} | |
| sx={{ | |
| position: "fixed", | |
| size: "large", | |
| top: 24, | |
| right: 24, | |
| color: "white", | |
| backgroundColor: "rgba(0, 0, 0, 0.5)", | |
| "&:hover": { | |
| backgroundColor: "rgba(0, 0, 0, 0.7)", | |
| }, | |
| pointerEvents: "auto", | |
| }} | |
| > | |
| {isSoundEnabled ? <VolumeUpIcon /> : <VolumeOffIcon />} | |
| </IconButton> | |
| </Tooltip> | |
| </div> | |
| ); | |
| } | |