import Store from 'electron-store'; import { detectPlatform } from './platform'; export interface Keybind { key: string; ctrl: boolean; shift: boolean; alt: boolean; } export interface SavedAccount { label: string; username: string; password: string; } export interface AppConfig { window: { width: number; height: number; x: number | undefined; y: number | undefined; maximized: boolean; fullscreen: boolean; }; performance: { fpsUnlocked: boolean; hardwareAccel: boolean; gpuPreference: 'high-performance' | 'low-power' | 'default'; }; game: { lastServer: string; socialTabBehaviour: 'New Window' | 'Same Window'; joinAsSpectator: boolean; }; swapper: { enabled: boolean; path: string; }; matchmaker: { enabled: boolean; regions: string[]; gamemodes: string[]; minPlayers: number; maxPlayers: number; minRemainingTime: number; openServerBrowser: boolean; }; keybinds: { reload: Keybind; newMatch: Keybind; copyGameLink: Keybind; joinFromClipboard: Keybind; devTools: Keybind; matchmaker: Keybind; matchmakerAccept: Keybind; matchmakerCancel: Keybind; pauseChat: Keybind; fullscreenToggle: Keybind; }; userscripts: { enabled: boolean; path: string; }; ui: { showExitButton: boolean; deathscreenAnimation: boolean; hideMenuPopups: boolean; }; discord: { enabled: boolean; }; translator: { enabled: boolean; targetLanguage: string; showLanguageTag: boolean; }; advanced: { removeUselessFeatures: boolean; gpuRasterizing: boolean; helpfulFlags: boolean; disableAccelerated2D: boolean; increaseLimits: boolean; lowLatency: boolean; experimentalFlags: boolean; angleBackend: string; }; accounts: SavedAccount[]; platform: { detectedOS: string; gpuBackend: string; }; } export const DEFAULT_KEYBINDS: AppConfig['keybinds'] = { reload: { key: 'F5', ctrl: false, shift: false, alt: false }, newMatch: { key: 'F4', ctrl: false, shift: false, alt: false }, copyGameLink: { key: 'l', ctrl: true, shift: false, alt: false }, joinFromClipboard: { key: 'j', ctrl: true, shift: false, alt: false }, devTools: { key: 'F12', ctrl: false, shift: false, alt: false }, matchmaker: { key: 'F6', ctrl: false, shift: false, alt: false }, matchmakerAccept: { key: 'Enter', ctrl: false, shift: false, alt: false }, matchmakerCancel: { key: 'Escape', ctrl: false, shift: false, alt: false }, pauseChat: { key: 'F10', ctrl: false, shift: false, alt: false }, fullscreenToggle: { key: 'F11', ctrl: false, shift: false, alt: false }, }; const platformInfo = detectPlatform(); export const config = new Store({ name: 'krunker-civilian-config', defaults: { window: { width: 1600, height: 900, x: undefined, y: undefined, maximized: false, fullscreen: false, }, performance: { fpsUnlocked: true, hardwareAccel: true, gpuPreference: 'high-performance', }, game: { lastServer: '', socialTabBehaviour: 'New Window', joinAsSpectator: false, }, swapper: { enabled: true, path: '', }, matchmaker: { enabled: true, regions: [], gamemodes: [], minPlayers: 1, maxPlayers: 6, minRemainingTime: 120, openServerBrowser: true, }, keybinds: DEFAULT_KEYBINDS, userscripts: { enabled: true, path: '', }, ui: { showExitButton: true, deathscreenAnimation: true, hideMenuPopups: false, }, discord: { enabled: false, }, translator: { enabled: true, targetLanguage: 'en', showLanguageTag: true, }, advanced: { removeUselessFeatures: true, gpuRasterizing: false, helpfulFlags: true, disableAccelerated2D: false, increaseLimits: false, lowLatency: false, experimentalFlags: false, angleBackend: 'default', }, accounts: [], platform: { detectedOS: platformInfo.os, gpuBackend: platformInfo.gpuBackend, }, }, });