use bevy_replicon::prelude::{FromClient, SendTargets, ToClients};
use crate::prelude::*;
use crate::shared::ecs::clock_sync::{ClientTiming, ServerTiming};
pub fn client_timing_plugin(app: &mut App) {
app.add_systems(Update, echo_timing);
}
fn echo_timing(
mut client_timings: MessageReader<FromClient<ClientTiming>>,
mut server_timings: MessageWriter<ToClients<ServerTiming>>,
time: Res<Time>,
) {
for client_timing in client_timings.read() {
let Ok(now) = web_time::SystemTime::now().duration_since(web_time::UNIX_EPOCH) else {
warn!("Could not get system time");
return
};
server_timings.write(ToClients {
targets: SendTargets::Single(client_timing.client_id),
message: ServerTiming {
client_tx: client_timing.time,
server: now.as_secs_f64(),
server_time_elapsed: time.elapsed_secs_f64(),
}
});
}
}