//! This crate contains Bevy's UI system, which can be used to create UI for both 2D and 3D games //! # Basic usage //! Spawn [`entity::UiCameraBundle`] and spawn UI elements with [`entity::ButtonBundle`], [`entity::ImageBundle`], [`entity::TextBundle`] and [`entity::NodeBundle`] //! This UI is laid out with the Flexbox paradigm (see ) except the vertical axis is inverted mod flex; mod focus; mod margins; mod render; mod ui_node; pub mod entity; pub mod update; pub mod widget; pub use flex::*; pub use focus::*; pub use margins::*; pub use render::*; pub use ui_node::*; #[doc(hidden)] pub mod prelude { #[doc(hidden)] pub use crate::{entity::*, ui_node::*, widget::Button, Interaction, Margins}; } use bevy_app::prelude::*; use bevy_ecs::schedule::{ParallelSystemDescriptorCoercion, SystemLabel}; use bevy_input::InputSystem; use bevy_math::{Rect, Size}; use bevy_transform::TransformSystem; use update::{ui_z_system, update_clipping_system}; /// The basic plugin for Bevy UI #[derive(Default)] pub struct UiPlugin; /// The label enum labeling the types of systems in the Bevy UI #[derive(Debug, Hash, PartialEq, Eq, Clone, SystemLabel)] pub enum UiSystem { /// After this label, the ui flex state has been updated Flex, /// After this label, input interactions with UI entities have been updated for this frame Focus, } impl Plugin for UiPlugin { fn build(&self, app: &mut App) { app.init_resource::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() .register_type::() // NOTE: used by Style::aspect_ratio .register_type::>() .register_type::() .register_type::() .register_type::>() .register_type::>() .register_type::>() .register_type::