//! This crate contains Bevy's UI system, which can be used to create UI for both 2D and 3D games //! # Basic usage //! Spawn UI elements with [`node_bundles::ButtonBundle`], [`node_bundles::ImageBundle`], [`node_bundles::TextBundle`] and [`node_bundles::NodeBundle`] //! This UI is laid out with the Flexbox paradigm (see ) mod flex; mod focus; mod geometry; mod render; mod stack; mod ui_node; #[cfg(feature = "bevy_text")] mod accessibility; pub mod camera_config; pub mod node_bundles; pub mod update; pub mod widget; #[cfg(feature = "bevy_text")] use bevy_render::camera::CameraUpdateSystem; use bevy_render::extract_component::ExtractComponentPlugin; pub use flex::*; pub use focus::*; pub use geometry::*; pub use render::*; pub use ui_node::*; #[doc(hidden)] pub mod prelude { #[doc(hidden)] pub use crate::{ camera_config::*, geometry::*, node_bundles::*, ui_node::*, widget::*, Interaction, UiScale, }; } use bevy_app::prelude::*; use bevy_ecs::prelude::*; use bevy_input::InputSystem; use bevy_transform::TransformSystem; use stack::ui_stack_system; pub use stack::UiStack; use update::update_clipping_system; use crate::prelude::UiCameraConfig; /// 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, SystemSet)] 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, /// After this label, the [`UiStack`] resource has been updated Stack, } /// The current scale of the UI. /// /// A multiplier to fixed-sized ui values. /// **Note:** This will only affect fixed ui values like [`Val::Px`] #[derive(Debug, Resource)] pub struct UiScale { /// The scale to be applied. pub scale: f64, } impl Default for UiScale { fn default() -> Self { Self { scale: 1.0 } } } impl Plugin for UiPlugin { fn build(&self, app: &mut App) { app.add_plugin(ExtractComponentPlugin::::default()) .init_resource::() .init_resource::() .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::