Stop recording when game ends

This commit is contained in:
Sofia 2026-07-26 21:09:29 +03:00
parent 506d0f3b50
commit b3ecbfccd8
2 changed files with 18 additions and 0 deletions

View File

@ -431,6 +431,10 @@ impl Game {
} }
pub fn reset_game(&mut self) { 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 if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer
&& let PeerKind::Server(peer, _) = peer && let PeerKind::Server(peer, _) = peer
&& let Some(player) = self.find_player_mut(self.self_id.unwrap_or(0)) && 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) { pub fn finish_game(&mut self) {
if let Some(recorder) = &mut self.replay_recorder {
recorder.bind_mut().stop_recording();
}
self.game_started = false; self.game_started = false;
for player in &mut self.players { for player in &mut self.players {

View File

@ -193,12 +193,15 @@ pub struct ReplayRecorder {
pub replay: Replay, pub replay: Replay,
current_frame: ReplayFrame, current_frame: ReplayFrame,
recording: bool,
base: Base<Node>, base: Base<Node>,
} }
#[godot_api] #[godot_api]
impl INode for ReplayRecorder { impl INode for ReplayRecorder {
fn ready(&mut self) { fn ready(&mut self) {
self.recording = true;
self.run_deferred(|s| { self.run_deferred(|s| {
s.current_frame = s.record_frame(); s.current_frame = s.record_frame();
@ -220,6 +223,9 @@ impl INode for ReplayRecorder {
} }
fn physics_process(&mut self, delta: f64) { fn physics_process(&mut self, delta: f64) {
if !self.recording {
return;
}
self.time_elapsed += delta; self.time_elapsed += delta;
if self.time_elapsed > (self.current_frame.time + (1. / 60.)) { if self.time_elapsed > (self.current_frame.time + (1. / 60.)) {
@ -234,6 +240,10 @@ impl ReplayRecorder {
self.current_frame.events.push(event); self.current_frame.events.push(event);
} }
pub fn stop_recording(&mut self) {
self.recording = false;
}
fn record_frame(&mut self) -> ReplayFrame { fn record_frame(&mut self) -> ReplayFrame {
let mut player_data = HashMap::new(); let mut player_data = HashMap::new();