use crate::vertex_2d::ColoredVertex2D; use crate::canvas::Drawable; #[derive(Debug, Clone)] pub struct Sprite { pub vertices: [(f32, f32); 6], position: (f32, f32), size: (u32, u32), color: (f32, f32, f32, f32), textured: bool, texture_id: i32, } impl Sprite { pub fn new(position: (f32, f32), size: (u32, u32)) -> Sprite { Sprite::new_with_color(position, size, (0.,0.,0.,0.)) } pub fn new_with_color(position: (f32, f32), size: (u32, u32), color: (f32, f32, f32, f32)) -> Sprite { let fsize = (size.0 as f32, size.1 as f32); Sprite { vertices: [ (position.0, position.1 ), // top left (position.0, position.1 + fsize.1), // bottom left (position.0 + fsize.0, position.1 + fsize.1 ), // bottom right (position.0, position.1 ), // top left (position.0 + fsize.0, position.1 + fsize.1 ), // bottom right (position.0 + fsize.0, position.1 ), // top right ], position: position, size: size, color: color, textured: false, texture_id: 0 } } pub fn new_with_texture(position: (f32, f32), size: (u32, u32), texture_id: i32) -> Sprite { let fsize = (size.0 as f32, size.1 as f32); Sprite { vertices: [ (position.0, position.1 ), // top left (position.0, position.1 + fsize.1), // bottom left (position.0 + fsize.0, position.1 + fsize.1 ), // bottom right (position.0, position.1 ), // top left (position.0 + fsize.0, position.1 + fsize.1 ), // bottom right (position.0 + fsize.0, position.1 ), // top right ], position, size, color: (0.0, 0.0, 0.0, 0.0), textured: false, texture_id } } } impl Drawable for Sprite { fn get_vertices(&self) -> Vec<(f32,f32)> { self.vertices.to_vec() } fn get_color(&self) -> (f32, f32, f32, f32) { self.color.clone() } fn get_texture_id(&self) -> Option { match self.textured { true => { Some(self.texture_id.clone()) }, false => None, } } } /* let vertex_buffer = { CpuAccessibleBuffer::from_iter(self.device.clone(), BufferUsage::all(), [ ColoredVertex2D { position: [ 1.0, 1.0 ], color }, ColoredVertex2D { position: [ 1.0, 0.5 ], color }, ColoredVertex2D { position: [ 0.5, 0.5 ], color }, ColoredVertex2D { position: [ 0.5, 1.0 ], color }, ].iter().cloned()).unwrap() }; */