From 3666b80dca9c97d230ae43c486f73d526a4711dd Mon Sep 17 00:00:00 2001 From: Avii Date: Fri, 12 Jul 2024 21:06:39 +0200 Subject: [PATCH] save on exit --- src/main.rs | 81 +++++++++++++++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 40 deletions(-) diff --git a/src/main.rs b/src/main.rs index 253a51a..8ceea34 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,8 +3,8 @@ mod utils; -use bevy::prelude::*; -use bevy::window::WindowResolution; +use bevy::window::{ClosingWindow, WindowResolution}; +use bevy::{prelude::*, window::WindowCloseRequested}; use helpers::grid::{Flag, GridPlugin, Revealed, Tile, TileClickEvent, TileOffset, TileType}; use serde::{Deserialize, Serialize}; @@ -249,49 +249,49 @@ fn load_game(mut commands: Commands, asset_server: Res) { }); } -fn save_and_exit( - input: Res>, +fn save_on_exit( world: &World, type_registry: Res, + mut close_request: EventReader, ) { - if !input.just_pressed(KeyCode::Escape) { - return; - } + for _ in close_request.read() { + println!("Saving"); - let type_registry = type_registry.read(); + let type_registry = type_registry.read(); - let dscene = DynamicSceneBuilder::from_world(world) - .deny_all() - .deny_all_resources() - .allow::() - .allow::() - .allow::() - .allow::() - .allow::() - .allow::() - .allow::() - .allow_resource::() - .extract_entities(world.iter_entities().filter_map(|entity| { - world.entity(entity.id()).get::()?; - Some(entity.id()) - })) - // .extract_entities(world.iter_entities().filter_map(|entity| { - // world.entity(entity.id()).get::()?; - // Some(entity.id()) - // })) - .extract_resources() - .build(); + let dscene = DynamicSceneBuilder::from_world(world) + .deny_all() + .deny_all_resources() + .allow::() + .allow::() + .allow::() + .allow::() + .allow::() + .allow::() + .allow::() + .allow_resource::() + .extract_entities(world.iter_entities().filter_map(|entity| { + world.entity(entity.id()).get::()?; + Some(entity.id()) + })) + // .extract_entities(world.iter_entities().filter_map(|entity| { + // world.entity(entity.id()).get::()?; + // Some(entity.id()) + // })) + .extract_resources() + .build(); - let serialized = match dscene.serialize(&type_registry) { - Ok(s) => s, - Err(e) => { - eprintln!("Could not serialize scene: {:?}", e); - return; + let serialized = match dscene.serialize(&type_registry) { + Ok(s) => s, + Err(e) => { + eprintln!("Could not serialize scene: {:?}", e); + return; + } + }; + + if let Err(e) = std::fs::write("./assets/save.sav", serialized) { + eprintln!("Unable to write save file: {:?}", e); } - }; - - if let Err(e) = std::fs::write("./assets/save.sav", serialized) { - eprintln!("Unable to write save file: {:?}", e); } } @@ -338,7 +338,8 @@ fn main() { resolution: WindowResolution::new(1280.0, 720.0), ..Default::default() }), - ..default() + exit_condition: bevy::window::ExitCondition::OnAllClosed, + close_when_requested: true, }), // bevy_inspector_egui::quick::WorldInspectorPlugin::new(), )) @@ -349,6 +350,6 @@ fn main() { .init_resource::() .add_plugins(GridPlugin) .add_systems(Startup, (load_game, setup_camera)) - .add_systems(Update, (tile_clicked, save_and_exit)) + .add_systems(Update, (tile_clicked, save_on_exit)) .run(); }