diff options
| author | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-03 17:31:47 -0400 |
|---|---|---|
| committer | Jon Santmyer <jon@jonsantmyer.com> | 2026-05-03 17:31:47 -0400 |
| commit | 759d5d27c7773c7fe8b165ce08b57204db990b74 (patch) | |
| tree | b9fd06e7b76490ba15dd3a87d83253a7b0bd68cf /src/ui/topbar.rs | |
| parent | b14dd1c1f3e198137fa8b9e0c4f5e56949b11cd0 (diff) | |
| download | systemic4x-759d5d27c7773c7fe8b165ce08b57204db990b74.tar.gz systemic4x-759d5d27c7773c7fe8b165ce08b57204db990b74.tar.bz2 systemic4x-759d5d27c7773c7fe8b165ce08b57204db990b74.zip | |
move topbar ui rendering into it's own module
Diffstat (limited to 'src/ui/topbar.rs')
| -rw-r--r-- | src/ui/topbar.rs | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/ui/topbar.rs b/src/ui/topbar.rs new file mode 100644 index 0000000..07c20a1 --- /dev/null +++ b/src/ui/topbar.rs @@ -0,0 +1,91 @@ +use std::cell::RefCell; + +use crate::{GameState, eguictx::EguiCtx, solar_system::{SolarSystem, SystemId}, timeman::{self, Second, TimeMan}}; + +#[derive(Default, Clone)] +pub struct TopBarState +{ + pub current_system: Option<SystemId>, + pub auto_tick: Option<Second>, + pub do_auto_tick: bool +} + +impl TopBarState +{ + pub fn render( + state: &mut TopBarState, + game_state: &RefCell<GameState>, + eguictx: &EguiCtx) + { + let mut game_state = game_state.borrow_mut(); + + egui::TopBottomPanel::top("topbar").show( + eguictx.context(), + |ui| { + + ui.horizontal(|ui| { + let solar_systems = game_state.solar_systems(); + let selected_system_label = match state.current_system { + Some(id) => solar_systems[id].name(), + None => "" + }; + + egui::ComboBox::from_label("Current System") + .selected_text(selected_system_label) + .show_ui(ui, |ui| { + + for (i, system) in solar_systems.iter().enumerate() { + ui.selectable_value( + &mut state.current_system, + Some(i), + system.name() + ); + } + }); + + let button_seconds = [ + 1, + 5, + 30, + timeman::MINUTE, + timeman::MINUTE * 5, + timeman::MINUTE * 30, + timeman::HOUR, + timeman::DAY, + timeman::DAY * 5, + timeman::YEAR + ]; + let selected_button = state.auto_tick; + + let timeman = game_state.timeman_mut(); + button_seconds.iter().for_each(|&seconds| { + ui.vertical(|ui| { + let auto_selected = match selected_button { + Some(o) => o == seconds, + None => false + }; + let label = TimeMan::format_duration(seconds); + + if ui.button(label.clone()).clicked() { + timeman.advance(seconds); + } + + if ui.add(egui::Button::new(label.clone()).selected(auto_selected)).clicked() { + state.auto_tick = Some(seconds); + } + }); + }); + + ui.checkbox(&mut state.do_auto_tick, "Auto"); + }); + ui.vertical_centered_justified(|ui| { + let timeman = game_state.timeman_mut(); + let time_str = TimeMan::format_duration(timeman.seconds()); + ui.label( + egui::RichText::new(time_str) + .font(egui::FontId::monospace(16.0)) + ); + }); + }); + } +} |
