diff --git a/src/engine/mod.rs b/src/engine/mod.rs index 305d919..a39068a 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -55,17 +55,6 @@ impl Game { /// Creates a new game. pub fn new() -> Result { Ok(Game(Rc::new(RefCell::new(Engine::new()?)))) - - // let clone = inner.clone(); - // let cb = Closure::::new(move |event: web_sys::GamepadEvent| { - // let mut inner = clone.borrow_mut(); - // inner.add_gamepad(&event); - // }); - - // (*window) - // .add_event_listener_with_callback("gamepadconnected", cb.as_ref().unchecked_ref())?; - - // cb.forget(); } /// Starts the game. @@ -135,6 +124,11 @@ pub struct Engine { /// The web page document. pub document: web_sys::Document, + /// The canvas. + /// + /// We keep it to easily know the size. + pub canvas: web_sys::HtmlCanvasElement, + /// The canvas rendering context. /// /// We keep a reference so that we can easily render things. @@ -172,6 +166,7 @@ impl Engine { inputs: Inputs::new(&window)?, window, document, + canvas, context, performance, }) @@ -231,13 +226,28 @@ impl Engine { /// Performs the rendering of the engine. pub fn render(&self) -> Result<()> { + let window_width = unwrap!(self.window.inner_width()?.as_f64()); + let window_height = unwrap!(self.window.inner_height()?.as_f64()); + let window_width_u32 = window_width as u32; + let window_height_u32 = window_height as u32; + + if window_width_u32 != self.canvas.width() { + self.canvas.set_width(window_width_u32); + } + + if window_height_u32 != self.canvas.height() { + self.canvas.set_height(window_height_u32); + } + let view = self.scene.view().unwrap(); // TODO remove this unwrap // Clear render - self.context.clear_rect(0.0, 0.0, 1920.0, 1080.0); + self.context + .clear_rect(0.0, 0.0, window_width, window_height); self.context .set_fill_style(&JsValue::from_str("rgb(135, 206, 235)")); - self.context.fill_rect(0.0, 0.0, 1920.0, 1080.0); + self.context + .fill_rect(0.0, 0.0, window_width, window_height); // Draw the scene let map = self.scene.map(); @@ -265,15 +275,18 @@ impl Engine { /// Draw a drawable. pub fn draw(&self, drawable: &D, view: Bbox) -> Result<()> { + let window_width = unwrap!(self.window.inner_width()?.as_f64()); + let window_height = unwrap!(self.window.inner_height()?.as_f64()); + let image = self.textures.get(drawable.texture()); let source = drawable.texture_rect(self.after_loop); let mut dest = source.clone(); dest.position = drawable.position() - view.position; - dest.position.x *= 1920.0 / view.size.x; - dest.position.y *= 1080.0 / view.size.y; - dest.size.x *= 1920.0 / view.size.x; - dest.size.y *= 1080.0 / view.size.y; + dest.position.x *= window_width / view.size.x; + dest.position.y *= window_height / view.size.y; + dest.size.x *= window_width / view.size.x; + dest.size.y *= window_height / view.size.y; image.render(source, dest, &self.context)?; Ok(())