feat: egui UI wired with live disk brightness + steps

This commit is contained in:
xfy 2026-07-10 10:54:22 +08:00
parent 1b1eda0772
commit 983413e9af
3 changed files with 26 additions and 1 deletions

View File

@ -6,6 +6,7 @@ mod web;
mod render; mod render;
mod camera; mod camera;
mod params; mod params;
mod ui;
fn main() { fn main() {
// On web, abort startup if WebGPU isn't available and show a message. // On web, abort startup if WebGPU isn't available and show a message.

View File

@ -10,8 +10,15 @@ impl Plugin for BlackHolePlugin {
app.init_resource::<crate::camera::OrbitCamera>() app.init_resource::<crate::camera::OrbitCamera>()
.init_resource::<crate::params::BlackHoleParams>() .init_resource::<crate::params::BlackHoleParams>()
.add_plugins(Material2dPlugin::<BlackHoleMaterial>::default()) .add_plugins(Material2dPlugin::<BlackHoleMaterial>::default())
.add_plugins(bevy_egui::EguiPlugin::default())
.add_systems(Startup, spawn_fullscreen_quad) .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);
} }
} }

17
src/ui.rs Normal file
View File

@ -0,0 +1,17 @@
use bevy::prelude::*;
use bevy_egui::egui;
pub fn ui_system(
mut contexts: bevy_egui::EguiContexts,
mut params: ResMut<crate::params::BlackHoleParams>,
) {
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"));
});
}
}