Merge pull request #76152 from timothyqiu/tile-resize-clamp

Fix tile resizing towards atlas boundary
This commit is contained in:
Yuri Sizov 2023-06-21 11:19:24 +02:00 committed by GitHub
commit 4fc045e9b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 10 deletions

View File

@ -497,19 +497,16 @@ Vector2i TileAtlasView::get_atlas_tile_coords_at_pos(const Vector2 p_pos, bool p
Vector2i separation = tile_set_atlas_source->get_separation();
Vector2i texture_region_size = tile_set_atlas_source->get_texture_region_size();
// Compute index in atlas
// Compute index in atlas.
Vector2 pos = p_pos - margins;
Vector2i ret = (pos / (texture_region_size + separation)).floor();
// Return invalid value (without clamp).
Rect2i rect = Rect2(Vector2i(), tile_set_atlas_source->get_atlas_grid_size());
if (!p_clamp && !rect.has_point(ret)) {
return TileSetSource::INVALID_ATLAS_COORDS;
}
// Clamp.
ret.x = CLAMP(ret.x, 0, rect.size.x - 1);
ret.y = CLAMP(ret.y, 0, rect.size.y - 1);
if (p_clamp) {
Vector2i size = tile_set_atlas_source->get_atlas_grid_size();
ret.x = CLAMP(ret.x, 0, size.x - 1);
ret.y = CLAMP(ret.y, 0, size.y - 1);
}
return ret;
}

View File

@ -1031,7 +1031,7 @@ void TileSetAtlasSourceEditor::_tile_atlas_control_gui_input(const Ref<InputEven
if (mm.is_valid()) {
Vector2i start_base_tiles_coords = tile_atlas_view->get_atlas_tile_coords_at_pos(drag_start_mouse_pos, true);
Vector2i last_base_tiles_coords = tile_atlas_view->get_atlas_tile_coords_at_pos(drag_last_mouse_pos, true);
Vector2i new_base_tiles_coords = tile_atlas_view->get_atlas_tile_coords_at_pos(tile_atlas_control->get_local_mouse_position(), true);
Vector2i new_base_tiles_coords = tile_atlas_view->get_atlas_tile_coords_at_pos(tile_atlas_control->get_local_mouse_position());
Vector2i grid_size = tile_set_atlas_source->get_atlas_grid_size();