From 56e9a48800243202499b50f722fad6d1b7d3fa31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lower?= Date: Mon, 15 Jan 2024 16:53:48 +0100 Subject: [PATCH] Support passing launcher information to mods This change together with https://github.com/praydog/uevr-frontend/pull/9 will allow one click 'launch to VR' from within Rai Pal. This also introduces proper division of responsibility where Rai Pal knows what to launch and UEVRInjector knows how to launch it. On top of the code change UEVR `rai-pal-manifest.json` needs to look like this: ```json { "version": "1.03", "runnable": { "path": "UEVRInjector.exe", "args": [ "--attach={{ExecutableName}}", "--delay=30", "--launch={{StartCommand}}", "--launch_args={{StartCommandArgs}}" ] }, "engine": "Unreal", "unityBackend": null } ``` --- backend/src/mod_loaders/runnable_loader.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/backend/src/mod_loaders/runnable_loader.rs b/backend/src/mod_loaders/runnable_loader.rs index b7159bf5..3918165e 100644 --- a/backend/src/mod_loaders/runnable_loader.rs +++ b/backend/src/mod_loaders/runnable_loader.rs @@ -27,7 +27,7 @@ use crate::{ result::Error, serializable_enum, serializable_struct, - Result, + Result, providers::provider_command::ProviderCommand, }; serializable_struct!(RunnableLoader { @@ -38,6 +38,8 @@ serializable_enum!(RunnableParameter { ExecutableName, ExecutablePath, GameJson, + StartCommand, + StartCommandArgs, }); impl ModLoaderStatic for RunnableLoader { @@ -91,6 +93,24 @@ fn replace_parameters(argument: &str, game: &InstalledGame) -> String { result = replace_parameter_value(&result, RunnableParameter::GameJson, || { Ok(serde_json::to_string(&game)?) }); + result = replace_parameter_value(&result, RunnableParameter::StartCommand, || { + match &game.start_command { + Some(provider_command) => match provider_command { + ProviderCommand::String(s) => Ok(s.to_string()), + ProviderCommand::Path(exe_path, _) => Ok(exe_path.to_string_lossy().to_string()) + } + None => Ok(game.executable.path.to_string_lossy().to_string()) // fallback to path + } + }); + result = replace_parameter_value(&result, RunnableParameter::StartCommandArgs, || { + match &game.start_command { + Some(provider_command) => match provider_command { + ProviderCommand::Path(_, args) => Ok(args.join(" ")), + _ => Ok(String::from("")), + } + _ => Ok(String::from("")), + } + }); result }