use std::net::SocketAddr; use bevy::prelude::*; use bevy_rapier2d::prelude::Velocity; use starkingdoms_common::{pack_savefile, unpack_savefile, SaveData}; use crate::{module::component::{Attach, CanAttach, LooseAttach, PartFlags, PartType}, planet::PlanetType, ws::WsEvent, AppKeys, Packet}; 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(), }); }