use std::net::SocketAddr; use bevy::prelude::*; use bevy_rapier2d::prelude::Velocity; use starkingdoms_common::{pack_savefile, packet::Packet, unpack_savefile, SaveData}; use crate::{ module::component::{Attach, CanAttach, LooseAttach, PartFlags, PartType}, planet::PlanetType, ws::{PacketMessageConvert, WsEvent}, AppKeys, }; use super::component::Player; pub fn request_save( attached_query: &Query< ( Entity, &PartType, &mut Transform, &mut Attach, &Velocity, Option<&CanAttach>, Option<&LooseAttach>, &mut PartFlags, ), (Without, Without), >, old_save: Option, app_keys: AppKeys, attach: Attach, event_queue: &mut Vec, from: &SocketAddr, ) { let unused_modules = if let Some(ref old_save) = old_save { if let Ok(old_savedata) = unpack_savefile(&app_keys.app_key, old_save.to_string()) { old_savedata.unused_modules } else { Vec::new() } } else { Vec::new() }; let save = SaveData { children: crate::module::save::construct_save_data(attach.clone(), attached_query), unused_modules, }; let save_string = pack_savefile(&app_keys.app_key, save); let packet = Packet::SaveData { payload: save_string, }; event_queue.push(WsEvent::Send { to: *from, message: packet.into_message(), }); }