import { motion } from "framer-motion"; import { ChangeEvent, useEffect, useState } from "react"; import { BsmButton } from "renderer/components/shared/bsm-button.component"; import { useObservable } from "renderer/hooks/use-observable.hook"; import { useTranslation } from "renderer/hooks/use-translation.hook"; import { BSLauncherService, LaunchMods } from "renderer/services/bs-launcher.service"; import { ConfigurationService } from "renderer/services/configuration.service"; import { BSVersion } from "shared/bs-version.interface"; import { LaunchModToogle } from "./launch-mod-toogle.component"; import BSLogo from "../../../../../../assets/images/apngs/bs-logo.png"; import { BsmImage } from "renderer/components/shared/bsm-image.component"; import { useService } from "renderer/hooks/use-service.hook"; import { BsStore } from "shared/models/bs-store.enum"; import { lastValueFrom } from "rxjs"; import { BsDownloaderService } from "renderer/services/bs-version-download/bs-downloader.service"; import equal from "fast-deep-equal"; import { GlowEffect } from "renderer/components/shared/glow-effect.component"; type Props = { version: BSVersion }; export function LaunchSlide({ version }: Props) { const t = useTranslation(); const configService = useService(ConfigurationService); const bsLauncherService = useService(BSLauncherService); const bsDownloader = useService(BsDownloaderService); const [oculusMode, setOculusMode] = useState(!!configService.get(LaunchMods.OCULUS_MOD)); const [desktopMode, setDesktopMode] = useState(!!configService.get(LaunchMods.DESKTOP_MOD)); const [debugMode, setDebugMode] = useState(!!configService.get(LaunchMods.DEBUG_MOD)); const [advancedLaunch, setAdvancedLaunch] = useState(false); const [additionalArgsString, setAdditionalArgsString] = useState(configService.get("additionnal-args") || ""); const versionDownloading = useObservable(() => bsDownloader.downloadingVersion$); const versionRunning = useObservable(() => bsLauncherService.versionRunning$); useEffect(() => { configService.set("additionnal-args", additionalArgsString); }, [additionalArgsString]); useEffect(() => { if(desktopMode){ return; } bsLauncherService.restoreSteamVR(); }, [desktopMode]); const setMode = (mode: LaunchMods, value: boolean) => { if (mode === LaunchMods.DEBUG_MOD) { setDebugMode(value); } else if (mode === LaunchMods.OCULUS_MOD) { setOculusMode(value); } else if (mode === LaunchMods.DESKTOP_MOD) { setDesktopMode(value); } configService.set(mode, value); }; const handleAdditionalArgsChange = (e: ChangeEvent) => setAdditionalArgsString(() => e.target.value); const launch = () => { const additionalArgs = additionalArgsString?.split(";").map(arg => arg.trim()).filter(arg => arg.length > 0); const launch$ = bsLauncherService.launch({ version, oculus: version.oculus ? false : oculusMode, desktop: desktopMode, debug: debugMode, additionalArgs, protonPath: bsLauncherService.getProtonPath(), }); return lastValueFrom(launch$).catch(() => {}); }; return (

{version.name ? `${version.BSVersion} - ${version.name}` : version.BSVersion}

{!(version.oculus || version.metadata?.store === BsStore.OCULUS) && setMode(LaunchMods.OCULUS_MOD, !oculusMode)} active={oculusMode} text="pages.version-viewer.launch-mods.oculus" />} setMode(LaunchMods.DESKTOP_MOD, !desktopMode)} active={desktopMode} text="pages.version-viewer.launch-mods.desktop" /> setMode(LaunchMods.DEBUG_MOD, !debugMode)} active={debugMode} text="pages.version-viewer.launch-mods.debug" />
{ e.preventDefault(); setAdvancedLaunch(prev => !prev); }} />
); }