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.
Trac3r-rust/src/sprite.rs

107 lines
3.2 KiB

use crate::canvas::{Drawable, CanvasTextureHandle, CanvasImageHandle};
use std::sync::Arc;
#[derive(Debug, Clone)]
pub struct Sprite {
pub vertices: [(f32, f32); 6],
position: (f32, f32),
size: (f32, f32),
color: (f32, f32, f32, f32),
textured: bool,
texture_handle: Option<Arc<CanvasTextureHandle>>,
}
impl Sprite {
pub fn new(position: (f32, f32), size: (f32, f32)) -> Sprite {
Sprite::new_with_color(position, size, (0.,0.,0.,0.))
}
pub fn new_with_color(position: (f32, f32),
size: (f32, f32),
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_handle: None
}
}
pub fn new_with_texture(position: (f32, f32), size: (f32, f32), texture_handle: Arc<CanvasTextureHandle>) -> 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: (0.0, 0.0, 0.0, 0.0),
textured: true,
texture_handle: Some(texture_handle.clone())
}
}
}
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_handle(&self) -> Option<Arc<CanvasTextureHandle>> {
match self.textured {
true => {
self.texture_handle.clone()
},
false => None,
}
}
fn get_image_handle(&self) -> Option<Arc<CanvasImageHandle>> {
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()
};
*/