-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
> Replaces #5213 # Objective Implement sprite tiling and [9 slice scaling](https://en.wikipedia.org/wiki/9-slice_scaling) for `bevy_sprite`. Allowing slice scaling and texture tiling. Basic scaling vs 9 slice scaling: ![Traditional_scaling_vs_9-slice_scaling](https://user-images.githubusercontent.com/26703856/177335801-27f6fa27-c569-4ce6-b0e6-4f54e8f4e80a.svg) Slicing example: <img width="481" alt="Screenshot 2022-07-05 at 15 05 49" src="https://user-images.githubusercontent.com/26703856/177336112-9e961af0-c0af-4197-aec9-430c1170a79d.png"> Tiling example: <img width="1329" alt="Screenshot 2023-11-16 at 13 53 32" src="https://github.com/bevyengine/bevy/assets/26703856/14db39b7-d9e0-4bc3-ba0e-b1f2db39ae8f"> # Solution - `SpriteBundlue` now has a `scale_mode` component storing a `SpriteScaleMode` enum with three variants: - `Stretched` (default) - `Tiled` to have sprites tile horizontally and/or vertically - `Sliced` allowing 9 slicing the texture and optionally tile some sections with a `Textureslicer`. - `bevy_sprite` has two extra systems to compute a `ComputedTextureSlices` if necessary,: - One system react to changes on `Sprite`, `Handle<Image>` or `SpriteScaleMode` - The other listens to `AssetEvent<Image>` to compute slices on sprites when the texture is ready or changed - I updated the `bevy_sprite` extraction stage to extract potentially multiple textures instead of one, depending on the presence of `ComputedTextureSlices` - I added two examples showcasing the slicing and tiling feature. The addition of `ComputedTextureSlices` as a cache is to avoid querying the image data, to retrieve its dimensions, every frame in a extract or prepare stage. Also it reacts to changes so we can have stuff like this (tiling example): https://github.com/bevyengine/bevy/assets/26703856/a349a9f3-33c3-471f-8ef4-a0e5dfce3b01 # Related - [ ] Once #5103 or #10099 is merged I can enable tiling and slicing for texture sheets as ui # To discuss There is an other option, to consider slice/tiling as part of the asset, using the new asset preprocessing but I have no clue on how to do it. Also, instead of retrieving the Image dimensions, we could use the same system as the sprite sheet and have the user give the image dimensions directly (grid). But I think it's less user friendly --------- Co-authored-by: Alice Cecile <alice.i.cecile@gmail.com> Co-authored-by: ickshonpe <david.curthoys@googlemail.com> Co-authored-by: Alice Cecile <alice.i.cecil@gmail.com>
- Loading branch information
1 parent
a7b99f0
commit 01139b3
Showing
14 changed files
with
847 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
use bevy_reflect::Reflect; | ||
|
||
/// Struct defining a [`Sprite`](crate::Sprite) border with padding values | ||
#[derive(Default, Copy, Clone, PartialEq, Debug, Reflect)] | ||
pub struct BorderRect { | ||
/// Pixel padding to the left | ||
pub left: f32, | ||
/// Pixel padding to the right | ||
pub right: f32, | ||
/// Pixel padding to the top | ||
pub top: f32, | ||
/// Pixel padding to the bottom | ||
pub bottom: f32, | ||
} | ||
|
||
impl BorderRect { | ||
/// Creates a new border as a square, with identical pixel padding values on every direction | ||
#[must_use] | ||
#[inline] | ||
pub const fn square(value: f32) -> Self { | ||
Self { | ||
left: value, | ||
right: value, | ||
top: value, | ||
bottom: value, | ||
} | ||
} | ||
|
||
/// Creates a new border as a rectangle, with: | ||
/// - `horizontal` for left and right pixel padding | ||
/// - `vertical` for top and bottom pixel padding | ||
#[must_use] | ||
#[inline] | ||
pub const fn rectangle(horizontal: f32, vertical: f32) -> Self { | ||
Self { | ||
left: horizontal, | ||
right: horizontal, | ||
top: vertical, | ||
bottom: vertical, | ||
} | ||
} | ||
} | ||
|
||
impl From<f32> for BorderRect { | ||
fn from(v: f32) -> Self { | ||
Self::square(v) | ||
} | ||
} | ||
|
||
impl From<[f32; 4]> for BorderRect { | ||
fn from([left, right, top, bottom]: [f32; 4]) -> Self { | ||
Self { | ||
left, | ||
right, | ||
top, | ||
bottom, | ||
} | ||
} | ||
} |
Oops, something went wrong.