diff --git a/rust/src/game_manager.rs b/rust/src/game_manager.rs index 188b644..ddf4215 100644 --- a/rust/src/game_manager.rs +++ b/rust/src/game_manager.rs @@ -988,12 +988,12 @@ impl Game { // Handle a jump, either from the server or from a client pub fn handle_jump(&mut self, player_id: u16) { - if let Some(recorder) = &mut self.replay_recorder { - recorder - .bind_mut() - .record_event(ReplayEvent::Jump(player_id)); - } if player_id != self.self_id.unwrap_or(0) { + if let Some(recorder) = &mut self.replay_recorder { + recorder + .bind_mut() + .record_event(ReplayEvent::Jump(player_id)); + } if let Some(player) = self.find_player_mut(player_id) { player.apply_jump(); } @@ -1009,15 +1009,14 @@ impl Game { look_up: f32, deal_damage: bool, ) -> bool { - if let Some(recorder) = &mut self.replay_recorder { - recorder - .bind_mut() - .record_event(ReplayEvent::Shoot(player_id, to.into())); - } - let self_id = self.self_id.clone().unwrap_or(0); - if let Some(player) = self.find_player_mut(player_id) { - if player.id() != self_id { + if player_id != self_id { + if let Some(recorder) = &mut self.replay_recorder { + recorder + .bind_mut() + .record_event(ReplayEvent::Shoot(player_id, to.into())); + } + if let Some(player) = self.find_player_mut(player_id) { player.try_shoot(to, transform, look_up, deal_damage) } else { false @@ -1036,15 +1035,14 @@ impl Game { look_up: f32, deal_damage: bool, ) -> bool { - if let Some(recorder) = &mut self.replay_recorder { - recorder - .bind_mut() - .record_event(ReplayEvent::Punch(player_id, to.into())); - } - let self_id = self.self_id.clone().unwrap_or(0); - if let Some(player) = self.find_player_mut(player_id) { - if player.id() != self_id { + if player_id != self_id { + if let Some(recorder) = &mut self.replay_recorder { + recorder + .bind_mut() + .record_event(ReplayEvent::Punch(player_id, to.into())); + } + if let Some(player) = self.find_player_mut(player_id) { player.try_punch(to, transform, look_up, deal_damage) } else { false @@ -1201,6 +1199,10 @@ impl Game { } } } + + pub fn recorder(&mut self) -> &mut Option> { + &mut self.replay_recorder + } } #[derive(Clone, Debug)] diff --git a/rust/src/player/local_player.rs b/rust/src/player/local_player.rs index ffacd83..7623d68 100644 --- a/rust/src/player/local_player.rs +++ b/rust/src/player/local_player.rs @@ -29,6 +29,7 @@ use crate::{ soldier_mesh::SoldierMesh, weapon::{BallWeapon, Raygun, Shotgun, Weapon, WeaponType}, }, + replay::ReplayEvent, ui::{chatbox::ChatBox, cli::CommandLinePanel, settings::SettingsPanel}, }; @@ -142,6 +143,13 @@ impl IPlayer for LocalPlayer { fn jump(&mut self) { if self.try_jump() { + if let Some(game) = &mut Game::singleton() + && let Some(recorder) = game.bind_mut().recorder() + { + recorder + .bind_mut() + .record_event(ReplayEvent::Jump(self.player_id.unwrap_or(0))); + } if let Some(effects) = &mut self.effects { effects.bind_mut().jump(); } @@ -163,7 +171,18 @@ impl IPlayer for LocalPlayer { fn apply_look_up(&mut self, _look: f32) {} fn try_shoot(&mut self, to: Vector3, deal_damage: bool) -> bool { - self.try_shoot_common(to, deal_damage) + if self.try_shoot_common(to, deal_damage) { + if let Some(game) = &mut Game::singleton() + && let Some(recorder) = game.bind_mut().recorder() + { + recorder + .bind_mut() + .record_event(ReplayEvent::Shoot(self.player_id.unwrap_or(0), to.into())); + } + true + } else { + false + } } fn try_punch(&mut self, to: Vector3, deal_damage: bool) -> bool { @@ -173,7 +192,18 @@ impl IPlayer for LocalPlayer { weapon.set_rotation(Vector3::UP); } self.punch_cd_remaining = self.punch_cooldown; - self.try_punch_common(to, deal_damage) + if self.try_punch_common(to, deal_damage) { + if let Some(game) = &mut Game::singleton() + && let Some(recorder) = game.bind_mut().recorder() + { + recorder + .bind_mut() + .record_event(ReplayEvent::Punch(self.player_id.unwrap_or(0), to.into())); + } + true + } else { + false + } } else { false } diff --git a/rust/src/replay.rs b/rust/src/replay.rs index 094ca3b..e82f63d 100644 --- a/rust/src/replay.rs +++ b/rust/src/replay.rs @@ -362,6 +362,7 @@ impl ReplayRecorder { } pub fn stop_recording(&mut self) { + self.replay.frames.push(self.current_frame.clone()); self.recording = false; } diff --git a/rust/src/ui/replay_finished_screen.rs b/rust/src/ui/replay_finished_screen.rs index 72b4a3d..ac5264f 100644 --- a/rust/src/ui/replay_finished_screen.rs +++ b/rust/src/ui/replay_finished_screen.rs @@ -43,7 +43,6 @@ impl ReplayFinishedScreen { fn produce_title(&mut self) { if let Some(playback) = &StandaloneReplayManager::singleton().bind().playback { let playback = playback.bind(); - godot_print!("{:?}", playback.replay.goals); let max_goals = playback .replay .goals