diff options
author | Juan Linietsky <reduzio@gmail.com> | 2018-05-07 20:38:12 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-07 20:38:12 -0300 |
commit | 9b1fdad035f226bb7eba3e592083fc40a9e1ab27 (patch) | |
tree | 436eb6a33a94c7d60452b6fc587be0bc6d6081c3 | |
parent | 299d8a80bac303279d93de2ec0a7d8f763e9d9cf (diff) | |
parent | 9db767d07631723779f1831f892f0f3e40ed8998 (diff) |
Merge pull request #16122 from ibrahn/sprite-region-with-frames
Allow use of frames in sprites with texture region enabled.
-rw-r--r-- | scene/2d/sprite.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/scene/2d/sprite.cpp b/scene/2d/sprite.cpp index bc39368c88..64d0771fab 100644 --- a/scene/2d/sprite.cpp +++ b/scene/2d/sprite.cpp @@ -68,31 +68,31 @@ bool Sprite::_edit_use_rect() const { void Sprite::_get_rects(Rect2 &r_src_rect, Rect2 &r_dst_rect, bool &r_filter_clip) const { - Size2 s; - r_filter_clip = false; + Rect2 base_rect; if (region) { - - s = region_rect.size; - r_src_rect = region_rect; r_filter_clip = region_filter_clip; + base_rect = region_rect; } else { - s = Size2(texture->get_size()); - s = s / Size2(hframes, vframes); - - r_src_rect.size = s; - r_src_rect.position.x = float(frame % hframes) * s.x; - r_src_rect.position.y = float(frame / hframes) * s.y; + r_filter_clip = false; + base_rect = Rect2(0, 0, texture->get_width(), texture->get_height()); } - Point2 ofs = offset; + Size2 frame_size = base_rect.size / Size2(hframes, vframes); + Point2 frame_offset = Point2(frame % hframes, frame / hframes); + frame_offset *= frame_size; + + r_src_rect.size = frame_size; + r_src_rect.position = base_rect.position + frame_offset; + + Point2 dest_offset = offset; if (centered) - ofs -= s / 2; + dest_offset -= frame_size / 2; if (Engine::get_singleton()->get_use_pixel_snap()) { - ofs = ofs.floor(); + dest_offset = dest_offset.floor(); } - r_dst_rect = Rect2(ofs, s); + r_dst_rect = Rect2(dest_offset, frame_size); if (hflip) r_dst_rect.size.x = -r_dst_rect.size.x; @@ -375,13 +375,13 @@ Rect2 Sprite::get_rect() const { Size2i s; if (region) { - s = region_rect.size; } else { s = texture->get_size(); - s = s / Point2(hframes, vframes); } + s = s / Point2(hframes, vframes); + Point2 ofs = offset; if (centered) ofs -= s / 2; |