diff --git a/rust/src/player/effects.rs b/rust/src/player/effects.rs index 9e9c221..4af3002 100644 --- a/rust/src/player/effects.rs +++ b/rust/src/player/effects.rs @@ -46,4 +46,11 @@ impl PlayerEffects { } self.walk_sfx_cd_remaining = self.walk_sfx_cd; } + + pub fn jump(&mut self) { + if let Some(walk) = &mut self.walk_sound { + walk.play(); + } + self.walk_sfx_cd_remaining = 0.; + } } diff --git a/rust/src/player/mod.rs b/rust/src/player/mod.rs index 06f4a1b..d8e2d1f 100644 --- a/rust/src/player/mod.rs +++ b/rust/src/player/mod.rs @@ -275,6 +275,9 @@ impl IPlayer for LocalPlayer { fn jump(&mut self) { if self.try_jump() { + if let Some(effects) = &mut self.effects { + effects.bind_mut().jump(); + } if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { match peer { PeerKind::Client(peer, addr) => peer.send_reliable(&addr, Jump(0)), @@ -542,7 +545,7 @@ impl ICharacterBody3D for LocalPlayer { scoreboard.set_visible(Input::singleton().is_action_pressed("scoreboard")); } - if self.movement_dir.length_squared() > 0. { + if self.movement_dir.length_squared() > 0. && self.base().is_on_floor() { if let Some(effects) = &mut self.effects { effects.bind_mut().walk(); } @@ -844,7 +847,11 @@ impl IPlayer for RemotePlayer { } fn jump(&mut self) { - self.try_jump(); + if self.try_jump() { + if let Some(effects) = &mut self.effects { + effects.bind_mut().jump(); + } + } } fn get_look_up(&self) -> f32 { @@ -995,6 +1002,7 @@ impl ICharacterBody3D for RemotePlayer { } if self.movement_dir.length_squared() > 0. + && self.base().is_on_floor() && let Some(effects) = &mut self.effects { effects.bind_mut().walk();