summaryrefslogtreecommitdiffstats
path: root/src/window.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/window.rs')
-rw-r--r--src/window.rs98
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(