From 8abcd9ec681a73b6a3f4370e98f17682c46cc1b0 Mon Sep 17 00:00:00 2001 From: Sofia Date: Sun, 26 Jul 2026 20:48:08 +0300 Subject: [PATCH] Record taking damage in replay --- rust/src/game_manager.rs | 14 ++++++++++++++ rust/src/replay.rs | 8 ++++++++ 2 files changed, 22 insertions(+) diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 2e6c908..0b6c708 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -1123,6 +1123,12 @@ impl Game { // Handle taking damage, from server to client pub fn handle_take_damage(&mut self, source: DamageSource, player_id: u16, damage: i32) { + if let Some(recorder) = &mut self.replay_recorder { + recorder + .bind_mut() + .record_event(ReplayEvent::TakeDamage(player_id, source, damage)); + } + 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); @@ -1142,6 +1148,14 @@ impl Game { // Called whenever a player takes damage on the server-side pub fn on_take_damage(&mut self, source: DamageSource, target_player_id: u16, damage: i32) { + if let Some(recorder) = &mut self.replay_recorder { + recorder.bind_mut().record_event(ReplayEvent::TakeDamage( + target_player_id, + source, + damage, + )); + } + 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/replay.rs b/rust/src/replay.rs index 1649795..6a4fe32 100644 --- a/rust/src/replay.rs +++ b/rust/src/replay.rs @@ -119,6 +119,13 @@ impl INode for ReplayPlayback { character.bind_mut().try_punch(*to, false); } } + ReplayEvent::TakeDamage(player_id, damage_source, damage) => { + if let Some(character) = self.player_characters.get_mut(player_id) { + character + .bind_mut() + .take_damage(*damage_source, *damage, false); + } + } } } } @@ -282,6 +289,7 @@ pub enum ReplayEvent { Respawn(u16, ReplayPlayerState), Jump(u16), Punch(u16, Vector3), + TakeDamage(u16, DamageSource, i32), } #[derive(Debug, Clone, Default)]