42773b7e-7147-4ad5-828d-da7fcf0290b8

This commit is contained in:
2026-06-23 13:52:13 +00:00
parent da18f32df2
commit f3d2e53e4f
16 changed files with 562 additions and 34 deletions
+11 -7
View File
@@ -3,10 +3,11 @@
import { useEffect, useRef } from "react";
import { useGameStore } from "@/store/gameStore";
/** 250ms tick:产能 + 自动产晶体 + 自动解码 + 成就检测 */
/** 250ms tick:产能 + 自动产晶体 + 自动解码 + 星潮 + 成就检测 */
export function useGameLoop() {
const tick = useGameStore((s) => s.tick);
const autoDecodeTick = useGameStore((s) => s.autoDecodeTick);
const tickTide = useGameStore((s) => s.tickTide);
const checkAchievements = useGameStore((s) => s.checkAchievements);
const init = useGameStore((s) => s.init);
const inited = useRef(false);
@@ -16,30 +17,33 @@ export function useGameLoop() {
init();
inited.current = true;
}
let achCounter = 0;
let counter = 0;
const id = setInterval(() => {
const now = Date.now();
tick(now);
autoDecodeTick();
// 星潮检测每 tick 都查(结束/触发判定需及时)
tickTide(now);
counter++;
// 成就检测每秒执行一次(降低开销)
achCounter++;
if (achCounter % 4 === 0) {
if (counter % 4 === 0) {
checkAchievements();
}
}, 250);
return () => clearInterval(id);
}, [tick, autoDecodeTick, checkAchievements, init]);
}, [tick, autoDecodeTick, tickTide, checkAchievements, init]);
// 页面可见性:切回时补 tick + 立即检测成就
// 页面可见性:切回时补 tick + 星潮 + 成就
useEffect(() => {
const onVis = () => {
if (document.visibilityState === "visible") {
tick(Date.now());
tickTide(Date.now());
checkAchievements();
}
};
document.addEventListener("visibilitychange", onVis);
return () => document.removeEventListener("visibilitychange", onVis);
}, [tick, checkAchievements]);
}, [tick, tickTide, checkAchievements]);
}