Record taking damage in replay
This commit is contained in:
parent
c0e746a8e2
commit
8abcd9ec68
@ -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));
|
||||||
|
|||||||
@ -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)]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user