Send syncs every physics_tick

This commit is contained in:
Sofia 2026-07-25 01:26:13 +03:00
parent 9769e7f91a
commit fcda202c49

View File

@ -225,51 +225,47 @@ impl INode for Game {
} }
fn physics_process(&mut self, delta: f64) { fn physics_process(&mut self, delta: f64) {
self.since_last_sync += delta; if let Some(_) = self.current_map {
if self.since_last_sync > (1. / 60.) { if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
self.since_last_sync = 0.; match peer {
if let Some(_) = self.current_map { PeerKind::Client(peer, socket_addr) => {
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer { if let Some(player) = self
match peer { .players
PeerKind::Client(peer, socket_addr) => { .iter()
if let Some(player) = self .find(|p| p.id() == self.self_id.unwrap_or(0))
.players {
.iter() if let Some(data) = &player.get_self_sync() {
.find(|p| p.id() == self.self_id.unwrap_or(0)) peer.send_unreliable(socket_addr, SelfSync(data.clone()));
{
if let Some(data) = &player.get_self_sync() {
peer.send_unreliable(socket_addr, SelfSync(data.clone()));
}
} }
} }
PeerKind::Server(peer, _) => { }
let mut sync_data = HashMap::new(); PeerKind::Server(peer, _) => {
for player in &self.players { let mut sync_data = HashMap::new();
if let Some(character) = &player.character { for player in &self.players {
if character.dyn_bind().is_dead() { if let Some(character) = &player.character {
continue; if character.dyn_bind().is_dead() {
} continue;
}
if let (Some(dir), Some(look_up), Some(transform)) = (
player.get_move_dir(),
player.get_look_up(),
player.get_transform(),
) {
sync_data.insert(
player.id(),
SyncPackage {
movement_direction: dir,
look_up,
transform,
},
);
} }
} }
peer.broadcast_unreliable(Package::Sync( if let (Some(dir), Some(look_up), Some(transform)) = (
sync_data, player.get_move_dir(),
self.world_ball.as_ref().map(|b| b.bind().get_sync()), player.get_look_up(),
)); player.get_transform(),
) {
sync_data.insert(
player.id(),
SyncPackage {
movement_direction: dir,
look_up,
transform,
},
);
}
} }
peer.broadcast_unreliable(Package::Sync(
sync_data,
self.world_ball.as_ref().map(|b| b.bind().get_sync()),
));
} }
} }
} }