diff --git a/src/main.rs b/src/main.rs index 645b590..9de0821 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ mod web; mod render; mod camera; mod params; +mod ui; fn main() { // On web, abort startup if WebGPU isn't available and show a message. diff --git a/src/render/plugin.rs b/src/render/plugin.rs index 637eae6..fd3016d 100644 --- a/src/render/plugin.rs +++ b/src/render/plugin.rs @@ -10,8 +10,15 @@ impl Plugin for BlackHolePlugin { app.init_resource::() .init_resource::() .add_plugins(Material2dPlugin::::default()) + .add_plugins(bevy_egui::EguiPlugin::default()) .add_systems(Startup, spawn_fullscreen_quad) - .add_systems(Update, (crate::camera::orbit_controller, mirror_params)); + .add_systems( + Update, + (crate::camera::orbit_controller, mirror_params), + ) + // bevy_egui 0.41 requires UI systems to run inside the egui context + // pass (fonts/ctx are initialized there); placing them in Update panics. + .add_systems(bevy_egui::EguiPrimaryContextPass, crate::ui::ui_system); } } diff --git a/src/ui.rs b/src/ui.rs new file mode 100644 index 0000000..7a74539 --- /dev/null +++ b/src/ui.rs @@ -0,0 +1,17 @@ +use bevy::prelude::*; +use bevy_egui::egui; + +pub fn ui_system( + mut contexts: bevy_egui::EguiContexts, + mut params: ResMut, +) { + if let Ok(ctx) = contexts.ctx_mut() { + egui::Window::new("Controls").show(ctx, |ui| { + ui.add( + egui::Slider::new(&mut params.disk_brightness, 0.0..=3.0) + .text("Disk brightness"), + ); + ui.add(egui::Slider::new(&mut params.steps, 50..=600).text("Steps")); + }); + } +}