zahlzerlegung/src/lib/stores/progress.ts

35 lines
1.1 KiB
TypeScript

import { writable } from 'svelte/store';
import {
emptyProgress,
loadProgress,
recordRun,
saveProgress,
type Progress,
} from '../game/persistence';
import type { Target } from '../game/tasks';
import type { Stage } from '../game/stages';
const initial: Progress = typeof window === 'undefined' ? emptyProgress() : loadProgress();
export const progress = writable<Progress>(initial);
// Letzter abgeschlossener Lauf — damit der ResultScreen genau diesen Versuch
// hervorheben kann, auch wenn er nicht der beste ist.
export const lastRun = writable<{ target: Target; stage: Stage; date: string } | null>(null);
progress.subscribe((p) => {
if (typeof window !== 'undefined') saveProgress(p);
});
export function recordResult(target: Target, stage: Stage, timeMs?: number): void {
const date = new Date().toISOString();
progress.update((p) => recordRun(p, target, stage, date, timeMs));
lastRun.set({ target, stage, date });
}
// Setzt den kompletten Spielstand (alle Highscores) zurück.
export function resetProgress(): void {
progress.set(emptyProgress());
lastRun.set(null);
}