import { useEffect, useState } from "react"; import { useOnlineSessionStore } from "../app/onlineSessionStore"; import { useGameStore } from "../game/store"; import { useDocumentVisibility } from "../platform/useDocumentVisibility"; /** Visible timers follow local pause; shared online play continues behind menus. */ export function usePresentationClock(active = true): number { const locallyBlocked = useGameStore((state) => state.paused || state.mapOpen || state.companionOpen); const sharedOnline = useOnlineSessionStore((state) => state.snapshot !== null); const visible = useDocumentVisibility(); const ticking = active && visible && (sharedOnline || !locallyBlocked); const [now, setNow] = useState(() => Date.now()); useEffect(() => { if (!ticking) return; setNow(Date.now()); const timer = window.setInterval(() => setNow(Date.now()), 100); return () => window.clearInterval(timer); }, [ticking]); return now; }