use std::cell::RefCell; use crate::{GameState, eguictx::EguiCtx, solar_system::{self, SolarSystem, fleet::Fleet}, ui}; #[derive(Default, Clone)] pub struct FleetWindowState { } #[derive(Default, Clone)] pub struct FleetWindowAction { } impl FleetWindowState { pub fn render( &mut self, game_state: &GameState, eguictx: &EguiCtx) -> FleetWindowAction { let mut action = FleetWindowAction::default(); let star_systems = game_state.solar_systems(); egui::Window::new("Fleet Manager") .show(eguictx.context(), |ui| { ui.horizontal(|ui| { self.paint_systems_list(star_systems, ui); ui.add(egui::Separator::default().vertical()); }); }); action } fn paint_systems_list( &mut self, star_systems: &[SolarSystem], ui: &mut egui::Ui) -> egui::InnerResponse<()> { ui.vertical(|ui| { for system in star_systems { let resp = self.paint_fleet_list(&system, ui); if resp.header_response.secondary_clicked() { resp.header_response.context_menu(|ui| { }); } } }) } fn paint_fleet_list( &mut self, star_system: &SolarSystem, ui: &mut egui::Ui) -> egui::CollapsingResponse<()> { let fleets = star_system.fleets(); ui.collapsing(star_system.name(), |ui| { for fleet in fleets { self.paint_fleet_entry(fleet, ui); } }) } fn paint_fleet_entry( &mut self, fleet: &Fleet, ui: &mut egui::Ui) { ui.label(fleet.name()); } }