summaryrefslogtreecommitdiffstats
path: root/scene/3d/sprite_3d.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/3d/sprite_3d.cpp')
-rw-r--r--scene/3d/sprite_3d.cpp21
1 files changed, 19 insertions, 2 deletions
diff --git a/scene/3d/sprite_3d.cpp b/scene/3d/sprite_3d.cpp
index 920cf22b83..ffd328c37e 100644
--- a/scene/3d/sprite_3d.cpp
+++ b/scene/3d/sprite_3d.cpp
@@ -804,8 +804,11 @@ Vector2i Sprite3D::get_frame_coords() const {
}
void Sprite3D::set_vframes(int p_amount) {
- ERR_FAIL_COND(p_amount < 1);
+ ERR_FAIL_COND_MSG(p_amount < 1, "Amount of vframes cannot be smaller than 1.");
vframes = p_amount;
+ if (frame >= vframes * hframes) {
+ frame = 0;
+ }
_queue_redraw();
notify_property_list_changed();
}
@@ -815,8 +818,22 @@ int Sprite3D::get_vframes() const {
}
void Sprite3D::set_hframes(int p_amount) {
- ERR_FAIL_COND(p_amount < 1);
+ ERR_FAIL_COND_MSG(p_amount < 1, "Amount of hframes cannot be smaller than 1.");
+ if (vframes > 1) {
+ // Adjust the frame to fit new sheet dimensions.
+ int original_column = frame % hframes;
+ if (original_column >= p_amount) {
+ // Frame's column was dropped, reset.
+ frame = 0;
+ } else {
+ int original_row = frame / hframes;
+ frame = original_row * p_amount + original_column;
+ }
+ }
hframes = p_amount;
+ if (frame >= vframes * hframes) {
+ frame = 0;
+ }
_queue_redraw();
notify_property_list_changed();
}