bevy_codex/widgets/status_bar/
systems.rs

1use 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}