From e15b39b2a9cf028b12cbe98f56674e58c5a6bd4c Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 5 Jan 2025 22:27:53 +0100 Subject: a --- client/src/window.rs | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) (limited to 'client/src/window.rs') diff --git a/client/src/window.rs b/client/src/window.rs index 20300d5..5f2e7f8 100644 --- a/client/src/window.rs +++ b/client/src/window.rs @@ -1,4 +1,6 @@ -use crate::renderer::Renderer; +use crate::state::State; +use log::{info, warn}; +use std::net::TcpStream; use winit::{ application::ApplicationHandler, event::WindowEvent, @@ -7,21 +9,28 @@ use winit::{ }; pub struct WindowState { - window: Option<(Window, Renderer<'static>)>, + init: Option, + window: Option<(Window, State<'static>)>, } impl WindowState { - pub fn new() -> Self { - Self { window: None } + pub fn new(init: TcpStream) -> Self { + Self { + window: None, + init: Some(init), + } } } impl ApplicationHandler for WindowState { fn resumed(&mut self, event_loop: &ActiveEventLoop) { + info!("app resumed"); let win = event_loop .create_window(WindowAttributes::default().with_maximized(true)) .unwrap(); - let ren = Renderer::new(unsafe { std::mem::transmute::<&Window, &'static Window>(&win) }) - .unwrap(); - self.window = Some((win, ren)) + let sta = State::new(self.init.take().unwrap(), unsafe { + std::mem::transmute::<&Window, &'static Window>(&win) + }) + .unwrap(); + self.window = Some((win, sta)) } fn window_event( &mut self, @@ -29,12 +38,12 @@ impl ApplicationHandler for WindowState { _window_id: WindowId, event: WindowEvent, ) { - if let Some((_win, ren)) = &mut self.window { + if let Some((_win, sta)) = &mut self.window { match event { WindowEvent::Resized(size) => { - ren.resize(size.width, size.height); + sta.renderer.resize(size.width, size.height); } - WindowEvent::RedrawRequested => ren.draw().unwrap(), + WindowEvent::RedrawRequested => sta.renderer.draw().unwrap(), WindowEvent::CloseRequested => { event_loop.exit(); } @@ -42,4 +51,11 @@ impl ApplicationHandler for WindowState { } } } + fn about_to_wait(&mut self, _event_loop: &ActiveEventLoop) { + if let Some((_win, sta)) = &mut self.window { + if let Err(e) = sta.update() { + warn!("update failed: {e}") + } + } + } } -- cgit v1.2.3-70-g09d2