diff options
Diffstat (limited to 'src/ui/fleet_window.rs')
| -rw-r--r-- | src/ui/fleet_window.rs | 114 |
1 files changed, 69 insertions, 45 deletions
diff --git a/src/ui/fleet_window.rs b/src/ui/fleet_window.rs index 55e3d59..4db4ce8 100644 --- a/src/ui/fleet_window.rs +++ b/src/ui/fleet_window.rs @@ -3,6 +3,7 @@ use crate::fleet::{Fleet, FleetId, FleetsManager}; use crate::solar_system::orbit::StaticOrbiter; use crate::solar_system::{Kilometers, SolarSystem, SystemId}; use crate::solar_system::body::BodyId; +use crate::ui::fleet_schedule::FleetScheduleWindow; #[derive(Default, Clone, PartialEq)] enum FleetMenuPanelSel { @@ -16,7 +17,9 @@ pub struct FleetWindowState { pub open: bool, pub selected_fleet: Option<FleetId>, - pub menu_panel: FleetMenuPanelSel, + + menu_panel: FleetMenuPanelSel, + fleet_schedule_window: FleetScheduleWindow, pub new_fleet_window: Option<NewFleetWindowState> } @@ -107,7 +110,7 @@ impl FleetWindowState ui: &mut egui::Ui) { let fleet = match self.selected_fleet { - Some(id) => { fleets_man.entry(id) }, + Some(id) => { fleets_man.fleet(id) }, None => { return; } }; let fleet = match fleet { @@ -128,64 +131,74 @@ impl FleetWindowState self.menu_panel = FleetMenuPanelSel::Schedule; } }); - self.paint_fleet_menu_info(star_systems, fleets_man, fleet, ui); + + egui::Frame::new() + .stroke(egui::Stroke::new(1.0, egui::Color32::LIGHT_GRAY)) + .show(ui, |ui| { + ui.set_min_width(200.0); + ui.set_min_height(200.0); + ui.style_mut().interaction.selectable_labels = false; + + match self.menu_panel { + FleetMenuPanelSel::Info => + self.paint_fleet_menu_info(star_systems, fleets_man, fleet, ui), + FleetMenuPanelSel::Schedule => + self.fleet_schedule_window.paint(star_systems, fleets_man, fleet, ui) + }; + }); }); } fn paint_fleet_menu_info( &mut self, star_systems: &[SolarSystem], - fleets_man: &FleetsManager, + _fleets_man: &FleetsManager, fleet: &Fleet, ui: &mut egui::Ui) { if self.menu_panel != FleetMenuPanelSel::Info { return; } - egui::Frame::canvas(ui.style()).show(ui, |ui| { - ui.set_min_width(200.0); - ui.style_mut().interaction.selectable_labels = false; - if let Some(orbit) = fleet.orbit() { - let star_system = &star_systems[orbit.system()]; - let parent = star_system.body(orbit.parent()); + if let Some(orbit) = fleet.orbit() { + let star_system = &star_systems[orbit.system()]; + let parent = star_system.body(orbit.parent()); - ui.push_id("orbital_info_table", |ui| { - egui_extras::TableBuilder::new(ui) - .column(egui_extras::Column::auto()) - .column(egui_extras::Column::remainder()) - .body(|mut body| { - body.row(16.0, |mut row| { - row.col(|col| { col.label("System"); }); - row.col(|col| { col.label(star_system.name()); }); - }); - body.row(16.0, |mut row| { - row.col(|col| { col.label("Orbiting"); }); - row.col(|col| { col.label(parent.name()); }); - }); - body.row(16.0, |mut row| { - row.col(|col| { col.label("Radius"); }); - row.col(|col| { col.label(format!("{:.1}", orbit.sma())); }); - }); + ui.push_id("orbital_info_table", |ui| { + egui_extras::TableBuilder::new(ui) + .column(egui_extras::Column::auto()) + .column(egui_extras::Column::remainder()) + .body(|mut body| { + body.row(16.0, |mut row| { + row.col(|col| { col.label("System"); }); + row.col(|col| { col.label(star_system.name()); }); + }); + body.row(16.0, |mut row| { + row.col(|col| { col.label("Orbiting"); }); + row.col(|col| { col.label(parent.name()); }); + }); + body.row(16.0, |mut row| { + row.col(|col| { col.label("Radius"); }); + row.col(|col| { col.label(format!("{:.1}", orbit.sma())); }); }); }); + }); - ui.separator(); - } + ui.separator(); + } - let heading = fleet.heading(); - egui_extras::TableBuilder::new(ui) - .column(egui_extras::Column::auto()) - .column(egui_extras::Column::remainder()) - .body(|mut body| { - body.row(16.0, |mut row| { - row.col(|col| { col.label("Heading"); }); - row.col(|col| { - col.label(format!("{:?} by {:?}", - cgmath::Deg::<f32>::from(heading.x), - cgmath::Deg::<f32>::from(heading.y) - )); - }); + let heading = fleet.heading(); + egui_extras::TableBuilder::new(ui) + .column(egui_extras::Column::auto()) + .column(egui_extras::Column::remainder()) + .body(|mut body| { + body.row(16.0, |mut row| { + row.col(|col| { col.label("Heading"); }); + row.col(|col| { + col.label(format!("{:?} by {:?}", + cgmath::Deg::<f32>::from(heading.x), + cgmath::Deg::<f32>::from(heading.y) + )); }); }); }); @@ -199,7 +212,7 @@ impl FleetWindowState let fleet_ids = fleets_man.all(); ui.vertical(|ui| { for id in fleet_ids { - if let Some(fleet) = fleets_man.entry(id) { + if let Some(fleet) = fleets_man.fleet(id) { self.paint_fleet_entry(fleet, ui); } } @@ -213,9 +226,18 @@ impl FleetWindowState { let selected = self.selected_fleet.is_some_and(|id| { id == fleet.id() }); if ui.selectable_label(selected, fleet.name()).clicked() { - self.selected_fleet = if selected { None } else { Some(fleet.id()) }; + self.select_fleet_from_entries_list(fleet, selected); } } + + fn select_fleet_from_entries_list( + &mut self, + fleet: &Fleet, + selected: bool) + { + self.selected_fleet = if selected { None } else { Some(fleet.id()) }; + self.fleet_schedule_window.target = (None, None); + } } // FleetWindowAction impl NewFleetWindowState @@ -287,4 +309,6 @@ impl Default for NewFleet sma: Default::default() } } -} +} // impl NewFleet + + |
