bevy_codex/widgets/status_bar/
systems.rs1use bevy::prelude::*;
2use bevy_lunex::prelude::*;
3
4use super::components::{StatusBar, StatusBarUi};
5
6pub fn build_status_bar(
7 mut commands: Commands,
8 query: Query<(Entity, &StatusBar), Added<StatusBar>>,
9 asset_server: Res<AssetServer>,
10) {
11 for (entity, bar) in &query {
12 commands
13 .entity(entity)
14 .insert(UiTreeBundle::<StatusBarUi>::from(UiTree::new2d(
15 "StatusBar",
16 )))
17 .with_children(|ui| {
18 let bar_link =
19 UiLink::<StatusBarUi>::path("StatusBarFrame-".to_string() + &bar.label);
20 ui.spawn((
21 bar_link.clone(),
22 UiLayout::boundary()
23 .pos1(Ab(bar.top_left))
24 .pos2(Ab(bar.bottom_right))
25 .pack::<Base>(),
26 ImageScaleMode::Sliced(TextureSlicer {
27 border: BorderRect::rectangle(5.0, 5.0),
28 ..default()
29 }),
30 UiImage2dBundle {
31 texture: bar
32 .frame
33 .clone()
34 .unwrap_or(asset_server.load("images/ui/barHorizontal_shadow_9.png")),
35 sprite: Sprite { ..default() },
36 ..default()
37 },
38 ));
39 ui.spawn((
40 bar_link.add("StatusBar"),
41 UiLayout::window().size(Rl((bar.value, 90.0))).pack::<Base>(),
42 UiImage2dBundle {
43 texture: asset_server.load("images/ui/barHorizontal_white_mid.png"),
44 sprite: Sprite {
45 color: Color::Srgba(bar.color.into()),
46 ..default()
47 },
48 ..default()
49 },
50 ));
51 });
52 }
53}