~starkingdoms/starkingdoms

ref: 302ee06fb6c522c2bf5d6908329d24a72dffa671 starkingdoms/crates/unified/src/client/net/incoming_parts.rs -rw-r--r-- 1.4 KiB
302ee06f — core netcode: fix up PlanetDto and try to figure out flickering 6 days ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
use bevy::log::{debug, warn};
use bevy::prelude::{Commands, MessageReader, ResMut, Transform};
use crate::prelude::Query;
use crate::shared::ecs::{Part, Temperature};
use crate::shared::net::part::{PartDto};
use crate::shared::net::ServerEntityMap;

pub fn handle_incoming_parts(
    mut msgs: MessageReader<PartDto>,

    mut q_parts: Query<(&mut Part, &mut Transform, &mut Temperature)>,
    mut entity_map: ResMut<ServerEntityMap>,
    mut commands: Commands
) {
    for part in msgs.read() {
        if let Some(local_entity) = entity_map.server_to_client.get(&part.server_entity) {
            let Ok((mut part_data, mut transform, mut temperature)) = q_parts.get_mut(*local_entity) else {
                warn!("local part entity {:?} for part srv:{:?} doesn't exist? skipping update, this is a bug", local_entity, part.server_entity);
                continue;
            };
            part.part.update(part_data);
            part.transform.update(transform);
            part.temperature.update(temperature);
        } else {
            // Spawn new part
            let e = commands.spawn((
                part.part.data().clone(),
                *part.transform.data(),
                *part.temperature.data(),
            )).id();
            entity_map.server_to_client.insert(part.server_entity, e.clone());
            entity_map.client_to_server.insert(e.clone(), part.server_entity);
            debug!(?part.part, "spawned new part");
        }

    }
}