bevy_basic_ui/widgets/slider/
systems.rs

1use bevy::prelude::*;
2use bevy_mod_picking::events::{Drag, Pointer};
3
4use crate::settings::resources::SettingsVals;
5
6use super::components::{Knob, Rack};
7
8pub fn update_value(
9    mut ui_q: Query<(&Knob, &mut Style)>,
10    mut rack_q: Query<&Rack>,
11    mut ev: EventReader<Pointer<Drag>>,
12    mut settings: ResMut<SettingsVals>,
13) {
14    for e in ev.read() {
15        if let Ok((knob, mut style)) = ui_q.get_mut(e.target) {
16            style.left =
17                Val::Px((e.pointer_location.position.x + e.event.delta.x).clamp(0.0, 500.0));
18            for setting in settings.0.iter_mut(){
19                for _r in rack_q.iter_mut().filter(|p|{p.index_tag == knob.index_tag}){
20                    setting.value = knob.value;
21                }
22            }
23        }
24    }
25}