use alloc::vec::Vec;
use concinnity_core::components::Material;
use concinnity_core::ecs::{BakedMesh, RuntimeComponent};
use crate::{EnvironmentMapHandle, MaterialHandle, MeshHandle};
pub(crate) type Inner = concinnity_core::ecs::World;
#[derive(Default)]
pub struct World {
inner: Inner,
}
impl core::fmt::Debug for World {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("World").finish_non_exhaustive()
}
}
impl World {
pub fn new() -> Self {
Self::default()
}
#[cfg_attr(feature = "cook", doc = " See [`cook`](mod@crate::cook).")]
pub fn add_component<C: RuntimeComponent>(&mut self, component: C) {
self.inner.add_component(component);
}
pub fn add_mesh<M: BakedMesh>(&mut self, mesh: M, payload: Vec<u8>) -> MeshHandle {
self.inner.add_mesh(mesh, payload)
}
pub fn add_material(&mut self, material: Material) -> MaterialHandle {
self.inner.add_material(material)
}
pub fn add_environment_map(&mut self, payload: Vec<u8>) -> EnvironmentMapHandle {
self.inner.add_environment_map(payload)
}
#[cfg(feature = "cook")]
pub(crate) fn from_inner(inner: Inner) -> Self {
Self { inner }
}
pub(crate) fn into_inner(self) -> Inner {
self.inner
}
#[cfg(test)]
pub(crate) fn inner(&self) -> &Inner {
&self.inner
}
#[cfg(all(test, feature = "cook"))]
pub(crate) fn inner_mut(&mut self) -> &mut Inner {
&mut self.inner
}
}