From c5b0319ac4c9d238107e0031746f978de32163c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Max=20K=C3=A4nner?= Date: Sat, 5 Oct 2024 18:56:19 +0200 Subject: [PATCH] fix latency calculation standard Duration can't go negative --- battlesnake/src/logic.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/battlesnake/src/logic.rs b/battlesnake/src/logic.rs index ca7c1f9..8de4b80 100644 --- a/battlesnake/src/logic.rs +++ b/battlesnake/src/logic.rs @@ -125,18 +125,16 @@ pub fn get_move(game: &Game, turn: i32, board: &Board, you: &Battlesnake) -> Opt + game_info.calculation_time.lock().map_or_else( |_| Duration::from_millis(u64::from(game.timeout) / 2), |mut guard| { - let new_duration = *guard - + Duration::from_millis( - u64::from(game.timeout) * 7 / 8 - - you - .latency - .parse() - .unwrap_or(u64::from(game.timeout) * 7 / 8), - ); - *guard = new_duration.clamp( - Duration::from_millis(1), - Duration::from_millis(u64::from(game.timeout) * 7 / 8), - ); + let target_latency = game.timeout * 3 / 4; + let latency = you.latency.parse().unwrap_or_else(|e| { + error!("Unable to parse latency: {e}"); + target_latency + }); + let last_computation_time = u32::try_from(guard.as_millis()).unwrap_or(0); + let computation_time = + (last_computation_time + target_latency).saturating_sub(latency); + *guard = + Duration::from_millis(u64::from(computation_time.clamp(1, target_latency))); *guard }, );