diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 2e24b71..d7168fc 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -1125,14 +1125,6 @@ impl Game { .record_event(ReplayEvent::Death(source, player_id)); } - if let DamageSource::Player(source_player_id) = source - && let Some(player) = self.find_player(source_player_id) - && let Some(character) = player.character.clone() - && let Ok(mut local_player) = character.try_cast::() - { - local_player.bind_mut().play_local_hit_sound(); - } - let total_prev_kills: u16 = self.players.iter().map(|p| p.data.kills).sum(); if let Some(chat) = &mut Chat::singleton() { @@ -1221,6 +1213,14 @@ impl Game { .record_event(ReplayEvent::TakeDamage(player_id, source, damage)); } + if let DamageSource::Player(source_player_id) = source + && let Some(player) = self.find_player(source_player_id) + && let Some(character) = player.character.clone() + && let Ok(mut local_player) = character.try_cast::() + { + local_player.bind_mut().play_local_hit_sound(); + } + if let Some(player) = self.find_player_mut(player_id) { if let Some(character) = &mut player.character { character.dyn_bind_mut().take_damage(source, damage, false); @@ -1248,6 +1248,14 @@ impl Game { )); } + if let DamageSource::Player(source_player_id) = source + && let Some(player) = self.find_player(source_player_id) + && let Some(character) = player.character.clone() + && let Ok(mut local_player) = character.try_cast::() + { + local_player.bind_mut().play_local_hit_sound(); + } + if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { if let PeerKind::Server(peer, _) = peer { peer.broadcast_reliable(TakeDamage(source, target_player_id, damage)); diff --git a/rust/src/player/effects.rs b/rust/src/player/effects.rs index 4af3002..44b0fa4 100644 --- a/rust/src/player/effects.rs +++ b/rust/src/player/effects.rs @@ -37,6 +37,12 @@ impl PlayerEffects { } } + pub fn hit(&mut self) { + if let Some(sfx) = &mut self.hit_sound { + sfx.play(); + } + } + pub fn walk(&mut self) { if self.walk_sfx_cd_remaining > 0. { return; diff --git a/rust/src/player/local_player.rs b/rust/src/player/local_player.rs index 528d397..a72d2a8 100644 --- a/rust/src/player/local_player.rs +++ b/rust/src/player/local_player.rs @@ -238,6 +238,10 @@ impl IPlayer for LocalPlayer { s.health -= damage; if kill && s.health <= 0 { s.kill(source); + } else { + if let Some(effects) = &mut s.effects { + effects.bind_mut().hit(); + } } } }); diff --git a/rust/src/player/remote_player.rs b/rust/src/player/remote_player.rs index a8e52a9..11fee3e 100644 --- a/rust/src/player/remote_player.rs +++ b/rust/src/player/remote_player.rs @@ -180,6 +180,10 @@ impl IPlayer for RemotePlayer { s.health -= damage; if kill && s.health <= 0 { s.kill(source); + } else { + if let Some(effects) = &mut s.effects { + effects.bind_mut().hit(); + } } } s.update_health_bar();