GAMES (Nuxt → RN migration): - New components/games/GameOverScreen.tsx — slide-in + fade overlay Props: score, bestScore, gameName, onRetry, onExit, isNewBest - New lib/gameScores.ts — AsyncStorage helpers rebreak_best_snake (higher=better), _tetris (higher=better), _memory (lower=better, inverted isNewBest) - UrgeGames.tsx wired: snake-collision/tetris-topout/memory-finish trigger GameOverScreen with retry/exit + best-score persist - TicTacToe NICHT — round-aggregation game hat eigenen Fertig-Flow - 7 i18n keys (gameOver.* DE+EN, 5 motivational texts statisch aus pool) LYRA (markdown-bug fix): - User-Report: Lyra antwortet mit ** in mobile-app, verwirrt user - Beide system-prompts (COACH_SYSTEM_PROMPT für SOS, COACH_CASUAL_SYSTEM_PROMPT für Coach) bekommen "ANTWORTFORMAT - KRITISCH"-section: NIE Markdown (kein **bold**, _italic_, #-Headings, -Bullets) — Klartext only - Reason: Mobile-App-bubbles rendern markdown nicht → User sieht raw `**text**` Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
17 lines
567 B
TypeScript
17 lines
567 B
TypeScript
import AsyncStorage from '@react-native-async-storage/async-storage';
|
|
import { GameType } from '../components/urge/UrgeGames';
|
|
|
|
const key = (game: GameType) => `rebreak_best_${game}`;
|
|
|
|
export async function getBestScore(game: GameType): Promise<number> {
|
|
const raw = await AsyncStorage.getItem(key(game));
|
|
return raw ? parseInt(raw) || 0 : 0;
|
|
}
|
|
|
|
export async function saveBestScore(game: GameType, score: number): Promise<void> {
|
|
const current = await getBestScore(game);
|
|
if (score > current) {
|
|
await AsyncStorage.setItem(key(game), String(score));
|
|
}
|
|
}
|