mirror of
https://github.com/gopher64/gopher64.git
synced 2026-07-11 01:25:20 +02:00
pass all args (#957)
This commit is contained in:
@@ -20,55 +20,18 @@ class N64Activity : SDLActivity() {
|
||||
|
||||
override fun getArguments(): Array<String> {
|
||||
val intent = intent ?: return super.getArguments()
|
||||
val request_code = intent.getIntExtra("request_code", 0)
|
||||
if (request_code == CONFIGURE_INPUT_PROFILE) {
|
||||
val profile = intent.getStringExtra("profile_name") ?: return super.getArguments()
|
||||
val deadzone = intent.getIntExtra("deadzone", -1)
|
||||
val args = mutableListOf(
|
||||
"--configure-input-profile",
|
||||
profile,
|
||||
)
|
||||
if (intent.getBooleanExtra("dinput", false)) {
|
||||
args.add("--use-dinput")
|
||||
}
|
||||
if (deadzone != -1) {
|
||||
args.add("--deadzone")
|
||||
args.add(deadzone.toString())
|
||||
}
|
||||
setResult(RESULT_OK) // so that the profiles are updated in the GUI
|
||||
return args.toTypedArray()
|
||||
} else if (request_code == RUN_ROM) {
|
||||
val file_path = intent.getStringExtra("file_path") ?: return super.getArguments()
|
||||
val overclock = intent.getBooleanExtra("overclock", false)
|
||||
val disable_expansion_pak = intent.getBooleanExtra("disable_expansion_pak", false)
|
||||
val args = mutableListOf(
|
||||
file_path,
|
||||
"--fullscreen",
|
||||
"--overclock",
|
||||
overclock.toString(),
|
||||
"--disable-expansion-pak",
|
||||
disable_expansion_pak.toString())
|
||||
|
||||
val dataIntent = Intent()
|
||||
|
||||
val netplay_peer_addr = intent.getStringExtra("netplay_peer_addr")
|
||||
val cheats = intent.getStringExtra("cheats")
|
||||
if (netplay_peer_addr != null && cheats != null) {
|
||||
args.add("--netplay-peer-addr")
|
||||
args.add(netplay_peer_addr)
|
||||
args.add("--netplay-player-number")
|
||||
args.add(intent.getIntExtra("netplay_player_number", 4).toString())
|
||||
args.add("--cheats")
|
||||
args.add(cheats)
|
||||
dataIntent.putExtra("cheats_path", cheats)
|
||||
}
|
||||
val args = intent.getStringArrayExtra("args") ?: return super.getArguments()
|
||||
|
||||
val dataIntent = Intent()
|
||||
val file_path = intent.getStringExtra("file_path")
|
||||
if (file_path != null) {
|
||||
dataIntent.putExtra("file_path", file_path)
|
||||
|
||||
setResult(RESULT_OK, dataIntent)
|
||||
return args.toTypedArray()
|
||||
} else {
|
||||
return super.getArguments()
|
||||
}
|
||||
val cheats_path = intent.getStringExtra("cheats_path")
|
||||
if (cheats_path != null) {
|
||||
dataIntent.putExtra("cheats_path", cheats_path)
|
||||
}
|
||||
setResult(RESULT_OK, dataIntent)
|
||||
return args
|
||||
}
|
||||
}
|
||||
|
||||
+57
-46
@@ -2,7 +2,7 @@ use crate::Args;
|
||||
use crate::run;
|
||||
use crate::ui;
|
||||
use clap::Parser;
|
||||
use jni::objects::{JClass, JObject, JString};
|
||||
use jni::objects::{JClass, JObject, JObjectArray, JString};
|
||||
use jni::refs::Global;
|
||||
use jni::sys::jint;
|
||||
use jni::{Env, EnvUnowned, JavaVM, bind_java_type};
|
||||
@@ -77,12 +77,8 @@ bind_java_type! {
|
||||
sig = (extra: JString, value: JString) -> AndroidIntent,
|
||||
name = "putExtra",
|
||||
},
|
||||
fn put_extra_boolean {
|
||||
sig = (extra: JString, value: jboolean) -> AndroidIntent,
|
||||
name = "putExtra",
|
||||
},
|
||||
fn put_extra_int {
|
||||
sig = (extra: JString, value: jint) -> AndroidIntent,
|
||||
fn put_extra_string_array {
|
||||
sig = (extra: JString, value: JString[]) -> AndroidIntent,
|
||||
name = "putExtra",
|
||||
},
|
||||
fn get_string_extra(name: JString) -> JString,
|
||||
@@ -206,17 +202,24 @@ fn start_configure_input_profile_on_jvm(
|
||||
let package_name = JString::from_str(env, "io.github.gopher64.gopher64")?;
|
||||
let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?;
|
||||
|
||||
let request_code_key = JString::from_str(env, "request_code")?;
|
||||
let profile_name_key = JString::from_str(env, "profile_name")?;
|
||||
let profile_name_value = JString::from_str(env, profile_name)?;
|
||||
let dinput_key = JString::from_str(env, "dinput")?;
|
||||
let deadzone_key = JString::from_str(env, "deadzone")?;
|
||||
let args_key = JString::from_str(env, "args")?;
|
||||
let mut args = vec![
|
||||
JString::from_str(env, "--configure-input-profile")?,
|
||||
JString::from_str(env, &profile_name)?,
|
||||
JString::from_str(env, "--deadzone")?,
|
||||
JString::from_str(env, &deadzone.to_string())?,
|
||||
];
|
||||
if dinput {
|
||||
args.push(JString::from_str(env, "--use-dinput")?);
|
||||
}
|
||||
let empty_arg = JString::from_str(env, "")?;
|
||||
let j_args = JObjectArray::<JString>::new(env, args.len(), empty_arg)?;
|
||||
for (i, arg) in args.iter().enumerate() {
|
||||
j_args.set_element(env, i, arg)?;
|
||||
}
|
||||
let intent = AndroidIntent::new(env)?
|
||||
.set_class_name(env, &package_name, &class_name)?
|
||||
.put_extra_string(env, &profile_name_key, &profile_name_value)?
|
||||
.put_extra_boolean(env, &dinput_key, dinput)?
|
||||
.put_extra_int(env, &deadzone_key, deadzone)?
|
||||
.put_extra_int(env, &request_code_key, CONFIGURE_INPUT_PROFILE)?;
|
||||
.put_extra_string_array(env, &args_key, &j_args)?;
|
||||
|
||||
activity
|
||||
.as_ref()
|
||||
@@ -259,42 +262,50 @@ fn start_run_rom_on_jvm(
|
||||
let class_name = JString::from_str(env, "io.github.gopher64.gopher64.N64Activity")?;
|
||||
|
||||
let file_path_key = JString::from_str(env, "file_path")?;
|
||||
let file_path_value = JString::from_str(env, file_path.to_str().unwrap())?;
|
||||
let overclock_key = JString::from_str(env, "overclock")?;
|
||||
let disable_expansion_pak_key = JString::from_str(env, "disable_expansion_pak")?;
|
||||
let request_code_key = JString::from_str(env, "request_code")?;
|
||||
let mut intent = AndroidIntent::new(env)?
|
||||
.set_class_name(env, &package_name, &class_name)?
|
||||
.put_extra_int(env, &request_code_key, RUN_ROM)?
|
||||
.put_extra_string(env, &file_path_key, &file_path_value)?
|
||||
.put_extra_boolean(env, &overclock_key, game_settings.overclock)?
|
||||
.put_extra_boolean(
|
||||
env,
|
||||
&disable_expansion_pak_key,
|
||||
game_settings.disable_expansion_pak,
|
||||
)?;
|
||||
let file_path = file_path.to_str().unwrap();
|
||||
let cheats_path_key = JString::from_str(env, "cheats_path")?;
|
||||
let cheats_path = app
|
||||
.internal_data_path()
|
||||
.unwrap()
|
||||
.join("cache")
|
||||
.join("cheats.json");
|
||||
|
||||
let args_key = JString::from_str(env, "args")?;
|
||||
let mut args = vec![
|
||||
JString::from_str(env, file_path)?,
|
||||
JString::from_str(env, "--fullscreen")?,
|
||||
JString::from_str(env, "--overclock")?,
|
||||
JString::from_str(env, &game_settings.overclock.to_string())?,
|
||||
JString::from_str(env, "--disable-expansion-pak")?,
|
||||
JString::from_str(env, &game_settings.disable_expansion_pak.to_string())?,
|
||||
];
|
||||
|
||||
if let Some(netplay) = netplay {
|
||||
let netplay_peer_addr_key = JString::from_str(env, "netplay_peer_addr")?;
|
||||
let netplay_player_number_key = JString::from_str(env, "netplay_player_number")?;
|
||||
let netplay_peer_addr_value = JString::from_str(env, &netplay.peer_addr.to_string())?;
|
||||
let cheats_key = JString::from_str(env, "cheats")?;
|
||||
let cheats_path = ui::get_dirs().cache_dir.join("cheats.json");
|
||||
let cheats_value = JString::from_str(env, cheats_path.to_str().unwrap())?;
|
||||
args.push(JString::from_str(env, "--netplay-peer-addr")?);
|
||||
args.push(JString::from_str(env, &netplay.peer_addr.to_string())?);
|
||||
args.push(JString::from_str(env, "--netplay-player-number")?);
|
||||
args.push(JString::from_str(env, &netplay.player_number.to_string())?);
|
||||
args.push(JString::from_str(env, "--cheats")?);
|
||||
args.push(JString::from_str(env, cheats_path.to_str().unwrap())?);
|
||||
|
||||
let f = std::fs::File::create(cheats_path).unwrap();
|
||||
let f = std::fs::File::create(&cheats_path).unwrap();
|
||||
serde_json::to_writer_pretty(f, &game_settings.cheats).unwrap();
|
||||
|
||||
intent = intent
|
||||
.put_extra_string(env, &netplay_peer_addr_key, &netplay_peer_addr_value)?
|
||||
.put_extra_int(
|
||||
env,
|
||||
&netplay_player_number_key,
|
||||
netplay.player_number as jint,
|
||||
)?
|
||||
.put_extra_string(env, &cheats_key, &cheats_value)?;
|
||||
}
|
||||
|
||||
let empty_arg = JString::from_str(env, "")?;
|
||||
let j_args = JObjectArray::<JString>::new(env, args.len(), empty_arg)?;
|
||||
for (i, arg) in args.iter().enumerate() {
|
||||
j_args.set_element(env, i, arg)?;
|
||||
}
|
||||
|
||||
let file_path_string = JString::from_str(env, file_path)?;
|
||||
let cheats_path_string = JString::from_str(env, cheats_path.to_str().unwrap())?;
|
||||
let intent = AndroidIntent::new(env)?
|
||||
.set_class_name(env, &package_name, &class_name)?
|
||||
.put_extra_string(env, &file_path_key, &file_path_string)?
|
||||
.put_extra_string(env, &cheats_path_key, &cheats_path_string)?
|
||||
.put_extra_string_array(env, &args_key, &j_args)?;
|
||||
|
||||
weak.upgrade_in_event_loop(move |handle| handle.set_game_running(true))
|
||||
.unwrap();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user