use bevy::prelude::*;
use rmf_site_editor::SiteEditor;
use rmf_site_egui::*;
#[derive(Debug, Default)]
struct MyMenuPlugin;
#[derive(Debug, Resource)]
struct MyMenuHandler {
unique_export: Entity,
custom_nested_menu: Entity,
}
impl FromWorld for MyMenuHandler {
fn from_world(world: &mut World) -> Self {
let unique_export = world.spawn(MenuItem::Text("My unique export".into())).id();
let file_header = world.resource::<FileMenu>().get();
world.entity_mut(file_header).add_children(&[unique_export]);
let menu = world
.spawn(Menu::from_title("My Awesome Menu".to_string()))
.id();
let sub_menu = world
.spawn(Menu::from_title("My Awesome sub menu".to_string()))
.id();
world.entity_mut(menu).add_children(&[sub_menu]);
let custom_nested_menu = world.spawn(MenuItem::Text("My Awesome Action".into())).id();
world
.entity_mut(sub_menu)
.add_children(&[custom_nested_menu]);
Self {
unique_export,
custom_nested_menu,
}
}
}
fn watch_unique_export_click(mut reader: EventReader<MenuEvent>, menu_handle: Res<MyMenuHandler>) {
for event in reader.read() {
if event.clicked() && event.source() == menu_handle.unique_export {
println!("Doing our epic export");
}
}
}
fn watch_submenu_click(mut reader: EventReader<MenuEvent>, menu_handle: Res<MyMenuHandler>) {
for event in reader.read() {
if event.clicked() && event.source() == menu_handle.custom_nested_menu {
println!("Submenu clicked");
}
}
}
impl Plugin for MyMenuPlugin {
fn build(&self, app: &mut App) {
app.init_resource::<MyMenuHandler>()
.add_systems(Update, (watch_unique_export_click, watch_submenu_click));
}
}
fn main() {
App::new()
.add_plugins((SiteEditor::default(), MyMenuPlugin))
.run();
}