use std::fs::File;
use std::io::prelude::*;
use std::path::PathBuf;
use bevy::ecs::schedule::ShouldRun;
use bevy::prelude::*;
mod load;
mod plugin;
mod save;
pub use load::*;
pub use plugin::*;
pub use save::*;
#[derive(StageLabel)]
pub enum SaveStage {
Save,
Load,
PostLoad,
}
pub trait SaveWorld {
fn save(self, path: impl Into<PathBuf>);
fn dump(self, path: impl Into<PathBuf>);
}
impl SaveWorld for &mut Commands<'_, '_> {
fn save(self, path: impl Into<PathBuf>) {
self.insert_resource(Request::Save {
path: path.into(),
mode: SaveMode::Filtered,
})
}
fn dump(self, path: impl Into<PathBuf>) {
self.insert_resource(Request::Save {
path: path.into(),
mode: SaveMode::Dump,
})
}
}
impl SaveWorld for &mut World {
fn save(self, path: impl Into<PathBuf>) {
self.insert_resource(Request::Save {
path: path.into(),
mode: SaveMode::Filtered,
})
}
fn dump(self, path: impl Into<PathBuf>) {
self.insert_resource(Request::Save {
path: path.into(),
mode: SaveMode::Dump,
})
}
}
pub trait LoadWorld {
fn load(self, path: impl Into<PathBuf>);
}
impl LoadWorld for &mut Commands<'_, '_> {
fn load(self, path: impl Into<PathBuf>) {
self.insert_resource(Request::Load { path: path.into() })
}
}
impl LoadWorld for &mut World {
fn load(self, path: impl Into<PathBuf>) {
self.insert_resource(Request::Load { path: path.into() })
}
}
pub enum SaveMode {
Filtered,
Dump,
}
#[derive(Resource)]
pub enum Request {
Save { path: PathBuf, mode: SaveMode },
Load { path: PathBuf },
}
impl Request {
fn should_save(&self) -> bool {
matches!(self, Self::Save { .. })
}
fn should_load(&self) -> bool {
matches!(self, Self::Load { .. })
}
}