From f6b9fcd3d2436348e11b8de6f5aba94343eaf7b2 Mon Sep 17 00:00:00 2001 From: Logan McNaughton <848146+loganmc10@users.noreply.github.com> Date: Wed, 11 Nov 2026 18:50:58 +0000 Subject: [PATCH] allow input delay of 0 (#1379) --- src/netplay.rs | 4 ++-- src/ui/gui/appwindow.slint | 1 + src/ui/gui/netplay_wait.slint | 5 +++-- src/ui/netplay.rs | 13 ++++++++----- 4 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/netplay.rs b/src/netplay.rs index a6bd2141..1da77372 100644 --- a/src/netplay.rs +++ b/src/netplay.rs @@ -3,7 +3,7 @@ use crate::savestates; use crate::ui; use sha2::digest::Digest; -const MAX_PREDICTION_WINDOW: usize = 16; +pub const MAX_PREDICTION_WINDOW: usize = 16; #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct RtcIceServerConfig { @@ -203,7 +203,7 @@ pub fn receive_save(netplay: &mut Netplay, save_type: &str, save_data: &mut Vec< } pub fn change_input_delay(netplay: &mut Netplay, input_delay: usize) { - if !(1..=MAX_PREDICTION_WINDOW).contains(&input_delay) { + if input_delay > MAX_PREDICTION_WINDOW { return; } diff --git a/src/ui/gui/appwindow.slint b/src/ui/gui/appwindow.slint index 3820bcc5..9896cfe6 100644 --- a/src/ui/gui/appwindow.slint +++ b/src/ui/gui/appwindow.slint @@ -132,6 +132,7 @@ export component AppWindow inherits Window { in-out property netplay_chat_text <=> NetplayWaitData.chat_text; in-out property netplay_input_delay <=> NetplayWaitData.input_delay; in-out property netplay_recommended_delay <=> NetplayWaitData.recommended_delay; + in-out property netplay_max_input_delay <=> NetplayWaitData.max_input_delay; in-out property netplay_game_pal <=> NetplayWaitData.game_pal; in-out property netplay_connected_peers_count <=> NetplayWaitData.connected_peers_count; diff --git a/src/ui/gui/netplay_wait.slint b/src/ui/gui/netplay_wait.slint index 9cb17370..99f469de 100644 --- a/src/ui/gui/netplay_wait.slint +++ b/src/ui/gui/netplay_wait.slint @@ -19,6 +19,7 @@ export global NetplayWaitData { in-out property chat_text; in-out property input_delay; in-out property recommended_delay; + in-out property max_input_delay; in-out property game_pal; in-out property connected_peers_count; } @@ -116,8 +117,8 @@ export component NetplayWait inherits Page { SpinBox { height: self.min-height; - minimum: 1; - maximum: 16; + minimum: 0; + maximum: NetplayWaitData.max_input_delay; value: NetplayWaitData.input_delay; enabled: NetplayWaitData.recommended_delay != 0; edited => { diff --git a/src/ui/netplay.rs b/src/ui/netplay.rs index 5e459003..916b1e68 100644 --- a/src/ui/netplay.rs +++ b/src/ui/netplay.rs @@ -1,4 +1,5 @@ use crate::device; +use crate::netplay; use crate::netplay::RtcIceServerConfig; use crate::ui; use crate::ui::gui::{AppWindow, open_uri, run_rom, save_settings, show_touch_overlay}; @@ -688,8 +689,8 @@ fn update_ping( 60.0 }; let latency_frames = (ping_avg / (1000.0 / refresh_rate)).ceil() as i32; - let recommendation = - (latency_frames + 1).min(16); + let recommendation = (latency_frames + 1) + .min(netplay::MAX_PREDICTION_WINDOW as i32); if handle.get_netplay_recommended_delay() == 0 { handle.set_netplay_input_delay(recommendation); @@ -801,9 +802,9 @@ fn setup_wait_window( let players = handle.get_netplay_players(); // Input delay is per-player: use our own choice, falling back // to the host's if our recommendation hasn't been calculated yet. - let local_input_delay = handle.get_netplay_input_delay(); - let input_delay = if local_input_delay > 0 { - local_input_delay as usize + let input_delay = if handle.get_netplay_recommended_delay() > 0 + { + handle.get_netplay_input_delay() as usize } else { response .sessions @@ -1027,6 +1028,8 @@ pub fn netplay_window( app: &AppWindow, no_intro_map: std::sync::Arc>>, ) { + app.set_netplay_max_input_delay(netplay::MAX_PREDICTION_WINDOW as i32); + let (netplay_read_sender, netplay_read_receiver): ( tokio::sync::broadcast::Sender>, tokio::sync::broadcast::Receiver>,