From a5fa32e1e7d4dc5990c9d9e8cddd29efb7753215 Mon Sep 17 00:00:00 2001 From: Vitaliy Sapronenko Date: Tue, 16 Apr 2024 04:36:47 +0300 Subject: [PATCH] Normalization anchor for sprite slice in dimensions of this slice (#12769) # Objective Fixes #12408 . Fixes #12680. ## Solution - Recaclulated anchor from dimensions of sprite to dimension of each part of it (each part contains its own anchor) --- .../src/texture_slice/computed_slices.rs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/crates/bevy_sprite/src/texture_slice/computed_slices.rs b/crates/bevy_sprite/src/texture_slice/computed_slices.rs index 1f08e9a817..c15fd264de 100644 --- a/crates/bevy_sprite/src/texture_slice/computed_slices.rs +++ b/crates/bevy_sprite/src/texture_slice/computed_slices.rs @@ -53,10 +53,21 @@ impl ComputedTextureSlices { flip_x, flip_y, image_handle_id: handle.id(), - anchor: sprite.anchor.as_vec(), + anchor: Self::redepend_anchor_from_sprite_to_slice(sprite, slice), } }) } + + fn redepend_anchor_from_sprite_to_slice(sprite: &Sprite, slice: &TextureSlice) -> Vec2 { + let sprite_size = sprite + .custom_size + .unwrap_or(sprite.rect.unwrap_or_default().size()); + if sprite_size == Vec2::ZERO { + sprite.anchor.as_vec() + } else { + sprite.anchor.as_vec() * sprite_size / slice.draw_size + } + } } /// Generates sprite slices for a `sprite` given a `scale_mode`. The slices