Skip to content
Snippets Groups Projects
mod.rs 986 B
Newer Older
Louis's avatar
Louis committed
mod save_file;

mod __plugin {
	use bevy::prelude::*;
	use iyes_loopless::prelude::ConditionSet;

	use crate::persistance::save_file::{handle_save_event, sync_state_to_persistence};
	use crate::persistance::{LoadFileEvent, SaveFileEvent};
	use crate::system::flow::AppState;

	pub struct PersistencePlugin;
	impl Plugin for PersistencePlugin {
		fn build(&self, app: &mut App) {
			app.add_event::<SaveFileEvent>()
				.add_event::<LoadFileEvent>()
				.add_system_set(
					ConditionSet::new()
						.run_in_state(AppState::InGame)
						.with_system(sync_state_to_persistence)
						.with_system(handle_save_event)
						.with_system(
							|input: Res<Input<KeyCode>>, mut events: EventWriter<SaveFileEvent>| {
								if input.just_released(KeyCode::Space) {
									events.send(SaveFileEvent { filename: None });
								}
							},
						)
						.into(),
				);
		}
	}
}

pub use __plugin::PersistencePlugin;
pub use save_file::{LoadFileEvent, PersistenceState, SaveFileEvent};