You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
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<i32> {
|
|
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()
|
|
};
|
|
|
|
*/ |