~starkingdoms/starkingdoms

302ee06fb6c522c2bf5d6908329d24a72dffa671 — core 6 days ago 13ff574
netcode: fix up PlanetDto and try to figure out flickering
M crates/unified/src/client/net.rs => crates/unified/src/client/net.rs +1 -1
@@ 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

M crates/unified/src/server/net/update_planets.rs => crates/unified/src/server/net/update_planets.rs +1 -1
@@ 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<Planet>, Ref<Transform>, Ref<Temperature>)>,
    planets: Query<(Entity, Ref<Planet>, Ref<Transform>)>,
    mut messages: MessageWriter<ToClients<PlanetDto>>
) {
    for planet in planets {

M crates/unified/src/shared/net.rs => crates/unified/src/shared/net.rs +14 -6
@@ 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<T: Message + MapEntities + TypePath + for<'a> 
    registry.forward.insert(TypeId::of::<T>(), lane_index);
    registry.reverse.insert(lane_index, |payload: Vec<u8>, world: &mut World| {
        let mut entity_map = world.resource_mut::<ServerEntityMap>();
        let mut message = from_bytes::<T>(&payload).expect(&format!("Failed to deserialize message of type {}", T::type_path()));
        let Ok(mut message) = from_bytes::<T>(&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<T: Message + TypePath + for<'a> Deserialize<'a>>(regi
    let lane_index = get_lane_index();
    registry.forward.insert(TypeId::of::<T>(), lane_index);
    registry.reverse.insert(lane_index, |payload: Vec<u8>, world: &mut World| {
        let message = from_bytes::<T>(&payload).expect(&format!("Failed to deserialize message of type {}", T::type_path()));
        let Ok(message) = from_bytes::<T>(&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<T: Message + TypePath + for<'a> Deserialize<'a>>(regi
    let lane_index = get_lane_index();
    registry.forward.insert(TypeId::of::<T>(), lane_index);
    registry.reverse.insert(lane_index, |payload: Vec<u8>, client_id: ClientId, world: &mut World| {
        let message = from_bytes::<T>(&payload).expect(&format!("Failed to deserialize message of type {}", T::type_path()));
        let Ok(message) = from_bytes::<T>(&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<ServerMessageRegistry>,
    )> = 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<ClientMessageRegistry>,
    )> = 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;