mod custom_errors;
mod entities;
mod resources;
use crate::entities::query::Query;
use crate::entities::Entities;
use crate::resources::Resources;
use eyre::Result;
use std::any::Any;
#[derive(Default)]
pub struct World {
resources: Resources,
entities: Entities,
}
impl World {
pub fn new() -> Self {
Self::default()
}
pub fn add_resource(&mut self, resource: impl Any) {
self.resources.add(resource)
}
pub fn get_resource<T: Any>(&self) -> Option<&T> {
self.resources.get_ref::<T>()
}
pub fn get_resource_mut<T: Any>(&mut self) -> Option<&mut T> {
self.resources.get_mut::<T>()
}
pub fn remove_resource<T: Any>(&mut self) -> Option<Box<dyn Any>> {
self.resources.remove::<T>()
}
pub fn register_component<T: Any>(&mut self) {
self.entities.register_component::<T>()
}
pub fn create_entity(&mut self) -> &mut Entities {
self.entities.create_entity()
}
pub fn query(&self) -> Query {
Query::new(&self.entities)
}
pub fn delete_component_by_entity_id<T: Any>(&mut self, id: usize) -> Result<()> {
self.entities.delete_component_by_entity_id::<T>(id)
}
pub fn add_component_to_entity_by_id(&mut self, id: usize, component: impl Any) -> Result<()> {
self.entities.add_component_by_entity_id(id, component)
}
pub fn delete_entity_by_id(&mut self, id: usize) -> Result<()> {
self.entities.delete_by_id(id)
}
}