Reapply "Fix bug with respawning"

This reverts commit 5bd1fb9ff6.
This commit is contained in:
Sofia 2026-07-27 01:36:09 +03:00
parent 5bd1fb9ff6
commit 327e19fd1a
2 changed files with 9 additions and 15 deletions

View File

@ -840,15 +840,14 @@ impl Game {
&& let Some(mut character) = player.character.clone() && let Some(mut character) = player.character.clone()
{ {
// This is a respawn, remove old character // This is a respawn, remove old character
character.queue_free();
if let Some(mut recorder) = self.replay_recorder.clone() if let Some(mut recorder) = self.replay_recorder.clone()
&& let Some(state) = player.get_state() && let Some(state) = player.get_state(player.clone())
{ {
recorder recorder
.bind_mut() .bind_mut()
.record_event(ReplayEvent::Respawn(id, state)); .record_event(ReplayEvent::Respawn(id, state));
} }
character.queue_free();
} }
if let Some(mut map) = self.current_map.clone() { 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(map) = &mut self.current_map {
if let Some(player) = self.players.iter_mut().find(|p| p.id() == id) { 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 // This is a respawn, delete old character
character.queue_free();
if let Some(mut recorder) = self.replay_recorder.clone() if let Some(mut recorder) = self.replay_recorder.clone()
&& let Some(state) = player.get_state() && let Some(state) = player.get_state(player.clone())
{ {
recorder recorder
.bind_mut() .bind_mut()
.record_event(ReplayEvent::Respawn(id, state)); .record_event(ReplayEvent::Respawn(id, state));
} }
character.queue_free();
} }
let mut character = map.bind_mut().spawn_player( let mut character = map.bind_mut().spawn_player(

View File

@ -386,7 +386,7 @@ impl ReplayRecorder {
if let Some(game) = Game::singleton() { if let Some(game) = Game::singleton() {
for player in &game.bind().players { 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); player_data.insert(player.id(), state);
} }
if let Some(replay_player) = self.replay.players.get_mut(&player.id()) { if let Some(replay_player) = self.replay.players.get_mut(&player.id()) {
@ -523,13 +523,8 @@ pub struct ReplayPlayerState {
} }
impl Player { impl Player {
pub fn get_state(&self) -> Option<ReplayPlayerState> { pub fn get_state(&self, player: Player) -> Option<ReplayPlayerState> {
if let Some(character) = &self.character 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))
{
Some(ReplayPlayerState { Some(ReplayPlayerState {
transform: character.dyn_bind().get_transform(), transform: character.dyn_bind().get_transform(),
movement_dir: character.dyn_bind().get_movement_dir().into(), movement_dir: character.dyn_bind().get_movement_dir().into(),