Got UI with scrolling!
next: dynamic loading (populate UI with each loaded scene) then: click -> swtich scenesmain
parent
07eefb11ce
commit
3ea19020ae
@ -0,0 +1,99 @@
|
||||
use bevy::{input::mouse::MouseWheel, prelude::*};
|
||||
|
||||
fn main() {
|
||||
App::new()
|
||||
.add_plugins(DefaultPlugins.set(WindowPlugin {
|
||||
primary_window: Some(Window {
|
||||
title: "UI WTF".into(),
|
||||
resolution: (640., 480.).into(),
|
||||
..default()
|
||||
}),
|
||||
..default()
|
||||
}))
|
||||
// Only run when window is active to reduce cpu cycles
|
||||
// .insert_resource(WinitSettings::desktop_app())
|
||||
.add_startup_system(init)
|
||||
.add_system(scroll)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[derive(Component)]
|
||||
struct ScrollingList;
|
||||
|
||||
fn init(mut commands: Commands) {
|
||||
info!("Spawning camera");
|
||||
commands.spawn(Camera2dBundle { ..default() });
|
||||
|
||||
info!("Initializing UI");
|
||||
commands
|
||||
.spawn(NodeBundle {
|
||||
background_color: BackgroundColor(Color::WHITE),
|
||||
style: Style {
|
||||
justify_content: JustifyContent::Center,
|
||||
size: Size::all(Val::Percent(90.0)),
|
||||
overflow: Overflow::Hidden,
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
})
|
||||
.with_children(|parent| {
|
||||
parent
|
||||
.spawn((
|
||||
NodeBundle {
|
||||
background_color: BackgroundColor(Color::OLIVE),
|
||||
style: Style {
|
||||
flex_wrap: FlexWrap::Wrap,
|
||||
flex_direction: FlexDirection::Row,
|
||||
justify_content: JustifyContent::SpaceAround,
|
||||
size: Size::AUTO,
|
||||
max_size: Size::UNDEFINED,
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
},
|
||||
ScrollingList,
|
||||
))
|
||||
.with_children(|parent| {
|
||||
info!("Initializing Child Element");
|
||||
let colors = [
|
||||
Color::ORANGE,
|
||||
Color::BLUE,
|
||||
Color::GREEN,
|
||||
Color::SALMON,
|
||||
Color::SEA_GREEN,
|
||||
Color::MAROON,
|
||||
Color::ORANGE,
|
||||
Color::BLUE,
|
||||
Color::GREEN,
|
||||
Color::SALMON,
|
||||
Color::SEA_GREEN,
|
||||
Color::MAROON,
|
||||
];
|
||||
for i in 0..12 {
|
||||
parent.spawn(NodeBundle {
|
||||
background_color: BackgroundColor(colors[i]),
|
||||
style: Style {
|
||||
size: Size::all(Val::Px(256.0)),
|
||||
padding: UiRect::all(Val::Px(5.0)),
|
||||
..default()
|
||||
},
|
||||
..default()
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
fn scroll(
|
||||
mut scroll_evr: EventReader<MouseWheel>,
|
||||
mut query: Query<&mut Style, With<ScrollingList>>,
|
||||
) {
|
||||
for ev in scroll_evr.iter() {
|
||||
for mut s in query.iter_mut() {
|
||||
s.position.top = match s.position.top {
|
||||
Val::Px(current) => Val::Px(current + (ev.y * 5.0)),
|
||||
_ => Val::Px(0.0),
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue