From 302ee06fb6c522c2bf5d6908329d24a72dffa671 Mon Sep 17 00:00:00 2001 From: core Date: Mon, 8 Jun 2026 23:41:16 -0400 Subject: [PATCH] netcode: fix up PlanetDto and try to figure out flickering --- crates/unified/src/client/net.rs | 2 +- .../unified/src/server/net/update_planets.rs | 2 +- crates/unified/src/shared/net.rs | 20 +++++++++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/crates/unified/src/client/net.rs b/crates/unified/src/client/net.rs index 25c9ea7873d2445b7a4cdc1f91ddfea9269ef68f..9b330025249f5ff465884537466fa1de29c6fd15 100644 --- a/crates/unified/src/client/net.rs +++ b/crates/unified/src/client/net.rs @@ -8,5 +8,5 @@ use crate::client::net::incoming_planets::handle_incoming_planets; pub fn net_plugin(app: &mut App) { app .insert_resource(ServerEntityMap::default()) - .add_systems(PreUpdate, (handle_incoming_planets, handle_incoming_parts)); + .add_systems(PostUpdate, (handle_incoming_planets, handle_incoming_parts)); } \ No newline at end of file diff --git a/crates/unified/src/server/net/update_planets.rs b/crates/unified/src/server/net/update_planets.rs index b3298b5291b45cab7098484deefb06dd751217d3..0a662ce36bde6580c0adef11e69bd5ca02f569cd 100644 --- a/crates/unified/src/server/net/update_planets.rs +++ b/crates/unified/src/server/net/update_planets.rs @@ -9,7 +9,7 @@ use crate::shared::net::{SendTargets, ToClients}; use crate::shared::net::part::PartDto; pub fn send_updated_planets( - planets: Query<(Entity, Ref, Ref, Ref)>, + planets: Query<(Entity, Ref, Ref)>, mut messages: MessageWriter> ) { for planet in planets { diff --git a/crates/unified/src/shared/net.rs b/crates/unified/src/shared/net.rs index 4904b0a082eafea05f09d965efdb413785208ea9..9a9cc9bd04fa791e9eb2973cff838932c8673b26 100644 --- a/crates/unified/src/shared/net.rs +++ b/crates/unified/src/shared/net.rs @@ -21,7 +21,6 @@ use postcard::{from_bytes, to_allocvec, to_slice, to_vec}; use crate::prelude::{App, Message}; use crate::shared::thrust::ThrustSolution; use serde::{Deserialize, Serialize}; -use smolvec::SmolVec; use crate::shared::attachment::{Joint, JointOf, PartInShip, Peer, Ship, SnapOf, SnapOfJoint}; use crate::shared::config::planet::{Planet, PlanetSpring, PlanetSpringJoint}; use crate::shared::ecs::{CanCraft, CraftPartRequest, DragRequestEvent, Drill, Part, Player, PlayerStorage, SingleStorage, Temperature, ToggleDrillEvent}; @@ -162,7 +161,10 @@ fn register_mapped_server_message registry.forward.insert(TypeId::of::(), lane_index); registry.reverse.insert(lane_index, |payload: Vec, world: &mut World| { let mut entity_map = world.resource_mut::(); - let mut message = from_bytes::(&payload).expect(&format!("Failed to deserialize message of type {}", T::type_path())); + let Ok(mut message) = from_bytes::(&payload) else { + warn!("Failed to deserialize message of type {}", T::type_path()); + return; + }; message.map_entities(&mut entity_map.server_to_client); world.write_message(message).expect("Could not send message to game"); }); @@ -171,7 +173,10 @@ fn register_server_message Deserialize<'a>>(regi let lane_index = get_lane_index(); registry.forward.insert(TypeId::of::(), lane_index); registry.reverse.insert(lane_index, |payload: Vec, world: &mut World| { - let message = from_bytes::(&payload).expect(&format!("Failed to deserialize message of type {}", T::type_path())); + let Ok(message) = from_bytes::(&payload) else { + warn!("Failed to deserialize message of type {}", T::type_path()); + return; + }; world.write_message(message).expect("Could not send message to game"); }); } @@ -179,7 +184,10 @@ fn register_client_message Deserialize<'a>>(regi let lane_index = get_lane_index(); registry.forward.insert(TypeId::of::(), lane_index); registry.reverse.insert(lane_index, |payload: Vec, client_id: ClientId, world: &mut World| { - let message = from_bytes::(&payload).expect(&format!("Failed to deserialize message of type {}", T::type_path())); + let Ok(message) = from_bytes::(&payload) else { + warn!("Failed to deserialize message of type {}", T::type_path()); + return; + }; world.write_message(FromClients { client_id, message, @@ -262,7 +270,7 @@ fn recv_from_server( Res, )> = SystemState::new(world); let (mut sessions, message_registry) = system_state.get_mut(world); - let mut messages = SmolVec::new(); + let mut messages = Vec::new(); for mut transport in sessions.iter_mut() { for message in transport.recv.msgs.drain() { let payload = message.payload; @@ -285,7 +293,7 @@ fn recv_from_client( Res, )> = SystemState::new(world); let (mut clients, message_registry) = system_state.get_mut(world); - let mut messages = SmolVec::new(); + let mut messages = Vec::new(); for (client_entity, mut transport) in clients.iter_mut() { for message in transport.recv.msgs.drain() { let payload = message.payload;