~starkingdoms/starkingdoms

ref: 08355656f50d8e095c280962b250178acbd1299f starkingdoms/crates/unified/src/client/net/incoming_planets.rs -rw-r--r-- 1.6 KiB
08355656 — core netcode: planet updates 8 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
38
use bevy::log::{debug, warn};
use bevy::prelude::{Commands, MessageReader, ResMut, Transform};
use crate::prelude::Query;
use crate::shared::config::planet::Planet;
use crate::shared::net::planet::PlanetUpdatePacket;
use crate::shared::net::ServerEntityMap;

pub fn handle_incoming_planets(
    mut msgs: MessageReader<PlanetUpdatePacket>,

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