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) {
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 {

View File

@ -193,12 +193,15 @@ pub struct ReplayRecorder {
pub replay: Replay,
current_frame: ReplayFrame,
recording: bool,
base: Base<Node>,
}
#[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();