38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
const PREFS_KEY = 'idlegame:prefs:v2';
|
|
|
|
export type StoryOpenMode = 'auto' | 'choices-only' | 'manual';
|
|
export type ActionDetailMode = 'inline' | 'hover' | 'info-button';
|
|
|
|
export interface GamePrefs {
|
|
storyOpenMode: StoryOpenMode;
|
|
actionDetailMode: ActionDetailMode;
|
|
collapsedActionGroups: Record<string, boolean>;
|
|
showEventLog: boolean;
|
|
}
|
|
|
|
const DEFAULTS: GamePrefs = {
|
|
storyOpenMode: 'auto',
|
|
actionDetailMode: 'inline',
|
|
collapsedActionGroups: {},
|
|
showEventLog: true,
|
|
};
|
|
|
|
export function getPrefs(): GamePrefs {
|
|
if (typeof localStorage === 'undefined') return { ...DEFAULTS };
|
|
try {
|
|
const raw = localStorage.getItem(PREFS_KEY);
|
|
if (!raw) return { ...DEFAULTS };
|
|
return { ...DEFAULTS, ...JSON.parse(raw) };
|
|
} catch {
|
|
return { ...DEFAULTS };
|
|
}
|
|
}
|
|
|
|
export function setPrefs(partial: Partial<GamePrefs>): GamePrefs {
|
|
const next = { ...getPrefs(), ...partial };
|
|
if (typeof localStorage !== 'undefined') {
|
|
localStorage.setItem(PREFS_KEY, JSON.stringify(next));
|
|
}
|
|
return next;
|
|
}
|