use dotrix_core::{ Id, Renderer, Transform };
use dotrix_core::assets::{ Assets, Mesh };
use dotrix_core::renderer::UniformBuffer;
#[derive(Default)]
pub struct Model {
pub mesh: Id<Mesh>,
pub transform: UniformBuffer,
}
impl Model {
pub fn load(&mut self, renderer: &Renderer, assets: &mut Assets) -> bool {
if let Some(mesh) = assets.get_mut(self.mesh) {
mesh.load(renderer);
} else {
return false;
}
true
}
pub fn transform(&mut self, renderer: &Renderer, transform: &Transform) {
let transform_matrix = transform.matrix();
let transform_raw = AsRef::<[f32; 16]>::as_ref(&transform_matrix);
renderer.load_uniform_buffer(&mut self.transform, bytemuck::cast_slice(transform_raw));
}
}
impl From<Id<Mesh>> for Model {
fn from(mesh: Id<Mesh>) -> Self {
Self {
mesh,
..Default::default()
}
}
}