From b3ecbfccd85ef3ed2e5145d372664d36c48f2296 Mon Sep 17 00:00:00 2001 From: Sofia Date: Sun, 26 Jul 2026 21:09:29 +0300 Subject: [PATCH] Stop recording when game ends --- rust/src/game_manager.rs | 8 ++++++++ rust/src/replay.rs | 10 ++++++++++ 2 files changed, 18 insertions(+) diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 9e456ff..7ff80a3 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -431,6 +431,10 @@ impl Game { } pub fn reset_game(&mut self) { + if let Some(mut recorder) = self.replay_recorder.take() { + recorder.queue_free(); + } + if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer && let PeerKind::Server(peer, _) = peer && let Some(player) = self.find_player_mut(self.self_id.unwrap_or(0)) @@ -446,6 +450,10 @@ impl Game { } pub fn finish_game(&mut self) { + if let Some(recorder) = &mut self.replay_recorder { + recorder.bind_mut().stop_recording(); + } + self.game_started = false; for player in &mut self.players { diff --git a/rust/src/replay.rs b/rust/src/replay.rs index 1513ecf..21c37a1 100644 --- a/rust/src/replay.rs +++ b/rust/src/replay.rs @@ -193,12 +193,15 @@ pub struct ReplayRecorder { pub replay: Replay, current_frame: ReplayFrame, + recording: bool, + base: Base, } #[godot_api] impl INode for ReplayRecorder { fn ready(&mut self) { + self.recording = true; self.run_deferred(|s| { s.current_frame = s.record_frame(); @@ -220,6 +223,9 @@ impl INode for ReplayRecorder { } fn physics_process(&mut self, delta: f64) { + if !self.recording { + return; + } self.time_elapsed += delta; if self.time_elapsed > (self.current_frame.time + (1. / 60.)) { @@ -234,6 +240,10 @@ impl ReplayRecorder { self.current_frame.events.push(event); } + pub fn stop_recording(&mut self) { + self.recording = false; + } + fn record_frame(&mut self) -> ReplayFrame { let mut player_data = HashMap::new();