1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
use bevy::prelude::*;
use bevy_lunex::prelude::*;

use super::components::{StatusBar, StatusBarUi};

pub fn build_status_bar(
    mut commands: Commands,
    query: Query<(Entity, &StatusBar), Added<StatusBar>>,
    asset_server: Res<AssetServer>,
) {
    for (entity, bar) in &query {
        commands
            .entity(entity)
            .insert(UiTreeBundle::<StatusBarUi>::from(UiTree::new2d(
                "StatusBar",
            )))
            .with_children(|ui| {
                let bar_link =
                    UiLink::<StatusBarUi>::path("StatusBarFrame-".to_string() + &bar.label);
                ui.spawn((
                    bar_link.clone(),
                    UiLayout::boundary()
                        .pos1(Ab(bar.top_left))
                        .pos2(Ab(bar.bottom_right))
                        .pack::<Base>(),
                    ImageScaleMode::Sliced(TextureSlicer {
                        border: BorderRect::rectangle(5.0, 5.0),
                        ..default()
                    }),
                    UiImage2dBundle {
                        texture: bar
                            .frame
                            .clone()
                            .unwrap_or(asset_server.load("images/ui/barHorizontal_shadow_9.png")),
                        sprite: Sprite { ..default() },
                        ..default()
                    },
                ));
                ui.spawn((
                    bar_link.add("StatusBar"),
                    UiLayout::window().size(Rl((bar.value, 90.0))).pack::<Base>(),
                    UiImage2dBundle {
                        texture: asset_server.load("images/ui/barHorizontal_white_mid.png"),
                        sprite: Sprite {
                            color: Color::Srgba(bar.color.into()),
                            ..default()
                        },
                        ..default()
                    },
                ));
            });
    }
}