feat:添加孙中山场景
This commit is contained in:
1 parent
bf4a98bf9f
commit
cad38e43df
55 files changed
+1704
-44
No files matched your search
@@ -0,0 +1,76 @@
|
||||
import { create } from "zustand";
|
||||
import { persist } from "zustand/middleware";
|
||||
|
||||
export interface Clue {
|
||||
id: string; // 格式: "sunzhongshan/reflection/scene1/clue1"
|
||||
name: string; // 线索名称,如 "线索1"
|
||||
collected: boolean; // 是否已收集
|
||||
collectedAt?: number; // 收集时间戳
|
||||
}
|
||||
|
||||
interface ClueStore {
|
||||
clues: Clue[];
|
||||
// 收集线索
|
||||
collectClue: (id: string, name: string) => void;
|
||||
// 检查线索是否已收集
|
||||
isClueCollected: (id: string) => boolean;
|
||||
// 获取指定场景的所有线索
|
||||
getSceneClues: (sceneId: string) => Clue[];
|
||||
// 重置指定场景的线索
|
||||
resetSceneClues: (sceneId: string) => void;
|
||||
}
|
||||
|
||||
export const useClueStore = create<ClueStore>()(
|
||||
persist(
|
||||
(set, get) => ({
|
||||
clues: [],
|
||||
|
||||
collectClue: (id: string, name: string) => {
|
||||
const { clues } = get();
|
||||
const existingClue = clues.find((c) => c.id === id);
|
||||
|
||||
if (!existingClue) {
|
||||
set({
|
||||
clues: [
|
||||
...clues,
|
||||
{
|
||||
id,
|
||||
name,
|
||||
collected: true,
|
||||
collectedAt: Date.now(),
|
||||
},
|
||||
],
|
||||
});
|
||||
} else if (!existingClue.collected) {
|
||||
set({
|
||||
clues: clues.map((c) =>
|
||||
c.id === id
|
||||
? { ...c, collected: true, collectedAt: Date.now() }
|
||||
: c
|
||||
),
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
isClueCollected: (id: string) => {
|
||||
const { clues } = get();
|
||||
return clues.some((c) => c.id === id && c.collected);
|
||||
},
|
||||
|
||||
getSceneClues: (sceneId: string) => {
|
||||
const { clues } = get();
|
||||
return clues.filter((c) => c.id.startsWith(sceneId));
|
||||
},
|
||||
|
||||
resetSceneClues: (sceneId: string) => {
|
||||
const { clues } = get();
|
||||
set({
|
||||
clues: clues.filter((c) => !c.id.startsWith(sceneId)),
|
||||
});
|
||||
},
|
||||
}),
|
||||
{
|
||||
name: "clue-storage", // localStorage key
|
||||
}
|
||||
)
|
||||
);
|
||||
Reference in new issue
Block a user