summaryrefslogtreecommitdiffstats
path: root/src/ui/fleet_window.rs
diff options
context:
space:
mode:
authorJon Santmyer <jon@jonsantmyer.com>2026-05-21 07:58:47 -0400
committerJon Santmyer <jon@jonsantmyer.com>2026-05-21 07:58:47 -0400
commit14ca7b5fc15eb2618b46bde0cac85e37ebc9ebd9 (patch)
tree6c4864880bc54778122f1c0e4fa195c16cc064db /src/ui/fleet_window.rs
parenta0a3b3974cab754c10a1517d82762b99482970ce (diff)
downloadsystemic4x-14ca7b5fc15eb2618b46bde0cac85e37ebc9ebd9.tar.gz
systemic4x-14ca7b5fc15eb2618b46bde0cac85e37ebc9ebd9.tar.bz2
systemic4x-14ca7b5fc15eb2618b46bde0cac85e37ebc9ebd9.zip
tacmap back as canvas. begin work on fleet scheduling
Diffstat (limited to 'src/ui/fleet_window.rs')
-rw-r--r--src/ui/fleet_window.rs114
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
+
+