d9404a31-1970-4e79-ac9a-f4f9db60350b
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
"use client";
|
||||
// 回响星核 / Echo Nexus — 主循环 hook
|
||||
import { useEffect, useRef } from "react";
|
||||
import { useGameStore } from "@/store/gameStore";
|
||||
|
||||
/** 100ms tick:产能 + 自动产晶体 + 自动解码 */
|
||||
export function useGameLoop() {
|
||||
const tick = useGameStore((s) => s.tick);
|
||||
const autoDecodeTick = useGameStore((s) => s.autoDecodeTick);
|
||||
const init = useGameStore((s) => s.init);
|
||||
const inited = useRef(false);
|
||||
|
||||
useEffect(() => {
|
||||
if (!inited.current) {
|
||||
init();
|
||||
inited.current = true;
|
||||
}
|
||||
const id = setInterval(() => {
|
||||
const now = Date.now();
|
||||
tick(now);
|
||||
autoDecodeTick();
|
||||
}, 250);
|
||||
return () => clearInterval(id);
|
||||
}, [tick, autoDecodeTick, init]);
|
||||
|
||||
// 页面可见性:切回时补 tick
|
||||
useEffect(() => {
|
||||
const onVis = () => {
|
||||
if (document.visibilityState === "visible") {
|
||||
tick(Date.now());
|
||||
}
|
||||
};
|
||||
document.addEventListener("visibilitychange", onVis);
|
||||
return () => document.removeEventListener("visibilitychange", onVis);
|
||||
}, [tick]);
|
||||
}
|
||||
Reference in New Issue
Block a user