screenspace coords was much easier than expected

This commit is contained in:
2020-08-08 01:49:35 -07:00
parent 67b7d98f99
commit 0619b79d34
8 changed files with 92 additions and 72 deletions

View File

@@ -1,15 +1,13 @@
use std::sync::Arc;
use crate::canvas::*;
use crate::canvas::managed::handles::{CanvasFontHandle, CanvasImageHandle, CanvasTextureHandle, Handle};
use crate::canvas::canvas_frame::{Drawable, Eventable};
use crate::canvas::canvas_frame::{Drawable, Eventable, Updatable};
use crate::util::vertex::{VertexType, TextureVertex3D, Vertex3D};
use winit::event::{DeviceEvent, MouseButton, ElementState, Event, WindowEvent};
///
#[derive(Debug, Clone)]
pub struct Sprite {
verts: VertexType,
pub position: (f32, f32),
pub size: (f32, f32),
depth: f32,
@@ -18,30 +16,41 @@ pub struct Sprite {
/// Container class which implements drawable.
impl Sprite {
fn generate_verts(position: (f32, f32), size: (f32, f32), depth: f32) -> Vec<TextureVertex3D> {
fn generate_verts(window_size: (u32, u32), position: (f32, f32), size: (f32, f32), depth: f32) -> Vec<TextureVertex3D> {
let ss_position = (
position.0 / window_size.0 as f32 - 1.0,
position.1 / window_size.1 as f32 - 1.0
);
let ss_size = (
size.0 / window_size.0 as f32,
size.1 / window_size.1 as f32
);
vec![
TextureVertex3D {
v_position: [position.0, position.1, depth], // top left
v_position: [ss_position.0, ss_position.1, depth], // top left
ti_position: [-0.0, -0.0],
},
TextureVertex3D {
v_position: [position.0, position.1 + size.1, depth], // bottom left
v_position: [ss_position.0, ss_position.1 + ss_size.1, depth], // bottom left
ti_position: [-0.0, 1.0],
},
TextureVertex3D {
v_position: [position.0 + size.0, position.1 + size.1, depth], // bottom right
v_position: [ss_position.0 + ss_size.0, ss_position.1 + ss_size.1, depth], // bottom right
ti_position: [1.0, 1.0],
},
TextureVertex3D {
v_position: [position.0, position.1, depth], // top left
v_position: [ss_position.0, ss_position.1, depth], // top left
ti_position: [-0.0, -0.0],
},
TextureVertex3D {
v_position: [position.0 + size.0, position.1 + size.1, depth], // bottom right
v_position: [ss_position.0 + ss_size.0, ss_position.1 + ss_size.1, depth], // bottom right
ti_position: [1.0, 1.0],
},
TextureVertex3D {
v_position: [position.0 + size.0, position.1, depth], // top right
v_position: [ss_position.0 + ss_size.0, ss_position.1, depth], // top right
ti_position: [1.0, -0.0],
},
]
@@ -55,7 +64,6 @@ impl Sprite {
let normalized_depth = (depth as f32 / 255.0);
Sprite {
verts: VertexType::TextureType(Sprite::generate_verts(position, size, normalized_depth), texture_handle.clone()),
position: position,
size: size,
depth: normalized_depth,
@@ -65,10 +73,10 @@ impl Sprite {
}
impl Drawable for Sprite {
fn get(&self) -> Vec<VertexType> {
fn get(&self, window_size: (u32, u32)) -> Vec<VertexType> {
vec![
VertexType::TextureType(
Sprite::generate_verts(self.position, self.size, self.depth),
Sprite::generate_verts(window_size, self.position, self.size, self.depth),
self.texture_handle.clone())
]
}
@@ -92,4 +100,8 @@ impl<T> Eventable<T> for Sprite {
}
}
impl Updatable for Sprite {
fn update(&mut self, delta_time: f32) -> () {
}
}