save on exit
Some checks failed
build / Create Release (push) Successful in 5s
build / publish (zip, x86_64-pc-windows-msvc, windows-2022, windows-x86_64) (push) Successful in 7m50s
build / publish (tar.gz, x86_64-unknown-linux-gnu, ubuntu-latest, linux-x86_64) (push) Failing after 13m55s

This commit is contained in:
2024-07-12 21:06:39 +02:00
parent e32e790ad1
commit 3666b80dca

View File

@@ -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();
}