use std::sync::Arc;
use std::sync::atomic::{AtomicBool, Ordering};
use crate::ecs::World;
use crate::ui::icons::path;
use crate::ui::{Anchor, Button, MenuLayout, Panel};
pub const SCALE: f32 = 1.0;
pub fn badge(world: &mut World, open: Arc<AtomicBool>, width: f32, height: f32) -> MenuLayout {
Panel::new("DevBadge")
.anchor(Anchor::BottomRight)
.scale(SCALE)
.menu()
.add(
Button::new("DEV", move || {
open.fetch_xor(true, Ordering::Relaxed);
})
.icon(path::WRENCH)
.trailing(path::CARET_UP),
)
.spawn(world, width, height)
}
pub fn menu(world: &mut World, open: Arc<AtomicBool>, width: f32, height: f32) -> MenuLayout {
let metrics = crate::ui::layout::Metrics::menu(SCALE);
let above = -(metrics.button_height + crate::ui::layout::PANEL_PADDING * 2.0);
let outliner = open.clone();
Panel::new("DevMenu")
.anchor(Anchor::BottomRight)
.scale(SCALE)
.menu()
.offset(0.0, above)
.add(Button::submenu("APP", |menu| {
menu.add(Button::label("PLAY"))
.add(Button::label("EDIT"))
.add(Button::label("CONNECTIONS"))
.add(Button::label("SETTINGS"))
.add(Button::label("ABOUT"))
.add(Button::new("EXIT", || std::process::exit(0)))
}))
.add(Button::submenu("FILE", |menu| {
menu.add(Button::label("IMPORT MODEL"))
.add(Button::label("OPEN SCENE"))
.add(Button::label("SAVE SCENE AS"))
}))
.add(Button::submenu("VIEW", move |menu| {
let outliner = outliner.clone();
menu.add(Button::new("OUTLINER", move || {
outliner.store(true, Ordering::Relaxed);
}))
.add(Button::label("INSTANCES"))
.add(Button::label("PROPERTIES"))
.add(Button::label("TIMELINE"))
.add(Button::label("ACTIONS"))
.add(Button::label("SCREENSHOT"))
.add(Button::label("RECENTER VIEW"))
}))
.spawn(world, width, height)
}
pub const BADGE_ENTITIES: usize = 2;