pub mod topbar; pub mod bodies_window; pub mod fleet_window; use std::{borrow::Borrow, cell::RefCell}; use crate::GameState; use crate::eguictx::EguiCtx; use crate::solar_system::body::BodyId; use crate::ui::bodies_window::BodiesWindowState; use crate::ui::fleet_window::FleetWindowState; use crate::ui::topbar::TopBarState; #[derive(Default, Clone)] pub struct State { pub camera_target: Option, pub topbar_sate: TopBarState, pub bodies_window: BodiesWindowState, pub fleet_window: FleetWindowState } impl State { pub fn render( &mut self, game_state: &RefCell, eguictx: &EguiCtx) { let mut game_state = game_state.borrow_mut(); let topbar_action = self.topbar_sate.paint( eguictx, &game_state, &self.bodies_window, &self.fleet_window); if let Some(by) = topbar_action.advance_tick { game_state.timeman_mut().advance(by) } if topbar_action.toggle_bodies_window { self.bodies_window.open = !self.bodies_window.open; } if topbar_action.toggle_fleets_window { self.fleet_window.open = !self.fleet_window.open; } let current_system = match self.topbar_sate.current_system { Some(id) => &game_state.solar_systems()[id], None => return }; let bodies_window_action = self.bodies_window.render(current_system, eguictx); if bodies_window_action.focus_body.is_some() { self.camera_target = bodies_window_action.focus_body; } let fleet_window_action = self.fleet_window.paint(game_state.borrow(), eguictx, &self.camera_target); if let Some(new_fleet) = fleet_window_action.new_fleet { game_state.new_fleet_from_ui(new_fleet); } } }