diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-24 13:04:10 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-24 13:04:10 -0400 |
| commit | 0b428d94e751dc4a5fbe19418bfb5994cebfa54c (patch) | |
| tree | be9c338ec6b5e40ddb96d2d8ecb498b362851a2f /src/ui/fleet_window.rs | |
| parent | 14ca7b5fc15eb2618b46bde0cac85e37ebc9ebd9 (diff) | |
| download | systemic4x-0b428d94e751dc4a5fbe19418bfb5994cebfa54c.tar.gz systemic4x-0b428d94e751dc4a5fbe19418bfb5994cebfa54c.tar.bz2 systemic4x-0b428d94e751dc4a5fbe19418bfb5994cebfa54c.zip | |
Diffstat (limited to 'src/ui/fleet_window.rs')
| -rw-r--r-- | src/ui/fleet_window.rs | 314 |
1 files changed, 0 insertions, 314 deletions
diff --git a/src/ui/fleet_window.rs b/src/ui/fleet_window.rs deleted file mode 100644 index 4db4ce8..0000000 --- a/src/ui/fleet_window.rs +++ /dev/null @@ -1,314 +0,0 @@ -use crate::GameState; -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 { - #[default] - Info, - Schedule -} - -#[derive(Default, Clone)] -pub struct FleetWindowState -{ - pub open: bool, - pub selected_fleet: Option<FleetId>, - - menu_panel: FleetMenuPanelSel, - fleet_schedule_window: FleetScheduleWindow, - - pub new_fleet_window: Option<NewFleetWindowState> -} - -#[derive(Default, Clone)] -pub struct FleetWindowAction -{ - pub new_fleet: Option<NewFleet> -} - -#[derive(Default, Clone)] -pub struct NewFleetWindowState -{ - pub open: bool, - pub parent_system: SystemId, - pub parent_body: BodyId, - - pub fleet_name: String, - pub fleet_sma: Kilometers -} - -#[derive(Clone)] -pub struct NewFleet -{ - pub system: SystemId, - pub orbiting: BodyId, - pub name: String, - pub sma: Kilometers -} - -impl FleetWindowState -{ - pub fn paint( - &mut self, - ui: &mut egui::Ui, - game_state: &GameState, - focused_system: &Option<SystemId>, - focused_body: &Option<BodyId>) - -> FleetWindowAction - { - let mut action = FleetWindowAction::default(); - - let star_systems = game_state.solar_systems(); - let fleets_manager = game_state.fleets(); - - let mut mgr_open = self.open; - egui::Window::new("Fleet Manager") - .open(&mut mgr_open) - .show(ui.ctx(), |ui| { - - ui.vertical(|ui| { - ui.horizontal(|ui| { - self.paint_fleet_list(fleets_manager, ui); - self.paint_fleet_menu(star_systems, fleets_manager, ui); - }); - - if focused_system.is_some() { - if ui.button("New Fleet").clicked() { - if self.new_fleet_window.is_none() { - self.new_fleet_window = Some(NewFleetWindowState::new( - focused_system.unwrap(), - focused_body.unwrap_or(0) - )); - } - } - } - }); - }); - - match &mut self.new_fleet_window { - Some(new_fleet_window) => { - action.new_fleet = new_fleet_window.paint(ui, game_state); - if action.new_fleet.is_some() || !new_fleet_window.open { - self.new_fleet_window = None; - } - } - None => {} - } - - self.open = mgr_open; - action - } - - fn paint_fleet_menu( - &mut self, - star_systems: &[SolarSystem], - fleets_man: &FleetsManager, - ui: &mut egui::Ui) - { - let fleet = match self.selected_fleet { - Some(id) => { fleets_man.fleet(id) }, - None => { return; } - }; - let fleet = match fleet { - Some(entry) => entry, - None => { - self.selected_fleet = None; - return; - } - }; - - ui.separator(); - ui.vertical(|ui| { - ui.horizontal(|ui| { - if ui.button("Info").clicked() { - self.menu_panel = FleetMenuPanelSel::Info; - } - if ui.button("Schedule").clicked() { - self.menu_panel = FleetMenuPanelSel::Schedule; - } - }); - - 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, - fleet: &Fleet, - ui: &mut egui::Ui) - { - if self.menu_panel != FleetMenuPanelSel::Info { - return; - } - - 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.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) - )); - }); - }); - }); - } - - fn paint_fleet_list( - &mut self, - fleets_man: &FleetsManager, - ui: &mut egui::Ui) - { - let fleet_ids = fleets_man.all(); - ui.vertical(|ui| { - for id in fleet_ids { - if let Some(fleet) = fleets_man.fleet(id) { - self.paint_fleet_entry(fleet, ui); - } - } - }); - } - - fn paint_fleet_entry( - &mut self, - fleet: &Fleet, - ui: &mut egui::Ui) - { - let selected = self.selected_fleet.is_some_and(|id| { id == fleet.id() }); - if ui.selectable_label(selected, fleet.name()).clicked() { - 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 -{ - pub fn new( - parent_system: SystemId, - parent_body: BodyId) - -> Self { - Self { - open: true, - parent_system: parent_system, - parent_body: parent_body, - ..Default::default() - } - } - - pub fn paint( - &mut self, - ui: &mut egui::Ui, - game_state: &GameState,) - -> Option<NewFleet> - { - let solar_system = &game_state.solar_systems()[self.parent_system]; - let orbiting = solar_system.body(self.parent_body); - - match egui::Window::new("New Fleet") - .collapsible(false) - .open(&mut self.open) - .show(ui.ctx(), |ui| { - ui.vertical(|ui| { - ui.horizontal(|ui| { - ui.label("Name: "); - ui.add(egui::TextEdit::singleline(&mut self.fleet_name)); - }); - ui.label(format!("Orbiting: {}", orbiting.name())); - ui.horizontal(|ui| { - ui.label("SMA: "); - ui.add(egui::DragValue::new(&mut self.fleet_sma) - .range(orbiting.radius()..=f32::INFINITY) - .clamp_existing_to_range(true) - .suffix("km")); - }); - if ui.button("Create").clicked() { - return Some(NewFleet { - system: self.parent_system, - orbiting: self.parent_body, - name: self.fleet_name.clone(), - sma: self.fleet_sma, - }); - } - None - }).inner - }) { - Some(resp) => { - resp.inner? - }, - None => None - } - } -} // impl FleetWindowState - -impl Default for NewFleet -{ - fn default() -> Self { - Self { - system: Default::default(), - orbiting: Default::default(), - name: "New Fleet".to_string(), - sma: Default::default() - } - } -} // impl NewFleet - - |
