diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 39c6e9a..03b8c77 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -355,6 +355,23 @@ impl Game { self.current_replay_playback = Some(playback.clone()); self.base_mut().add_child(&playback); } + + for player in &mut self.players { + if let Some(character) = &mut player.character { + character.set_visible(false); + } + } + } + + pub fn stop_playback(&mut self) { + if let Some(mut playback) = self.current_replay_playback.take() { + playback.queue_free(); + } + for player in &mut self.players { + if let Some(character) = &mut player.character { + character.set_visible(true); + } + } } pub fn start_game(&mut self) { diff --git a/rust/src/replay.rs b/rust/src/replay.rs index debd8fa..90f23af 100644 --- a/rust/src/replay.rs +++ b/rust/src/replay.rs @@ -66,7 +66,10 @@ impl INode for ReplayPlayback { character.bind_mut().apply_look_up(state.look_up); character .bind_mut() - .set_movement_dir(state.movement_dir.into()) + .set_movement_dir(state.movement_dir.into()); + character + .bind_mut() + .swap_weapon(state.current_weapon, false); } else { character.queue_free(); self.player_characters.remove(&id); @@ -75,6 +78,13 @@ impl INode for ReplayPlayback { self.current_frame_idx += 1; } } + + fn exit_tree(&mut self) { + for (_, character) in &mut self.player_characters { + character.queue_free(); + } + self.player_characters.clear(); + } } #[derive(GodotClass)]