Fixes the resize of tile shapes when a vertex is outside of the tilesheet. Fix #34970

(cherry picked from commit 5355169d3c)
This commit is contained in:
Dashcell 2020-09-17 20:03:52 -03:00 committed by Rémi Verschelde
parent 22efebc599
commit 42eb92d19a
No known key found for this signature in database
GPG key ID: C3336907360768E1

View file

@ -3095,6 +3095,7 @@ Vector2 TileSetEditor::snap_point(const Vector2 &point) {
anchor += tileset->tile_get_region(get_current_tile()).position; anchor += tileset->tile_get_region(get_current_tile()).position;
anchor += WORKSPACE_MARGIN; anchor += WORKSPACE_MARGIN;
Rect2 region(anchor, tile_size); Rect2 region(anchor, tile_size);
Rect2 tile_region(tileset->tile_get_region(get_current_tile()).position + WORKSPACE_MARGIN, tileset->tile_get_region(get_current_tile()).size);
if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) { if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::SINGLE_TILE) {
region.position = tileset->tile_get_region(get_current_tile()).position + WORKSPACE_MARGIN; region.position = tileset->tile_get_region(get_current_tile()).position + WORKSPACE_MARGIN;
region.size = tileset->tile_get_region(get_current_tile()).size; region.size = tileset->tile_get_region(get_current_tile()).size;
@ -3104,6 +3105,7 @@ Vector2 TileSetEditor::snap_point(const Vector2 &point) {
p.x = Math::snap_scalar_separation(snap_offset.x, snap_step.x, p.x, snap_separation.x); p.x = Math::snap_scalar_separation(snap_offset.x, snap_step.x, p.x, snap_separation.x);
p.y = Math::snap_scalar_separation(snap_offset.y, snap_step.y, p.y, snap_separation.y); p.y = Math::snap_scalar_separation(snap_offset.y, snap_step.y, p.y, snap_separation.y);
} }
if (tools[SHAPE_KEEP_INSIDE_TILE]->is_pressed()) { if (tools[SHAPE_KEEP_INSIDE_TILE]->is_pressed()) {
if (p.x < region.position.x) if (p.x < region.position.x)
p.x = region.position.x; p.x = region.position.x;
@ -3114,6 +3116,20 @@ Vector2 TileSetEditor::snap_point(const Vector2 &point) {
if (p.y > region.position.y + region.size.y) if (p.y > region.position.y + region.size.y)
p.y = region.position.y + region.size.y; p.y = region.position.y + region.size.y;
} }
if (p.x < tile_region.position.x) {
p.x = tile_region.position.x;
}
if (p.y < tile_region.position.y) {
p.y = tile_region.position.y;
}
if (p.x > (tile_region.position.x + tile_region.size.x)) {
p.x = (tile_region.position.x + tile_region.size.x);
}
if (p.y > (tile_region.position.y + tile_region.size.y)) {
p.y = (tile_region.position.y + tile_region.size.y);
}
return p; return p;
} }