use bevy::prelude::*;
use crate::snapshot::{AdvanceWorld, LoadWorld, SaveWorld};
#[derive(SystemSet, Hash, Debug, PartialEq, Eq, Clone)]
pub enum LoadWorldSystems {
EntityResurrect,
Entity,
EntityFlush,
Data,
DataFlush,
Mapping,
}
#[derive(SystemSet, Hash, Debug, PartialEq, Eq, Clone)]
pub enum SaveWorldSystems {
Checksum,
Snapshot,
}
#[derive(SystemSet, Hash, Debug, PartialEq, Eq, Clone)]
pub enum AdvanceWorldSystems {
First,
DespawnConfirmed,
Main,
Last,
}
pub struct SnapshotSetPlugin;
impl Plugin for SnapshotSetPlugin {
fn build(&self, app: &mut App) {
app.configure_sets(
LoadWorld,
(
LoadWorldSystems::EntityResurrect,
LoadWorldSystems::Entity,
LoadWorldSystems::EntityFlush,
LoadWorldSystems::Data,
LoadWorldSystems::DataFlush,
LoadWorldSystems::Mapping,
)
.chain(),
)
.configure_sets(
SaveWorld,
(SaveWorldSystems::Checksum, SaveWorldSystems::Snapshot).chain(),
)
.configure_sets(
AdvanceWorld,
(
AdvanceWorldSystems::First,
AdvanceWorldSystems::DespawnConfirmed,
AdvanceWorldSystems::Main,
AdvanceWorldSystems::Last,
)
.chain(),
)
.add_systems(
LoadWorld,
ApplyDeferred.in_set(LoadWorldSystems::EntityFlush),
)
.add_systems(LoadWorld, ApplyDeferred.in_set(LoadWorldSystems::DataFlush))
.add_systems(
AdvanceWorld,
ApplyDeferred
.after(AdvanceWorldSystems::First)
.before(AdvanceWorldSystems::Main),
)
.add_systems(
AdvanceWorld,
ApplyDeferred
.after(AdvanceWorldSystems::Main)
.before(AdvanceWorldSystems::Last),
);
}
}