use crate::AppState;
use bevy::{ecs::system::SystemState, prelude::*};
use bevy_egui::{egui, EguiContexts};
pub mod building_preview;
use building_preview::*;
pub mod console;
use console::*;
pub mod creation;
use creation::*;
pub mod diagnostics;
use diagnostics::*;
pub mod fuel_asset_browser;
pub use fuel_asset_browser::*;
pub mod icons;
pub use icons::*;
pub mod inspector;
pub use inspector::*;
pub mod move_layer;
pub use move_layer::*;
pub mod sdf_export_menu;
use rmf_site_egui::*;
use rmf_site_picking::{Hover, SelectionServiceStages, UiFocused};
pub use sdf_export_menu::*;
pub mod selector_widget;
pub use selector_widget::*;
pub mod tasks;
pub use tasks::*;
pub mod user_camera_display;
pub use user_camera_display::*;
pub mod view_groups;
use view_groups::*;
pub mod view_layers;
use view_layers::*;
pub mod view_levels;
use view_levels::*;
pub mod view_model_instances;
use view_model_instances::*;
pub mod view_scenarios;
use view_scenarios::*;
pub mod view_lights;
use view_lights::*;
pub mod view_nav_graphs;
use view_nav_graphs::*;
pub mod workspace;
use workspace::*;
pub mod prelude {
pub use super::{Inspect, InspectionPlugin};
pub use bevy::ecs::{
system::{SystemParam, SystemState},
world::World,
};
pub use bevy_egui::egui::Ui;
}
#[derive(Default)]
pub struct StandardPropertiesPanelPlugin {}
impl Plugin for StandardPropertiesPanelPlugin {
fn build(&self, app: &mut App) {
app.add_plugins((
PropertiesPanelPlugin::new(PanelSide::Right),
ViewLevelsPlugin::default(),
ViewScenariosPlugin::default(),
ViewModelInstancesPlugin::default(),
ViewNavGraphsPlugin::default(),
ViewLayersPlugin::default(),
StandardTasksPlugin::default(),
StandardInspectorPlugin::default(),
ViewGroupsPlugin::default(),
ViewLightsPlugin::default(),
BuildingPreviewPlugin::default(),
));
}
}
#[derive(Default)]
pub struct StandardUiPlugin {}
impl Plugin for StandardUiPlugin {
fn build(&self, app: &mut App) {
app.init_resource::<CanvasTooltips>()
.add_plugins((
IconsPlugin::default(),
MenuBarPlugin::default(),
StandardPropertiesPanelPlugin::default(),
FuelAssetBrowserPlugin,
DiagnosticsPlugin::default(),
ConsoleWidgetPlugin::default(),
WorkspaceMenuPlugin::default(),
UserCameraDisplayPlugin::default(),
StandardCreationPlugin::default(),
#[cfg(not(target_arch = "wasm32"))]
SdfExportMenuPlugin::default(),
#[cfg(not(target_arch = "wasm32"))]
NavGraphIoPlugin::default(),
))
.add_systems(Startup, init_ui_style)
.add_systems(
Update,
site_ui_layout
.in_set(RenderUiSet)
.run_if(AppState::in_displaying_mode())
.after(SelectionServiceStages::SelectFlush),
)
.add_systems(
PostUpdate,
(resolve_light_export_file,).run_if(AppState::in_displaying_mode()),
);
}
}
#[derive(SystemSet, Hash, PartialEq, Eq, Debug, Clone)]
pub struct RenderUiSet;
pub fn site_ui_layout(
world: &mut World,
panel_widgets: &mut QueryState<(Entity, &mut PanelWidget)>,
egui_context_state: &mut SystemState<EguiContexts>,
) {
render_panels(world, panel_widgets, egui_context_state);
let mut egui_context = egui_context_state.get_mut(world);
let mut ctx = egui_context.ctx_mut().clone();
let ui_has_focus = if let Some(picking_blocker) = world.get_resource::<UiFocused>() {
picking_blocker.0.clone()
} else {
false
};
if ui_has_focus {
let mut hover = world.resource_mut::<Events<Hover>>();
if hover.is_empty() {
hover.send(Hover(None));
}
} else {
world.resource_mut::<CanvasTooltips>().render(&mut ctx);
}
}
fn init_ui_style(mut egui_context: EguiContexts) {
let mut visuals = egui::Visuals::dark();
visuals.override_text_color = Some(egui::Color32::from_rgb(250, 250, 250));
egui_context.ctx_mut().set_visuals(visuals);
}