
> Follow up to #11600 and #10588 @mockersf expressed some [valid concerns](https://github.com/bevyengine/bevy/pull/11600#issuecomment-1932796498) about the current system this PR attempts to fix: The `ComputedTextureSlices` reacts to asset change in both `bevy_sprite` and `bevy_ui`, meaning that if the `ImageScaleMode` is inserted by default in the bundles, we will iterate through most 2d items every time an asset is updated. # Solution - `ImageScaleMode` only has two variants: `Sliced` and `Tiled`. I removed the `Stretched` default - `ImageScaleMode` is no longer part of any bundle, but the relevant bundles explain that this additional component can be inserted This way, the *absence* of `ImageScaleMode` means the image will be stretched, and its *presence* will include the entity to the various slicing systems Optional components in bundles would make this more straigthfoward # Additional work Should I add new bundles with the `ImageScaleMode` component ?
63 lines
2.9 KiB
Rust
63 lines
2.9 KiB
Rust
use crate::{Sprite, TextureAtlas};
|
|
use bevy_asset::Handle;
|
|
use bevy_ecs::bundle::Bundle;
|
|
use bevy_render::{
|
|
texture::Image,
|
|
view::{InheritedVisibility, ViewVisibility, Visibility},
|
|
};
|
|
use bevy_transform::components::{GlobalTransform, Transform};
|
|
|
|
/// A [`Bundle`] of components for drawing a single sprite from an image.
|
|
///
|
|
/// # Extra behaviours
|
|
///
|
|
/// You may add the following components to enable additional behaviours
|
|
/// - [`ImageScaleMode`](crate::ImageScaleMode) to enable either slicing or tiling of the texture
|
|
/// - [`TextureAtlas`] to draw specific sections of a sprite sheet, (See [`SpriteSheetBundle`])
|
|
#[derive(Bundle, Clone, Default)]
|
|
pub struct SpriteBundle {
|
|
/// Specifies the rendering properties of the sprite, such as color tint and flip.
|
|
pub sprite: Sprite,
|
|
/// The local transform of the sprite, relative to its parent.
|
|
pub transform: Transform,
|
|
/// The absolute transform of the sprite. This should generally not be written to directly.
|
|
pub global_transform: GlobalTransform,
|
|
/// A reference-counted handle to the image asset to be drawn.
|
|
pub texture: Handle<Image>,
|
|
/// User indication of whether an entity is visible
|
|
pub visibility: Visibility,
|
|
/// Inherited visibility of an entity.
|
|
pub inherited_visibility: InheritedVisibility,
|
|
/// Algorithmically-computed indication of whether an entity is visible and should be extracted for rendering
|
|
pub view_visibility: ViewVisibility,
|
|
}
|
|
|
|
/// A [`Bundle`] of components for drawing a single sprite from a sprite sheet (also referred
|
|
/// to as a `TextureAtlas`) or for animated sprites.
|
|
///
|
|
/// Note:
|
|
/// This bundle is identical to [`SpriteBundle`] with an additional [`TextureAtlas`] component.
|
|
///
|
|
/// Check the following examples for usage:
|
|
/// - [`animated sprite sheet example`](https://github.com/bevyengine/bevy/blob/latest/examples/2d/sprite_sheet.rs)
|
|
/// - [`texture atlas example`](https://github.com/bevyengine/bevy/blob/latest/examples/2d/texture_atlas.rs)
|
|
#[derive(Bundle, Clone, Default)]
|
|
pub struct SpriteSheetBundle {
|
|
/// Specifies the rendering properties of the sprite, such as color tint and flip.
|
|
pub sprite: Sprite,
|
|
/// The local transform of the sprite, relative to its parent.
|
|
pub transform: Transform,
|
|
/// The absolute transform of the sprite. This should generally not be written to directly.
|
|
pub global_transform: GlobalTransform,
|
|
/// The sprite sheet base texture
|
|
pub texture: Handle<Image>,
|
|
/// The sprite sheet texture atlas, allowing to draw a custom section of `texture`.
|
|
pub atlas: TextureAtlas,
|
|
/// User indication of whether an entity is visible
|
|
pub visibility: Visibility,
|
|
/// Inherited visibility of an entity.
|
|
pub inherited_visibility: InheritedVisibility,
|
|
/// Algorithmically-computed indication of whether an entity is visible and should be extracted for rendering
|
|
pub view_visibility: ViewVisibility,
|
|
}
|