@ -1,13 +1,13 @@
use std ::sync ::Arc ;
use crate ::canvas ::* ;
use crate ::canvas ::managed ::handles ::{ CanvasFontHandle , CanvasImageHandle , CanvasTextureHandle , Handle } ;
use crate ::canvas ::canvas_frame ::{ Drawable };
use crate ::canvas ::canvas_frame ::{ Drawable , Eventable };
use crate ::util ::vertex ::{ VertexTypes , TextureVertex3D , Vertex3D } ;
use winit ::event ::{ DeviceEvent , MouseButton , ElementState , Event } ;
///
#[ derive(Debug, Clone) ]
pub struct Sprite {
pub verts : VertexTypes ,
position : ( f32 , f32 ) ,
@ -16,34 +16,38 @@ pub struct Sprite {
/// Container class which implements drawable.
impl Sprite {
///
pub fn new ( position : ( f32 , f32 ) ,
size : ( f32 , f32 ) ,
depth : u32 ,
texture_handle : Arc < CanvasTextureHandle > ) -> Sprite {
size : ( f32 , f32 ) ,
depth : u32 ,
texture_handle : Arc < CanvasTextureHandle > ) -> Sprite {
let normalized_depth = ( depth as f32 / 255.0 ) ;
let verts = vec! [
TextureVertex3D {
TextureVertex3D {
v_position : [ position . 0 , position . 1 , normalized_depth ] , // top left
ti_position : [ - 0.0 , - 0.0 ] } ,
TextureVertex3D {
ti_position : [ - 0.0 , - 0.0 ] ,
} ,
TextureVertex3D {
v_position : [ position . 0 , position . 1 + size . 1 , normalized_depth ] , // bottom left
ti_position : [ - 0.0 , 1.0 ] } ,
TextureVertex3D {
ti_position : [ - 0.0 , 1.0 ] ,
} ,
TextureVertex3D {
v_position : [ position . 0 + size . 0 , position . 1 + size . 1 , normalized_depth ] , // bottom right
ti_position : [ 1.0 , 1.0 ] } ,
TextureVertex3D {
ti_position : [ 1.0 , 1.0 ] ,
} ,
TextureVertex3D {
v_position : [ position . 0 , position . 1 , normalized_depth ] , // top left
ti_position : [ - 0.0 , - 0.0 ] } ,
TextureVertex3D {
ti_position : [ - 0.0 , - 0.0 ] ,
} ,
TextureVertex3D {
v_position : [ position . 0 + size . 0 , position . 1 + size . 1 , normalized_depth ] , // bottom right
ti_position : [ 1.0 , 1.0 ] } ,
TextureVertex3D {
ti_position : [ 1.0 , 1.0 ] ,
} ,
TextureVertex3D {
v_position : [ position . 0 + size . 0 , position . 1 , normalized_depth ] , // top right
ti_position : [ 1.0 , - 0.0 ] } ,
ti_position : [ 1.0 , - 0.0 ] ,
} ,
] ;
Sprite {
@ -53,12 +57,29 @@ impl Sprite {
}
}
}
impl Drawable for Sprite {
impl Drawable for Sprite {
fn get ( & self ) -> VertexTypes {
self . verts . clone ( )
}
}
impl Eventable < T > for Sprite {
fn notify < T > ( & self , event : & Event < T > ) -> ( ) {
match event {
Event ::DeviceEvent { event : DeviceEvent ::Button { button , state } , .. } = > {
match button . id . unwrap ( ) {
MouseButton ::Left = > {
if state . state = = ElementState ::Pressed {
// processor.save_edges_image();
}
} ,
_ = > ( )
}
}
_ = > { }
}
}
}