mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-08-20 04:27:29 +00:00
140 lines
5.7 KiB
TypeScript
140 lines
5.7 KiB
TypeScript
import { useState, useEffect } from "react";
|
|
import { useLocalStorage } from "./useLocalStorage";
|
|
import { TauriService, type CustomEdition } from "../services/TauriService";
|
|
export function useAppConfig() {
|
|
const [username, setUsername] = useLocalStorage("lce-username", "Steve");
|
|
const [theme, setTheme] = useLocalStorage("lce-theme", "Modern");
|
|
const [layout, setLayout] = useLocalStorage("lce-layout", "KBM");
|
|
const [vfxEnabled, setVfxEnabled] = useLocalStorage("lce-vfx", true);
|
|
const [animationsEnabled, setAnimationsEnabled] = useLocalStorage("lce-animations", true);
|
|
const [rpcEnabled, setRpcEnabled] = useLocalStorage("discord-rpc", true);
|
|
const [startFullscreen, setStartFullscreen] = useLocalStorage("lce-fullscreen", true);
|
|
const [musicVol, setMusicVol] = useLocalStorage("lce-music", 50);
|
|
const [sfxVol, setSfxVol] = useLocalStorage("lce-sfx", 100);
|
|
const [isDayTime, setIsDayTime] = useLocalStorage("lce-daytime", true);
|
|
const [profile, setProfile] = useLocalStorage("lce-profile", "legacy_evolved");
|
|
const [legacyMode, setLegacyMode] = useLocalStorage("lce-legacy-mode", false);
|
|
const [hasCompletedSetup, setHasCompletedSetup] = useLocalStorage("lce-setup-completed", false);
|
|
const [isLoaded, setIsLoaded] = useState(false);
|
|
const [linuxRunner, setLinuxRunner] = useState<string | undefined>();
|
|
const [perfBoost, setPerfBoost] = useState(false);
|
|
const [customEditions, setCustomEditions] = useState<CustomEdition[]>([]);
|
|
const [customPaths, setCustomPaths] = useState<Record<string, string>>({});
|
|
const [customizations, setCustomizations] = useState<Record<string, { titleImage?: string; panorama?: string }>>({});
|
|
const [mangohudEnabled, setMangohudEnabled] = useState(false);
|
|
const [extraLaunchArgs, setExtraLaunchArgs] = useState<string[] | undefined>();
|
|
const [launchPrefix, setLaunchPrefix] = useState<string | undefined>();
|
|
const [launchEnvVars, setLaunchEnvVars] = useState<Record<string, string> | undefined>();
|
|
const [skipIntro, setSkipIntro] = useLocalStorage("lce-skip-intro", false);
|
|
const [instanceLaunchArgs, setInstanceLaunchArgs] = useState<
|
|
Record<string, { values: Record<string, unknown>; args: string[] }>
|
|
>({});
|
|
useEffect(() => {
|
|
TauriService.loadConfig().then((config) => {
|
|
if (config.username) setUsername(config.username);
|
|
if (config.themeStyleId) setTheme(config.themeStyleId);
|
|
if (config.linuxRunner) setLinuxRunner(config.linuxRunner);
|
|
if (config.appleSiliconPerformanceBoost !== undefined)
|
|
setPerfBoost(config.appleSiliconPerformanceBoost);
|
|
if (config.customEditions) setCustomEditions(config.customEditions);
|
|
if (config.customPaths) setCustomPaths(config.customPaths);
|
|
if (config.customizations) setCustomizations(config.customizations);
|
|
if (config.profile) setProfile(config.profile);
|
|
if (config.vfxEnabled !== undefined) setVfxEnabled(config.vfxEnabled);
|
|
if (config.animationsEnabled !== undefined) setAnimationsEnabled(config.animationsEnabled);
|
|
if (config.rpcEnabled !== undefined) setRpcEnabled(config.rpcEnabled);
|
|
if (config.startFullscreen !== undefined) setStartFullscreen(config.startFullscreen);
|
|
if (config.musicVol !== undefined && config.musicVol !== null) setMusicVol(config.musicVol);
|
|
if (config.sfxVol !== undefined && config.sfxVol !== null) setSfxVol(config.sfxVol);
|
|
if (config.legacyMode !== undefined) setLegacyMode(config.legacyMode);
|
|
if (config.mangohudEnabled !== undefined) setMangohudEnabled(config.mangohudEnabled);
|
|
if (config.extraLaunchArgs) setExtraLaunchArgs(config.extraLaunchArgs);
|
|
if (config.launchPrefix) setLaunchPrefix(config.launchPrefix);
|
|
if (config.launchEnvVars) setLaunchEnvVars(config.launchEnvVars);
|
|
if (config.skipIntro !== undefined) setSkipIntro(config.skipIntro);
|
|
if (config.instanceLaunchArgs) setInstanceLaunchArgs(config.instanceLaunchArgs);
|
|
setIsLoaded(true);
|
|
});
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
if (isLoaded) {
|
|
TauriService.saveConfig({
|
|
username,
|
|
themeStyleId: theme,
|
|
linuxRunner,
|
|
appleSiliconPerformanceBoost: perfBoost,
|
|
profile,
|
|
customEditions,
|
|
customPaths,
|
|
customizations,
|
|
animationsEnabled,
|
|
vfxEnabled,
|
|
rpcEnabled,
|
|
startFullscreen,
|
|
musicVol,
|
|
sfxVol,
|
|
legacyMode,
|
|
mangohudEnabled,
|
|
extraLaunchArgs,
|
|
launchPrefix,
|
|
launchEnvVars,
|
|
skipIntro,
|
|
instanceLaunchArgs,
|
|
}).catch(console.error);
|
|
}
|
|
}, [username, theme, linuxRunner, perfBoost, profile, customEditions, customPaths, customizations, animationsEnabled, vfxEnabled, rpcEnabled, startFullscreen, musicVol, sfxVol, legacyMode, mangohudEnabled, extraLaunchArgs, launchPrefix, launchEnvVars, skipIntro, isLoaded, instanceLaunchArgs]);
|
|
|
|
return {
|
|
username,
|
|
setUsername,
|
|
theme,
|
|
setTheme,
|
|
layout,
|
|
setLayout,
|
|
vfxEnabled,
|
|
setVfxEnabled,
|
|
animationsEnabled,
|
|
setAnimationsEnabled,
|
|
rpcEnabled,
|
|
setRpcEnabled,
|
|
startFullscreen,
|
|
setStartFullscreen,
|
|
musicVol: musicVol ?? 50,
|
|
setMusicVol,
|
|
sfxVol: sfxVol ?? 100,
|
|
setSfxVol,
|
|
isDayTime,
|
|
setIsDayTime,
|
|
legacyMode,
|
|
setLegacyMode,
|
|
profile,
|
|
setProfile,
|
|
linuxRunner,
|
|
setLinuxRunner,
|
|
perfBoost,
|
|
setPerfBoost,
|
|
customEditions,
|
|
setCustomEditions,
|
|
customPaths,
|
|
setCustomPaths,
|
|
customizations,
|
|
setCustomizations,
|
|
isLoaded,
|
|
hasCompletedSetup,
|
|
setHasCompletedSetup,
|
|
mangohudEnabled,
|
|
setMangohudEnabled,
|
|
extraLaunchArgs,
|
|
setExtraLaunchArgs,
|
|
launchPrefix,
|
|
setLaunchPrefix,
|
|
launchEnvVars,
|
|
setLaunchEnvVars,
|
|
skipIntro,
|
|
setSkipIntro,
|
|
instanceLaunchArgs,
|
|
setInstanceLaunchArgs,
|
|
};
|
|
}
|