forked from phenom/healer-man
23 lines
956 B
TypeScript
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;
|
|
}
|