diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index b24434c..b085cf8 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -840,15 +840,14 @@ impl Game { && let Some(mut character) = player.character.clone() { // This is a respawn, remove old character - character.queue_free(); - if let Some(mut recorder) = self.replay_recorder.clone() - && let Some(state) = player.get_state() + && let Some(state) = player.get_state(player.clone()) { recorder .bind_mut() .record_event(ReplayEvent::Respawn(id, state)); } + character.queue_free(); } if let Some(mut map) = self.current_map.clone() { @@ -919,17 +918,17 @@ impl Game { if let Some(map) = &mut self.current_map { if let Some(player) = self.players.iter_mut().find(|p| p.id() == id) { - if let Some(character) = &mut player.character { + if let Some(mut character) = player.character.clone() { // This is a respawn, delete old character - character.queue_free(); - if let Some(mut recorder) = self.replay_recorder.clone() - && let Some(state) = player.get_state() + && let Some(state) = player.get_state(player.clone()) { recorder .bind_mut() .record_event(ReplayEvent::Respawn(id, state)); } + + character.queue_free(); } let mut character = map.bind_mut().spawn_player( diff --git a/rust/src/replay.rs b/rust/src/replay.rs index 71ac46a..3cc0548 100644 --- a/rust/src/replay.rs +++ b/rust/src/replay.rs @@ -386,7 +386,7 @@ impl ReplayRecorder { if let Some(game) = Game::singleton() { for player in &game.bind().players { - if let Some(state) = player.get_state() { + if let Some(state) = player.get_state(player.clone()) { player_data.insert(player.id(), state); } if let Some(replay_player) = self.replay.players.get_mut(&player.id()) { @@ -523,13 +523,8 @@ pub struct ReplayPlayerState { } impl Player { - pub fn get_state(&self) -> Option { - if let Some(character) = &self.character - && let Some(game) = Game::singleton() - && let Some(player) = game - .bind() - .find_player(character.dyn_bind().get_player_id().unwrap_or(0)) - { + pub fn get_state(&self, player: Player) -> Option { + if let Some(character) = &self.character { Some(ReplayPlayerState { transform: character.dyn_bind().get_transform(), movement_dir: character.dyn_bind().get_movement_dir().into(),