const PATTERN_KEY = "territoryPattern"; export class UserSettings { get(key: string, defaultValue: boolean): boolean { const value = localStorage.getItem(key); if (!value) return defaultValue; if (value === "true") return true; if (value === "false") return false; return defaultValue; } set(key: string, value: boolean) { localStorage.setItem(key, value ? "true" : "false"); } emojis() { return this.get("settings.emojis", true); } performanceOverlay() { return this.get("settings.performanceOverlay", false); } alertFrame() { return this.get("settings.alertFrame", true); } anonymousNames() { return this.get("settings.anonymousNames", false); } lobbyIdVisibility() { return this.get("settings.lobbyIdVisibility", true); } fxLayer() { return this.get("settings.specialEffects", true); } structureSprites() { return this.get("settings.structureSprites", true); } darkMode() { return this.get("settings.darkMode", false); } leftClickOpensMenu() { return this.get("settings.leftClickOpensMenu", false); } territoryPatterns() { return this.get("settings.territoryPatterns", true); } focusLocked() { return false; // TODO: renable when performance issues are fixed. this.get("settings.focusLocked", true); } toggleLeftClickOpenMenu() { this.set("settings.leftClickOpensMenu", !this.leftClickOpensMenu()); } toggleFocusLocked() { this.set("settings.focusLocked", !this.focusLocked()); } toggleEmojis() { this.set("settings.emojis", !this.emojis()); } togglePerformanceOverlay() { this.set("settings.performanceOverlay", !this.performanceOverlay()); } toggleAlertFrame() { this.set("settings.alertFrame", !this.alertFrame()); } toggleRandomName() { this.set("settings.anonymousNames", !this.anonymousNames()); } toggleLobbyIdVisibility() { this.set("settings.lobbyIdVisibility", !this.lobbyIdVisibility()); } toggleFxLayer() { this.set("settings.specialEffects", !this.fxLayer()); } toggleStructureSprites() { this.set("settings.structureSprites", !this.structureSprites()); } toggleTerritoryPatterns() { this.set("settings.territoryPatterns", !this.territoryPatterns()); } toggleDarkMode() { this.set("settings.darkMode", !this.darkMode()); if (this.darkMode()) { document.documentElement.classList.add("dark"); } else { document.documentElement.classList.remove("dark"); } } // For development only. Used for testing patterns, set in the console manually. getDevOnlyPattern(): string | undefined { return localStorage.getItem("dev-pattern") ?? undefined; } getSelectedPatternName(): string | undefined { return localStorage.getItem(PATTERN_KEY) ?? undefined; } setSelectedPatternName(patternName: string | undefined): void { if (patternName === undefined) { localStorage.removeItem(PATTERN_KEY); } else { localStorage.setItem(PATTERN_KEY, patternName); } } }