use std::sync::Arc; use crate::canvas::managed::handles::{CanvasImageHandle, CanvasTextureHandle}; use crate::canvas::canvas_frame::Drawable; use crate::util::vertex::{VertexTypeContainer, ImageVertex3D}; pub struct CompuSprite { pub verts: VertexTypeContainer, 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) -> 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: VertexTypeContainer::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, window_size: (u32, u32)) -> Vec { vec![self.verts.clone()] } }