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");
}
}
}
}