diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-12 19:01:27 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-12 19:01:27 -0400 |
| commit | a0a3b3974cab754c10a1517d82762b99482970ce (patch) | |
| tree | 8aeb0ca1e007bacecc8e12a263bd5aa321b8f69a /src/window.rs | |
| parent | 7f63ec5c10eb7e8dd4edaabd1a6a437328911d39 (diff) | |
| download | systemic4x-main.tar.gz systemic4x-main.tar.bz2 systemic4x-main.zip | |
Diffstat (limited to 'src/window.rs')
| -rw-r--r-- | src/window.rs | 98 |
1 files changed, 56 insertions, 42 deletions
diff --git a/src/window.rs b/src/window.rs index 29c347f..3c395d5 100644 --- a/src/window.rs +++ b/src/window.rs @@ -12,10 +12,11 @@ use crate::eguictx::EguiCtx; pub struct GameWindow { - window: Arc<winit::window::Window>, wgpuctx: WgpuCtx, eguictx: EguiCtx, + window: Arc<winit::window::Window>, + tactical_map: TacticalMap, ui_state: ui::State @@ -92,52 +93,66 @@ impl GameWindow pub fn render( &mut self, - game_state: &RefCell<GameState>) - -> Result<(), wgpu::SurfaceError> { + game_state: &RefCell<GameState>, + egui_event_resp: egui_winit::EventResponse) + -> Result<(), wgpu::CurrentSurfaceTexture> { if !self.wgpuctx.is_ready() { return Ok(()); } - - let view = self.wgpuctx.prepare_surface(&wgpu::TextureViewDescriptor::default())?; - let mut scene = SceneCtx::from_view_default(&self.wgpuctx, &view, Some("Systemic window scene")); - self.eguictx.prepare(&self.window); let screen_size = egui::vec2( self.wgpuctx.surface_config().width as f32, self.wgpuctx.surface_config().height as f32); + + let view = self.wgpuctx.prepare_surface(&wgpu::TextureViewDescriptor::default())?; + let mut scene = SceneCtx::from_view_default(&self.wgpuctx, &view, Some("Systemic window scene")); - self.ui_state.render(game_state, &self.eguictx); - if self.ui_state.topbar_sate.current_system.is_some() { - let game_state = game_state.borrow(); - let fleets_manager = game_state.fleets(); - let current_system = &game_state.solar_systems()[self.ui_state.topbar_sate.current_system.unwrap()]; - - self.tactical_map.draw( - &self.wgpuctx, - fleets_manager, - current_system, - game_state.timeman())?; - - self.tactical_map.prepare(&mut scene); - - let mut pass = RenderPassBuilder::new(Some("Systemic window render pass"), &view) - .clear_color(wgpu::Color { r: 0.0, g: 0.0, b: 0.1, a: 1.0 }) - .build_from_scene(&mut scene); - - //Draw the tactical map canvas. - self.tactical_map.paint(&mut pass); - - egui::CentralPanel::default() - .frame(egui::Frame::new()) - .show(self.eguictx.context(), |ui| { - self.tactical_map.paint_labels( - current_system, - game_state.timeman().seconds(), - screen_size, - ui - ); - }); - } + self.eguictx.prepare(&self.window); + + egui::Window::new("Systemic 4X") + .fixed_rect(egui::Rect::from_min_size(egui::pos2(0.0, 0.0), screen_size)) + .resizable(false) + .collapsible(false) + .title_bar(false) + .interactable(false) + .frame(egui::Frame::NONE) + .show(self.eguictx.context(), |ui| { + self.ui_state.paint(game_state, ui); + + if self.ui_state.topbar_sate.current_system.is_some() { + let game_state = game_state.borrow(); + let fleets_manager = game_state.fleets(); + let current_system = &game_state.solar_systems()[self.ui_state.topbar_sate.current_system.unwrap()]; + + match self.tactical_map.prepare( + &mut scene, + &self.wgpuctx, + fleets_manager, + current_system, + game_state.timeman()) + { + Ok(_) => {}, + Err(_) => { + println!("Error in tactical map prepare"); + panic!(); + } + } + + let mut pass = RenderPassBuilder::new(Some("Systemic window render pass"), &view) + .clear_color(wgpu::Color { r: 0.0, g: 0.0, b: 0.1, a: 1.0 }) + .build_from_scene(&mut scene); + + //Draw the tactical map canvas. + self.tactical_map.paint(&mut pass); + + self.tactical_map.paint_labels( + current_system, + game_state.timeman().seconds(), + screen_size, + ui + ); + } + }); self.eguictx.present( &self.window, &self.wgpuctx, @@ -154,10 +169,9 @@ impl GameWindow pub fn on_event( &mut self, event: &WindowEvent) + -> egui_winit::EventResponse { - if self.eguictx.window_event(&self.window, event).consumed { - return; - } + self.eguictx.window_event(&self.window, event) } pub fn resize( |
