 32f7997c56
			
		
	
	
		32f7997c56
		
	
	
	
	
		
			
			# Objective Updated the docs for bevy_ui as requested by #3492 ## Solution I have documented the parts I understand. anchors.rs is not in use and should be removed, thus I haven't documented that, and some of the more renderer-heavy code is beyond me and needs input from either cart or someone familiar with bevy rendering Co-authored-by: Troels Jessen <kairyuka@gmail.com>
		
			
				
	
	
		
			173 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			173 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! This module contains the bundles used in Bevy's UI
 | |
| 
 | |
| use crate::{
 | |
|     widget::{Button, ImageMode},
 | |
|     CalculatedSize, FocusPolicy, Interaction, Node, Style, UiColor, UiImage, CAMERA_UI,
 | |
| };
 | |
| use bevy_ecs::bundle::Bundle;
 | |
| use bevy_render::{
 | |
|     camera::{Camera, DepthCalculation, OrthographicProjection, WindowOrigin},
 | |
|     view::{Visibility, VisibleEntities},
 | |
| };
 | |
| use bevy_text::Text;
 | |
| use bevy_transform::prelude::{GlobalTransform, Transform};
 | |
| 
 | |
| /// The basic UI node
 | |
| #[derive(Bundle, Clone, Debug, Default)]
 | |
| pub struct NodeBundle {
 | |
|     /// Describes the size of the node
 | |
|     pub node: Node,
 | |
|     /// Describes the style including flexbox settings
 | |
|     pub style: Style,
 | |
|     /// Describes the color of the node
 | |
|     pub color: UiColor,
 | |
|     /// Describes the image of the node
 | |
|     pub image: UiImage,
 | |
|     /// The transform of the node
 | |
|     pub transform: Transform,
 | |
|     /// The global transform of the node
 | |
|     pub global_transform: GlobalTransform,
 | |
|     /// Describes the visibility properties of the node
 | |
|     pub visibility: Visibility,
 | |
| }
 | |
| 
 | |
| /// A UI node that is an image
 | |
| #[derive(Bundle, Clone, Debug, Default)]
 | |
| pub struct ImageBundle {
 | |
|     /// Describes the size of the node
 | |
|     pub node: Node,
 | |
|     /// Describes the style including flexbox settings
 | |
|     pub style: Style,
 | |
|     /// Configures how the image should scale
 | |
|     pub image_mode: ImageMode,
 | |
|     /// The calculated size based on the given image
 | |
|     pub calculated_size: CalculatedSize,
 | |
|     /// The color of the node
 | |
|     pub color: UiColor,
 | |
|     /// The image of the node
 | |
|     pub image: UiImage,
 | |
|     /// The transform of the node
 | |
|     pub transform: Transform,
 | |
|     /// The global transform of the node
 | |
|     pub global_transform: GlobalTransform,
 | |
|     /// Describes the visibility properties of the node
 | |
|     pub visibility: Visibility,
 | |
| }
 | |
| 
 | |
| /// A UI node that is text
 | |
| #[derive(Bundle, Clone, Debug)]
 | |
| pub struct TextBundle {
 | |
|     /// Describes the size of the node
 | |
|     pub node: Node,
 | |
|     /// Describes the style including flexbox settings
 | |
|     pub style: Style,
 | |
|     /// Contains the text of the node
 | |
|     pub text: Text,
 | |
|     /// The calculated size based on the given image
 | |
|     pub calculated_size: CalculatedSize,
 | |
|     /// Whether this node should block interaction with lower nodes
 | |
|     pub focus_policy: FocusPolicy,
 | |
|     /// The transform of the node
 | |
|     pub transform: Transform,
 | |
|     /// The global transform of the node
 | |
|     pub global_transform: GlobalTransform,
 | |
|     /// Describes the visibility properties of the node
 | |
|     pub visibility: Visibility,
 | |
| }
 | |
| 
 | |
| impl Default for TextBundle {
 | |
|     fn default() -> Self {
 | |
|         TextBundle {
 | |
|             focus_policy: FocusPolicy::Pass,
 | |
|             text: Default::default(),
 | |
|             node: Default::default(),
 | |
|             calculated_size: Default::default(),
 | |
|             style: Default::default(),
 | |
|             transform: Default::default(),
 | |
|             global_transform: Default::default(),
 | |
|             visibility: Default::default(),
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| /// A UI node that is a button
 | |
| #[derive(Bundle, Clone, Debug)]
 | |
| pub struct ButtonBundle {
 | |
|     /// Describes the size of the node
 | |
|     pub node: Node,
 | |
|     /// Marker component that signals this node is a button
 | |
|     pub button: Button,
 | |
|     /// Describes the style including flexbox settings
 | |
|     pub style: Style,
 | |
|     /// Describes whether and how the button has been interacted with by the input
 | |
|     pub interaction: Interaction,
 | |
|     /// Whether this node should block interaction with lower nodes
 | |
|     pub focus_policy: FocusPolicy,
 | |
|     /// The color of the node
 | |
|     pub color: UiColor,
 | |
|     /// The image of the node
 | |
|     pub image: UiImage,
 | |
|     /// The transform of the node
 | |
|     pub transform: Transform,
 | |
|     /// The global transform of the node
 | |
|     pub global_transform: GlobalTransform,
 | |
|     /// Describes the visibility properties of the node
 | |
|     pub visibility: Visibility,
 | |
| }
 | |
| 
 | |
| impl Default for ButtonBundle {
 | |
|     fn default() -> Self {
 | |
|         ButtonBundle {
 | |
|             button: Button,
 | |
|             interaction: Default::default(),
 | |
|             focus_policy: Default::default(),
 | |
|             node: Default::default(),
 | |
|             style: Default::default(),
 | |
|             color: Default::default(),
 | |
|             image: Default::default(),
 | |
|             transform: Default::default(),
 | |
|             global_transform: Default::default(),
 | |
|             visibility: Default::default(),
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| /// The camera that is needed to see UI elements
 | |
| #[derive(Bundle, Debug)]
 | |
| pub struct UiCameraBundle {
 | |
|     /// The camera component
 | |
|     pub camera: Camera,
 | |
|     /// The orthographic projection settings
 | |
|     pub orthographic_projection: OrthographicProjection,
 | |
|     /// The transform of the camera
 | |
|     pub transform: Transform,
 | |
|     /// The global transform of the camera
 | |
|     pub global_transform: GlobalTransform,
 | |
|     /// Contains visible entities
 | |
|     // FIXME there is no frustrum culling for UI
 | |
|     pub visible_entities: VisibleEntities,
 | |
| }
 | |
| 
 | |
| impl Default for UiCameraBundle {
 | |
|     fn default() -> Self {
 | |
|         // we want 0 to be "closest" and +far to be "farthest" in 2d, so we offset
 | |
|         // the camera's translation by far and use a right handed coordinate system
 | |
|         let far = 1000.0;
 | |
|         UiCameraBundle {
 | |
|             camera: Camera {
 | |
|                 name: Some(CAMERA_UI.to_string()),
 | |
|                 ..Default::default()
 | |
|             },
 | |
|             orthographic_projection: OrthographicProjection {
 | |
|                 far,
 | |
|                 window_origin: WindowOrigin::BottomLeft,
 | |
|                 depth_calculation: DepthCalculation::ZDifference,
 | |
|                 ..Default::default()
 | |
|             },
 | |
|             transform: Transform::from_xyz(0.0, 0.0, far - 0.1),
 | |
|             global_transform: Default::default(),
 | |
|             visible_entities: Default::default(),
 | |
|         }
 | |
|     }
 | |
| }
 |