diff --git a/rust/src/map.rs b/rust/src/map.rs index 75dbcb4..ceac27a 100644 --- a/rust/src/map.rs +++ b/rust/src/map.rs @@ -117,6 +117,7 @@ impl Map { node.bind_mut().player_id = Some(player_id); node.bind_mut().player_name = player.name.clone(); node.bind_mut().player_color = player.color.clone().into(); + node.bind_mut().replay_mode = true; self.base_mut().add_child(&node); node.bind_mut() diff --git a/rust/src/player/local_player.rs b/rust/src/player/local_player.rs index 7623d68..2ccceda 100644 --- a/rust/src/player/local_player.rs +++ b/rust/src/player/local_player.rs @@ -301,6 +301,10 @@ impl IPlayer for LocalPlayer { fn get_camera_origin(&self) -> Option> { self.camera_origin.clone() } + + fn is_replay_mode(&self) -> bool { + false + } } #[godot_api] diff --git a/rust/src/player/mod.rs b/rust/src/player/mod.rs index 868b597..558782b 100644 --- a/rust/src/player/mod.rs +++ b/rust/src/player/mod.rs @@ -56,6 +56,7 @@ pub trait IPlayer { fn take_weapon(&mut self) -> Option>; fn drop_ball(&mut self, with_velocity: bool) -> bool; fn get_camera_origin(&self) -> Option>; + fn is_replay_mode(&self) -> bool; } pub trait PlayerCommon { @@ -181,7 +182,7 @@ impl PlayerCommon for T { return false; } - if self.drop_ball(true) { + if !self.is_replay_mode() && self.drop_ball(true) { return true; } diff --git a/rust/src/player/remote_player.rs b/rust/src/player/remote_player.rs index 7f353a1..9cfcb0a 100644 --- a/rust/src/player/remote_player.rs +++ b/rust/src/player/remote_player.rs @@ -48,6 +48,7 @@ pub struct RemotePlayer { pub player_id: Option, pub player_name: String, pub player_color: Color, + pub replay_mode: bool, movement_dir: Vector3, y_speed: f32, @@ -168,7 +169,9 @@ impl IPlayer for RemotePlayer { } fn kill(&mut self, source: DamageSource) { - self.drop_ball(false); + if !self.replay_mode { + self.drop_ball(false); + } let (signal, player, kind) = source.into_signal(); self.run_deferred(move |s| s.signals().on_die().emit(signal, player, kind)); @@ -223,6 +226,10 @@ impl IPlayer for RemotePlayer { fn get_camera_origin(&self) -> Option> { self.camera_origin.clone() } + + fn is_replay_mode(&self) -> bool { + self.replay_mode + } } #[godot_api]