lots of refactoring
This commit is contained in:
62
src/canvas_frame.rs
Normal file
62
src/canvas_frame.rs
Normal file
@@ -0,0 +1,62 @@
|
||||
use crate::vertex_2d::{ColoredVertex2D, Vertex2D};
|
||||
use std::sync::Arc;
|
||||
use std::collections::HashMap;
|
||||
use crate::canvas::Drawable;
|
||||
|
||||
pub struct CanvasFrame {
|
||||
pub colored_drawables: Vec<ColoredVertex2D>,
|
||||
pub textured_drawables: HashMap<Arc<u32>, Vec<Vec<Vertex2D>>>,
|
||||
pub image_drawables: HashMap<Arc<u32>, Vec<Vec<Vertex2D>>>,
|
||||
}
|
||||
|
||||
impl CanvasFrame {
|
||||
pub fn new() -> CanvasFrame {
|
||||
CanvasFrame {
|
||||
colored_drawables: vec![],
|
||||
textured_drawables: Default::default(),
|
||||
image_drawables: Default::default(),
|
||||
}
|
||||
}
|
||||
|
||||
// Accumulates the drawables vertices and colors
|
||||
pub fn draw(&mut self, drawable: &dyn Drawable) {
|
||||
match drawable.get_texture_handle() {
|
||||
Some(handle) => {
|
||||
self.textured_drawables
|
||||
.entry(handle.clone())
|
||||
.or_insert(Vec::new())
|
||||
.push(drawable.get_vertices().iter().map(|n|
|
||||
Vertex2D {
|
||||
position: [n.0, n.1],
|
||||
}
|
||||
).collect::<Vec<Vertex2D>>());
|
||||
}
|
||||
None => {
|
||||
match drawable.get_image_handle() {
|
||||
Some(handle) => {
|
||||
self.image_drawables
|
||||
.entry(handle.clone())
|
||||
.or_insert(Vec::new())
|
||||
.push(drawable.get_vertices().iter().map(|n|
|
||||
Vertex2D {
|
||||
position: [n.0, n.1],
|
||||
}
|
||||
).collect());
|
||||
}
|
||||
None => {
|
||||
let colors = drawable.get_color();
|
||||
|
||||
self.colored_drawables.extend(
|
||||
drawable.get_vertices().iter().map(|n|
|
||||
ColoredVertex2D {
|
||||
position: [n.0, n.1],
|
||||
color: [colors.0, colors.1, colors.2, colors.3],
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user