use serde::{Deserialize, Serialize}; use crate::component::{PartType, PlanetType}; #[derive(Debug, Serialize, Deserialize)] pub struct ProtoTransform { pub x: f32, pub y: f32, pub rot: f32 } #[macro_export] macro_rules! proto_transform { ($e:expr) => { $crate::packet::ProtoTransform { x: $e.translation.x, y: $e.translation.y, rot: $e.rotation.to_euler(bevy::math::EulerRot::ZYX).0 } }; } #[derive(Debug, Serialize, Deserialize)] pub struct Planet { pub planet_type: PlanetType, pub transform: ProtoTransform } #[derive(Debug, Serialize, Deserialize)] pub struct Part { pub part_type: PartType, pub transform: ProtoTransform } #[derive(Debug, Serialize, Deserialize)] #[serde(tag = "t", content = "c")] pub enum Packet { // serverbound ClientLogin { username: String, jwt: Option, }, // clientbound SpawnPlayer { id: u32, username: String, }, PlayerList { players: Vec<(u32, String)>, }, PlanetPositions { planets: Vec<(u32, Planet)> }, PartPositions { parts: Vec<(u32, Part)> } }