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.
59 lines
2.0 KiB
59 lines
2.0 KiB
use std::sync::Arc;
|
|
use crate::canvas::managed::handles::{CanvasImageHandle, CanvasTextureHandle};
|
|
use crate::canvas::canvas_frame::Drawable;
|
|
use crate::util::vertex::{VertexTypes, ImageVertex3D};
|
|
|
|
pub struct CompuSprite {
|
|
|
|
pub verts: VertexTypes,
|
|
|
|
position: (f32, f32),
|
|
size: (f32, f32),
|
|
color: (f32, f32, f32, f32),
|
|
|
|
}
|
|
|
|
impl CompuSprite {
|
|
pub fn new(position: (f32, f32),
|
|
size: (f32, f32),
|
|
depth: u32,
|
|
image_size: (f32, f32),
|
|
image_handle: Arc<CanvasImageHandle>) -> CompuSprite {
|
|
|
|
let normalized_depth = (depth as f32 / 255.0);
|
|
|
|
let verts = vec![
|
|
ImageVertex3D {
|
|
v_position: [position.0, position.1, normalized_depth], // top left
|
|
ti_position: [-0.0, -0.0] },
|
|
ImageVertex3D {
|
|
v_position: [position.0, position.1 + size.1, normalized_depth], // bottom left
|
|
ti_position: [-0.0, image_size.1] },
|
|
ImageVertex3D {
|
|
v_position: [position.0 + size.0, position.1 + size.1, normalized_depth], // bottom right
|
|
ti_position: [image_size.0, image_size.1] },
|
|
ImageVertex3D {
|
|
v_position: [position.0, position.1, normalized_depth], // top left
|
|
ti_position: [-0.0, -0.0] },
|
|
ImageVertex3D {
|
|
v_position: [position.0 + size.0, position.1 + size.1, normalized_depth], // bottom right
|
|
ti_position: [image_size.0, image_size.1] },
|
|
ImageVertex3D {
|
|
v_position: [position.0 + size.0, position.1, normalized_depth], // top right
|
|
ti_position: [image_size.0, -0.0] },
|
|
];
|
|
|
|
CompuSprite {
|
|
verts: VertexTypes::ImageType(verts, image_handle.clone()),
|
|
position: position,
|
|
size: size,
|
|
color: (0.0, 0.0, 0.0, 0.0),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Drawable for CompuSprite {
|
|
fn get(&self) -> Vec<VertexTypes> {
|
|
vec![self.verts.clone()]
|
|
}
|
|
} |