use std::{
collections::HashMap,
str::FromStr,
};
use bevy::prelude::*;
pub struct WorldStatePlugin;
impl Plugin for WorldStatePlugin {
fn build(&self, app: &mut App) {
app .register_type::<WorldState>()
.register_type::<HashMap<String, String>>()
.init_resource::<WorldState>();
}
}
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[derive(Resource, Debug, Default, Reflect)]
#[reflect(Resource)]
pub struct WorldState {
map: HashMap<String, String>,
}
impl WorldState {
pub fn get<T: FromStr>(&self, key: &str) -> Option<T> {
self.map
.get(&key.to_owned())
.and_then(|v| v.parse::<T>().ok())
}
pub fn get_bool(&self, key: &str) -> bool {
self.get(key).unwrap_or_default()
}
#[allow(clippy::needless_pass_by_value)]
pub fn insert<T: ToString>(&mut self, key: &str, value: T) {
self.map.insert(key.to_owned(), value.to_string());
}
pub fn set<T: ToString>(&mut self, key: &str, value: T) {
self.insert(key, value);
}
}