Fix bug with respawning

This commit is contained in:
Sofia 2026-07-27 00:36:21 +03:00
parent bc1bad8ab5
commit e259aacc01
2 changed files with 9 additions and 15 deletions

View File

@ -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(

View File

@ -383,7 +383,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()) {
@ -520,13 +520,8 @@ pub struct ReplayPlayerState {
}
impl Player {
pub fn get_state(&self) -> Option<ReplayPlayerState> {
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<ReplayPlayerState> {
if let Some(character) = &self.character {
Some(ReplayPlayerState {
transform: character.dyn_bind().get_transform(),
movement_dir: character.dyn_bind().get_movement_dir().into(),