Files
healer-man/src/ui/usePresentationClock.ts
2026-10-04 13:13:35 -04:00

23 lines
956 B
TypeScript

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;
}