Fix problem with weapon swapping in replays

This commit is contained in:
Sofia 2026-07-26 20:26:23 +03:00
parent 91f76b3836
commit 6badb845b5

View File

@ -51,7 +51,7 @@ impl INode for ReplayPlayback {
if !self.fast_forwarding { if !self.fast_forwarding {
if let Some(map) = &mut self.current_map { if let Some(map) = &mut self.current_map {
for (id, data) in &frame.player_data { for (id, data) in &frame.player_data {
if !self.player_characters.contains_key(id) { if !self.player_characters.contains_key(id) && !data.is_dead {
if let Some(player) = if let Some(player) =
map.bind_mut().spawn_replay_player(*id, data.clone()) map.bind_mut().spawn_replay_player(*id, data.clone())
{ {
@ -97,9 +97,14 @@ impl INode for ReplayPlayback {
character character
.bind_mut() .bind_mut()
.set_movement_dir(state.movement_dir.into()); .set_movement_dir(state.movement_dir.into());
let weapon = character.bind().get_weapon().clone();
if let Some(weapon) = weapon
&& weapon.dyn_bind().get_type() != state.current_weapon
{
character character
.bind_mut() .bind_mut()
.swap_weapon(state.current_weapon, false); .swap_weapon(state.current_weapon, false);
}
} else { } else {
character.queue_free(); character.queue_free();
self.player_characters.remove(&id); self.player_characters.remove(&id);
@ -238,6 +243,7 @@ pub struct ReplayPlayerState {
pub movement_dir: NetVector3, pub movement_dir: NetVector3,
pub look_up: f32, pub look_up: f32,
pub current_weapon: WeaponType, pub current_weapon: WeaponType,
pub is_dead: bool,
} }
impl Player { impl Player {
@ -252,6 +258,7 @@ impl Player {
.get_weapon() .get_weapon()
.map(|w| w.dyn_bind().get_type()) .map(|w| w.dyn_bind().get_type())
.unwrap_or(WeaponType::Raygun), .unwrap_or(WeaponType::Raygun),
is_dead: character.dyn_bind().is_dead(),
}) })
} else { } else {
None None