import React from 'react' import { getConfig, saveConfig } from '../../../utils/configuration' import Checkbox from '../common/Checkbox' import Menu from './Menu' import './ExtrasMenu.css' import BigButton from '../common/BigButton' import { invoke } from '@tauri-apps/api' import Tr from '../../../utils/language' import { getGameExecutable } from '../../../utils/game' interface IProps { children: React.ReactNode | React.ReactNode[] closeFn: () => void playGame: (exe?: string, proc_name?: string) => void } interface IState { migoto?: string akebi?: string reshade?: string launch_migoto: boolean launch_akebi: boolean launch_reshade: boolean } export class ExtrasMenu extends React.Component { constructor(props: IProps) { super(props) this.state = { launch_migoto: false, launch_akebi: false, launch_reshade: false, } this.launchPreprograms = this.launchPreprograms.bind(this) this.toggleMigoto = this.toggleMigoto.bind(this) this.toggleAkebi = this.toggleAkebi.bind(this) this.toggleReshade = this.toggleReshade.bind(this) } async componentDidMount() { const config = await getConfig() this.setState({ migoto: config.migoto_path, akebi: config.akebi_path, reshade: config.reshade_path, launch_akebi: config?.last_extras?.akebi ?? false, launch_migoto: config?.last_extras?.migoto ?? false, launch_reshade: config?.last_extras?.reshade ?? false, }) } async launchPreprograms() { const config = await getConfig() config.last_extras = { migoto: this.state.launch_migoto, akebi: this.state.launch_akebi, reshade: this.state.launch_reshade, } await saveConfig(config) // Close menu this.props.closeFn() // This injects independent of the game if (this.state.launch_migoto) { await this.launchMigoto() } // This injects independent of the game if (this.state.launch_reshade) { await this.launchReshade() } // This will launch the game if (this.state.launch_akebi) { await this.launchAkebi() // This already launches the game return } // Launch the game await this.props.playGame() } async launchAkebi() { const config = await getConfig() // Get game exe from game path, so we can watch it const pathArr = config.game_install_path.replace(/\\/g, '/').split('/') const gameExec = pathArr[pathArr.length - 1] await this.props.playGame(config.akebi_path, gameExec) } async launchMigoto() { const config = await getConfig() if (!config.migoto_path) return alert('Migoto not installed or set!') await invoke('run_program_relative', { path: config.migoto_path }) } async launchReshade() { const config = await getConfig() if (!config.reshade_path) return alert('Reshade not installed or set!') await invoke('run_command', { program: config.reshade_path, args: [await getGameExecutable()], relative: true, }) } toggleMigoto() { this.setState({ launch_migoto: !this.state.launch_migoto, }) } toggleAkebi() { this.setState({ launch_akebi: !this.state.launch_akebi, }) } toggleReshade() { this.setState({ launch_reshade: !this.state.launch_reshade, }) } render() { return (
{this.state.migoto && (
)} {this.state.akebi && (
)} {this.state.reshade && (
)}
) } }