use std::collections::{HashMap, HashSet};
use bevy::{
prelude::*,
reflect::{
GetTypeRegistration,
TypeRegistration,
},
};
#[derive(Resource, Default)]
pub struct SaveableRegistry {
types: HashMap<String, TypeRegistration>,
ignore_rollback: HashSet<String>,
}
impl SaveableRegistry {
pub fn register<T: GetTypeRegistration>(&mut self) {
let reg = T::get_type_registration();
self.types.insert(reg.type_name().to_owned(), reg);
}
pub fn ignore_rollback<T: GetTypeRegistration>(&mut self) {
let reg = T::get_type_registration();
self.ignore_rollback.insert(reg.type_name().to_owned());
}
pub fn can_rollback(&self, name: &str) -> bool {
!self.ignore_rollback.contains(name)
}
pub fn types(&self) -> impl Iterator<Item = &TypeRegistration> {
self.types.values()
}
}