2019-04-26 21:11:29 +00:00
|
|
|
use crate::color_transform::ColorTransform;
|
2019-04-25 17:52:22 +00:00
|
|
|
use crate::display_object::DisplayObject;
|
2019-04-27 01:55:06 +00:00
|
|
|
use crate::matrix::Matrix;
|
|
|
|
use crate::player::{RenderContext, UpdateContext};
|
2019-04-25 17:52:22 +00:00
|
|
|
use bacon_rajan_cc::{Trace, Tracer};
|
2019-04-27 01:55:06 +00:00
|
|
|
#[cfg(target_arch = "wasm32")]
|
2019-04-25 17:52:22 +00:00
|
|
|
use web_sys::HtmlImageElement;
|
|
|
|
|
|
|
|
pub struct Graphic {
|
|
|
|
matrix: Matrix,
|
2019-04-26 21:11:29 +00:00
|
|
|
color_transform: ColorTransform,
|
2019-04-26 03:27:44 +00:00
|
|
|
x_min: f32,
|
|
|
|
y_min: f32,
|
2019-04-25 17:52:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Graphic {
|
2019-04-27 01:55:06 +00:00
|
|
|
pub fn new(x_min: f32, y_min: f32) -> Graphic {
|
2019-04-25 17:52:22 +00:00
|
|
|
Graphic {
|
2019-04-26 21:11:29 +00:00
|
|
|
color_transform: Default::default(),
|
2019-04-26 03:27:44 +00:00
|
|
|
x_min,
|
|
|
|
y_min,
|
2019-04-25 17:52:22 +00:00
|
|
|
matrix: std::default::Default::default(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl DisplayObject for Graphic {
|
2019-04-26 03:27:44 +00:00
|
|
|
fn run_frame(&mut self, _context: &mut UpdateContext) {
|
2019-04-25 17:52:22 +00:00
|
|
|
// Noop
|
|
|
|
}
|
|
|
|
|
|
|
|
fn render(&self, context: &mut RenderContext) {
|
|
|
|
context.matrix_stack.push(&self.matrix);
|
2019-04-26 21:11:29 +00:00
|
|
|
context.color_transform_stack.push(&self.color_transform);
|
|
|
|
|
2019-04-25 17:52:22 +00:00
|
|
|
let world_matrix = context.matrix_stack.matrix();
|
2019-04-26 21:11:29 +00:00
|
|
|
let color_transform = context.color_transform_stack.color_transform();
|
|
|
|
|
2019-04-27 01:55:06 +00:00
|
|
|
// if !color_transform.is_identity() {
|
|
|
|
// context
|
|
|
|
// .context_2d
|
|
|
|
// .set_global_alpha(color_transform.a_mult.into());
|
|
|
|
// }
|
2019-04-26 21:11:29 +00:00
|
|
|
|
2019-04-27 01:55:06 +00:00
|
|
|
// context
|
|
|
|
// .context_2d
|
|
|
|
// .set_transform(
|
|
|
|
// world_matrix.a.into(),
|
|
|
|
// world_matrix.b.into(),
|
|
|
|
// world_matrix.c.into(),
|
|
|
|
// world_matrix.d.into(),
|
|
|
|
// world_matrix.tx.into(),
|
|
|
|
// world_matrix.ty.into(),
|
|
|
|
// )
|
|
|
|
// .unwrap();
|
2019-04-26 21:11:29 +00:00
|
|
|
|
2019-04-27 01:55:06 +00:00
|
|
|
// if !color_transform.is_identity() {
|
|
|
|
// context.context_2d.set_global_alpha(1.0);
|
|
|
|
// }
|
2019-04-26 21:11:29 +00:00
|
|
|
|
2019-04-27 01:55:06 +00:00
|
|
|
// context
|
|
|
|
// .context_2d
|
|
|
|
// .draw_image_with_html_image_element(&self.image, self.x_min.into(), self.y_min.into())
|
|
|
|
// .expect("Couldn't render image");
|
2019-04-26 21:11:29 +00:00
|
|
|
|
2019-04-25 17:52:22 +00:00
|
|
|
context.matrix_stack.pop();
|
2019-04-26 21:11:29 +00:00
|
|
|
context.color_transform_stack.push(&self.color_transform);
|
2019-04-25 17:52:22 +00:00
|
|
|
}
|
2019-04-26 03:27:44 +00:00
|
|
|
|
|
|
|
fn set_matrix(&mut self, matrix: Matrix) {
|
|
|
|
self.matrix = matrix;
|
|
|
|
}
|
2019-04-26 21:11:29 +00:00
|
|
|
|
|
|
|
fn set_color_transform(&mut self, color_transform: ColorTransform) {
|
|
|
|
self.color_transform = color_transform;
|
|
|
|
}
|
2019-04-25 17:52:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
impl Trace for Graphic {
|
|
|
|
fn trace(&mut self, _tracer: &mut Tracer) {
|
|
|
|
// Noop
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|