Record taking damage in replay

This commit is contained in:
Sofia 2026-07-26 20:48:08 +03:00
parent c0e746a8e2
commit 8abcd9ec68
2 changed files with 22 additions and 0 deletions

View File

@ -1123,6 +1123,12 @@ impl Game {
// Handle taking damage, from server to client // Handle taking damage, from server to client
pub fn handle_take_damage(&mut self, source: DamageSource, player_id: u16, damage: i32) { 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(player) = self.find_player_mut(player_id) {
if let Some(character) = &mut player.character { if let Some(character) = &mut player.character {
character.dyn_bind_mut().take_damage(source, damage, false); 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 // 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) { 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 Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
if let PeerKind::Server(peer, _) = peer { if let PeerKind::Server(peer, _) = peer {
peer.broadcast_reliable(TakeDamage(source, target_player_id, damage)); peer.broadcast_reliable(TakeDamage(source, target_player_id, damage));

View File

@ -119,6 +119,13 @@ impl INode for ReplayPlayback {
character.bind_mut().try_punch(*to, false); 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), Respawn(u16, ReplayPlayerState),
Jump(u16), Jump(u16),
Punch(u16, Vector3), Punch(u16, Vector3),
TakeDamage(u16, DamageSource, i32),
} }
#[derive(Debug, Clone, Default)] #[derive(Debug, Clone, Default)]