use std::collections::HashMap; use bevy_ecs::{entity::Entity, event::Events, query::With, world::World}; use starkingdoms_common::{packet::Packet, PartType, PlanetType}; use crate::ecs::{Camera, Planet, Player, RecvPacket, Rotation, Scale, SendPacket, Shear, SpriteBundle, SpriteTexture, Translation}; #[cfg(target_arch = "wasm32")] #[path = "ws_wasm.rs"] pub mod ws; #[cfg(not(target_arch = "wasm32"))] #[path = "ws_native.rs"] pub mod ws; pub fn process_packets( world: &mut World, send_packet_events: &mut Events, recv_packet_events: &mut Events, planet_types: &mut HashMap, ) { use Packet::*; let mut recv_cursor = recv_packet_events.get_cursor(); for recv in recv_cursor.read(&recv_packet_events) { match &recv.0 { PartPositions { parts } => { for (id, part) in parts { if part.part_type == PartType::Hearty { let mut player_query = world.query_filtered::<(&mut Translation, &mut Rotation), With>(); let mut camera = world.resource_mut::(); camera.x = part.transform.x; camera.y = part.transform.y; tracing::info!("camera real {:?}", camera); for (mut translation, mut rotation) in player_query.iter_mut(world) { translation.x = part.transform.x; translation.y = part.transform.y; rotation.radians = part.transform.rot; tracing::info!("part real {:?}", translation); } tracing::info!("part {:?}", part.transform); } } } PlanetPositions { planets } => { for (server_id, planet) in planets { let mut planet_query = world.query_filtered::<(&mut Translation, &mut Rotation), With>(); if !planet_types.contains_key(&planet.planet_type) { let entity = world.spawn(SpriteBundle { position: Translation { x: planet.transform.x, y: planet.transform.y }, shear: Shear { x: 0.0, y: 0.0 }, rotation: Rotation { radians: planet.transform.rot }, scale: Scale { width: planet.radius, height: planet.radius }, texture: SpriteTexture { texture: match planet.planet_type { PlanetType::Sun => "sun", PlanetType::Mercury => "mercury", PlanetType::Venus => "venus", PlanetType::Earth => "earth", PlanetType::Moon => "moon", PlanetType::Mars => "mars", PlanetType::Jupiter => "jupiter", PlanetType::Saturn => "saturn", PlanetType::Uranus => "uranus", PlanetType::Neptune => "neptune", PlanetType::Pluto => "pluto", }.to_string() }, }); planet_types.insert(planet.planet_type, (entity.id(), *server_id)); tracing::info!("{:?}", planet.transform); } } } _ => {} } } }