use crate::ecs::world::World;
use nightshade_ecs::dynamic::ComponentRegistry;
#[derive(Clone, Copy)]
pub struct SnapshotCapability {
pub key: &'static str,
pub member_world: fn(&World) -> Option<usize>,
pub registry: fn() -> ComponentRegistry,
pub restore: fn(&mut World, Option<usize>),
}
#[derive(Default)]
pub struct SnapshotCapabilityHooks {
pub capabilities: Vec<SnapshotCapability>,
}
pub fn register_snapshot_capability(world: &mut World, capability: SnapshotCapability) {
if world.ecs.resource::<SnapshotCapabilityHooks>().is_none() {
world
.ecs
.insert_resource(SnapshotCapabilityHooks::default());
}
world
.res_mut::<SnapshotCapabilityHooks>()
.capabilities
.push(capability);
}
pub fn snapshot_capabilities(world: &World) -> Vec<SnapshotCapability> {
world
.ecs
.resource::<SnapshotCapabilityHooks>()
.map(|hooks| hooks.capabilities.clone())
.unwrap_or_default()
}