diff --git a/Cargo.lock b/Cargo.lock index 0d95d10..b43434c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4851,9 +4851,11 @@ dependencies = [ "bevy_pancam", "bevy_prototype_lyon", "big_space", + "chrono", "egui_extras", "hifitime", "iyes_progress", + "lofitime", "log", "particular", "rand", diff --git a/spacetime/Cargo.toml b/spacetime/Cargo.toml index e9a80eb..7ca731c 100644 --- a/spacetime/Cargo.toml +++ b/spacetime/Cargo.toml @@ -21,8 +21,9 @@ iyes_progress = { version = "0.12.0", features = [ rand = "0.8" big_space = "0.7.0" hifitime = "3.9.0" +lofitime = { path = "../lofitime" } particular = { version = "0.7.0", features = ["gpu", "parallel"] } -log = { workspace = true } +log = { workspace = true } bevy_egui = { version = "0.28.0", features = ["serde"] } avian2d = { version = "0.1.1", features = [ "default-collider", @@ -34,6 +35,7 @@ bevy-inspector-egui = { version = "0.25.1", features = ["highlight_changes"] } bevy_pancam = { version = "0.13.0", features = ["bevy_egui"] } bevy_prototype_lyon = "0.12.0" egui_extras = { version = "0.28.1", features = ["datepicker"] } +chrono = { version = "0.4.38", default-features = false } [dev-dependencies] bevy-inspector-egui = { version = "0.25.1", features = ["highlight_changes"] } diff --git a/spacetime/src/ui/datepicker.rs b/spacetime/src/ui/datepicker.rs deleted file mode 100644 index 00dc7ec..0000000 --- a/spacetime/src/ui/datepicker.rs +++ /dev/null @@ -1,5 +0,0 @@ -use bevy::prelude::*; - -pub(super) fn plugin(app: &mut App) { - // app.add_plugins(); -} diff --git a/spacetime/src/ui/datetime.rs b/spacetime/src/ui/datetime.rs new file mode 100644 index 0000000..547d359 --- /dev/null +++ b/spacetime/src/ui/datetime.rs @@ -0,0 +1,27 @@ +use bevy::prelude::*; +use bevy_egui::egui::{self, Widget}; +use egui_extras::DatePickerButton; +use hifitime::prelude::*; +use lofitime::{HifiDateTime, LofiDateTime}; + +use crate::physics::time::CoordinateTime; + +pub fn set_time_menu(ui: &mut egui::Ui, coordinate_time: &mut ResMut) { + ui.menu_button("Coordinate Time...", |ui| { + ui.menu_button("Scale...", |ui| { + ui.vertical(|ui| { + ui.radio_value(&mut coordinate_time.scale, TimeScale::UTC, "UTC"); + ui.radio_value(&mut coordinate_time.scale, TimeScale::TAI, "TAI"); + ui.radio_value(&mut coordinate_time.scale, TimeScale::BDT, "BDT"); + }); + }); + ui.menu_button("Epoch...", |ui| { + let mut selected_date = coordinate_time.epoch().to_lofi_naive().date(); + if DatePickerButton::new(&mut selected_date).ui(ui).changed() { + // Update the Time resource with the selected date + let new_time = selected_date.and_time(chrono::NaiveTime::from_hms_milli_opt(0, 0, 0, 0).unwrap()); + coordinate_time.start_epoch = Some(new_time.and_utc().to_hifi_epoch()); + } + }); + }); +} diff --git a/spacetime/src/ui/mod.rs b/spacetime/src/ui/mod.rs index 4f57947..72fcd9b 100644 --- a/spacetime/src/ui/mod.rs +++ b/spacetime/src/ui/mod.rs @@ -1,6 +1,6 @@ mod camera; mod cursor; -mod datepicker; +mod datetime; mod diagnostics; mod shell; @@ -14,7 +14,6 @@ impl PluginGroup for UserInterfacePlugins { .add(bevy_egui::EguiPlugin) .add(camera::plugin) .add(cursor::plugin) - .add(datepicker::plugin) .add(diagnostics::plugin) .add(shell::plugin) } diff --git a/spacetime/src/ui/shell.rs b/spacetime/src/ui/shell.rs index dab3292..b403e8d 100644 --- a/spacetime/src/ui/shell.rs +++ b/spacetime/src/ui/shell.rs @@ -16,7 +16,7 @@ fn update_shell( egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { egui::menu::bar(ui, |ui| { ui.with_layout(egui::Layout::left_to_right(egui::Align::Center), |ui| { - set_time_menu(ui, &mut coordinate_time); + super::datetime::set_time_menu(ui, &mut coordinate_time); }); ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| { egui::warn_if_debug_build(ui); @@ -25,19 +25,3 @@ fn update_shell( }); }); } - - -fn set_time_menu(ui: &mut egui::Ui, coordinate_time: &mut ResMut) { - ui.menu_button("Coordinate Time...", |ui| { - ui.menu_button("Scale...", |ui| { - ui.vertical(|ui| { - ui.radio_value(&mut coordinate_time.scale, TimeScale::UTC, "UTC"); - ui.radio_value(&mut coordinate_time.scale, TimeScale::TAI, "TAI"); - ui.radio_value(&mut coordinate_time.scale, TimeScale::BDT, "BDT"); - }); - }); - ui.menu_button("Epoch...", |ui| { - // ui.add(egui_extras::DatePickerButton::new(&mut coordinate_time.start_epoch)); - }); - }); -}