Add replay events to server too

This commit is contained in:
Sofia 2026-07-26 23:11:58 +03:00
parent e75cb79c86
commit 8093ffb2be
4 changed files with 56 additions and 24 deletions

View File

@ -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<Gd<ReplayRecorder>> {
&mut self.replay_recorder
}
}
#[derive(Clone, Debug)]

View File

@ -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
}

View File

@ -362,6 +362,7 @@ impl ReplayRecorder {
}
pub fn stop_recording(&mut self) {
self.replay.frames.push(self.current_frame.clone());
self.recording = false;
}

View File

@ -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