ui/
plugin.rs

1//! Defines the [`UIPlugin`] which inserts all UI related functionality into the bevy `App`.
2
3use crate::camera::{camera_control_system, setup_ui_camera};
4use crate::dialogs::Dialogs;
5use crate::layout::render_editor_layout;
6use crate::notifications::Notifications;
7use crate::state::UiState;
8use bevy::app::App;
9use bevy::prelude::{Plugin, PostUpdate, Startup};
10use bevy_egui::{EguiPlugin, EguiPrimaryContextPass};
11
12/// A [Bevy](https://bevyengine.org/) plugin that adds UI to the app it's added to.
13pub struct UIPlugin;
14
15impl Plugin for UIPlugin {
16    fn build(&self, app: &mut App) {
17        app.add_plugins(EguiPlugin::default())
18            .insert_resource(Notifications::default())
19            .insert_resource(Dialogs::default());
20
21        // Camera controls
22        app.add_systems(PostUpdate, camera_control_system)
23            .add_systems(Startup, setup_ui_camera);
24
25        // editor docking layout
26        app.insert_resource(UiState::default())
27            .add_systems(EguiPrimaryContextPass, render_editor_layout);
28    }
29}