Crate bevy_rectray

Source
Expand description

A minimal 2d layout system (that works in 3d!) for bevy.

§Getting Started

First add RectrayPlugin.

app.add_plugins(RectrayPlugin)

Then add RectrayFrame to a parent entity. This effectively creates a 2d rectangular space around the local x and y axis of the entity’s Transform.

commands.spawn(
    SpacialBundle {
        ...
    },
    RectrayFrame::from_dimension(Vec2::new(1024., 768.)),
)

To place descendant entities inside the frame, add Transform2D and Dimension next to entities with Transforms.

commands.spawn (
    Transform { .. },
    Transform2D { .. },
    Dimension { .. },
)

Since we only operate on Transform, bevy_rectray works in Transform - Transform2d - Transform sandwich situations.

§Integration

bevy_rectray is minimal and does not magically react to changes in bevy components. We take in Transform2D and Dimension and produces Transform and RotatedRect.

Some of those data can come from external sources. For example if you want to make all Sprites take up space of its Image or custom_size, add a system like this manually:

pub fn update_sprite_dimension(
    scaling_factor: Query<&Window, With<PrimaryWindow>>,
    mut query: Query<(&mut Sprite, &Handle<Image>, &mut Dimension)>,
    assets: Res<Assets<Image>>
) {
    let scaling_factor = scaling_factor
         .get_single()
         .map(|x| x.scale_factor())
         .unwrap_or(1.0);
    query.iter_mut().for_each(|(sp, im, mut dimension)| {
        dimension.0 = sp.custom_size.or_else(|| {
            sp.rect.map(|rect| (rect.max - rect.min) * scaling_factor)
                .or_else(|| {
                    assets.get(im)
                        .map(|x|x.size().as_vec2() * scaling_factor)
                })
        }).unwrap_or(Vec2::ZERO)
    })
}

If you want the opposite behavior, you can update the size of a sprite from the outputted RotatedRect::dimension.

§Containers

Add RectrayContainerBundle to put child items in a Layout.

See module level documentation for details.

Modules§

layout
Container and Layouts for bevy_rectray

Structs§

Anchor
Anchor of a sprite, this is a more concise implementation than bevy’s.
Dimension
Dimension of the widget, this is a suggestion and can be modified via Layout.
RectrayBundleDeprecated
Bundle for bevy_rectray’s features, must be paired with a TransformBundle.
RectrayContainerBundleDeprecated
Bundle for bevy_rectray’s features and a container, must be paired with a TransformBundle.
RectrayCursor
Set Transform2D::offset to PrimaryWindow’s cursor position.
RectrayFrame
A root node that creates an area to place child entities.
RectrayPickable
Make an item pickable in the bevy_rectray backend.
RectrayPlugin
Plugin for bevy_rectray.
RectrayTransformSet
SystemSet for bevy_rectray, runs in PostUpdate.
RectrayWindow
Synchronize the size of RectrayFrame with PrimaryWindow.
RotatedRect
A rotated 2D rectangle.
Transform2D
The 2D transform component for bevy_rectray.

Enums§

AnchorDirection
Anchor and direction for a tooltip like object.
InterpolateTransform
If set, changes in local Transform will be interpolated.
OutOfFrameBehavior
Determines how an object reacts if out of frame.
SyncDimension
Synchronize Dimension from or to another component like Sprite.

Functions§

compute_transform_2d
The main computation step.