From cf6c289fcf56c70203bd4fb6a994ad96270ba75b 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 0de5b101..3b4ffaa3 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 }