save on exit
Some checks failed
Some checks failed
This commit is contained in:
81
src/main.rs
81
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<AssetServer>) {
|
||||
});
|
||||
}
|
||||
|
||||
fn save_and_exit(
|
||||
input: Res<ButtonInput<KeyCode>>,
|
||||
fn save_on_exit(
|
||||
world: &World,
|
||||
type_registry: Res<AppTypeRegistry>,
|
||||
mut close_request: EventReader<WindowCloseRequested>,
|
||||
) {
|
||||
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::<Tile>()
|
||||
.allow::<Flag>()
|
||||
.allow::<Revealed>()
|
||||
.allow::<TileType>()
|
||||
.allow::<Transform>()
|
||||
.allow::<TileOffset>()
|
||||
.allow::<OrthographicProjection>()
|
||||
.allow_resource::<Score>()
|
||||
.extract_entities(world.iter_entities().filter_map(|entity| {
|
||||
world.entity(entity.id()).get::<Tile>()?;
|
||||
Some(entity.id())
|
||||
}))
|
||||
// .extract_entities(world.iter_entities().filter_map(|entity| {
|
||||
// world.entity(entity.id()).get::<TileOffset>()?;
|
||||
// Some(entity.id())
|
||||
// }))
|
||||
.extract_resources()
|
||||
.build();
|
||||
let dscene = DynamicSceneBuilder::from_world(world)
|
||||
.deny_all()
|
||||
.deny_all_resources()
|
||||
.allow::<Tile>()
|
||||
.allow::<Flag>()
|
||||
.allow::<Revealed>()
|
||||
.allow::<TileType>()
|
||||
.allow::<Transform>()
|
||||
.allow::<TileOffset>()
|
||||
.allow::<OrthographicProjection>()
|
||||
.allow_resource::<Score>()
|
||||
.extract_entities(world.iter_entities().filter_map(|entity| {
|
||||
world.entity(entity.id()).get::<Tile>()?;
|
||||
Some(entity.id())
|
||||
}))
|
||||
// .extract_entities(world.iter_entities().filter_map(|entity| {
|
||||
// world.entity(entity.id()).get::<TileOffset>()?;
|
||||
// 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::<FontHandle>()
|
||||
.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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user