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) {
self.since_last_sync += delta;
if self.since_last_sync > (1. / 60.) {
self.since_last_sync = 0.;
if let Some(_) = self.current_map {
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
match peer {
PeerKind::Client(peer, socket_addr) => {
if let Some(player) = self
.players
.iter()
.find(|p| p.id() == self.self_id.unwrap_or(0))
{
if let Some(data) = &player.get_self_sync() {
peer.send_unreliable(socket_addr, SelfSync(data.clone()));
}
if let Some(_) = self.current_map {
if let Some(peer) = &mut NetworkManager::singleton().bind_mut().peer {
match peer {
PeerKind::Client(peer, socket_addr) => {
if let Some(player) = self
.players
.iter()
.find(|p| p.id() == self.self_id.unwrap_or(0))
{
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();
for player in &self.players {
if let Some(character) = &player.character {
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,
},
);
}
PeerKind::Server(peer, _) => {
let mut sync_data = HashMap::new();
for player in &self.players {
if let Some(character) = &player.character {
if character.dyn_bind().is_dead() {
continue;
}
}
peer.broadcast_unreliable(Package::Sync(
sync_data,
self.world_ball.as_ref().map(|b| b.bind().get_sync()),
));
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(
sync_data,
self.world_ball.as_ref().map(|b| b.bind().get_sync()),
));
}
}
}