Parcourir la source

Fix transposed tiles drawing in GenericTilePolygonEditor

kleonc il y a 1 an
Parent
commit
3dfac1644d
1 fichiers modifiés avec 9 ajouts et 9 suppressions
  1. 9 9
      editor/plugins/tiles/tile_data_editors.cpp

+ 9 - 9
editor/plugins/tiles/tile_data_editors.cpp

@@ -165,10 +165,14 @@ void GenericTilePolygonEditor::_base_control_draw() {
 	base_control->draw_set_transform_matrix(xform);
 	base_control->draw_set_transform_matrix(xform);
 
 
 	// Draw fill rect under texture region.
 	// Draw fill rect under texture region.
-	Rect2 texture_rect(-background_region.size / 2, background_region.size);
+	Rect2 texture_rect(Vector2(), background_region.size);
 	if (tile_data) {
 	if (tile_data) {
 		texture_rect.position -= tile_data->get_texture_origin();
 		texture_rect.position -= tile_data->get_texture_origin();
+		if (tile_data->get_transpose()) {
+			texture_rect.size = Size2(texture_rect.size.y, texture_rect.size.x);
+		}
 	}
 	}
+	texture_rect.position -= texture_rect.size / 2; // Half-size offset must be applied after transposing.
 	base_control->draw_rect(texture_rect, Color(1, 1, 1, 0.3));
 	base_control->draw_rect(texture_rect, Color(1, 1, 1, 0.3));
 
 
 	// Draw the background.
 	// Draw the background.
@@ -180,18 +184,14 @@ void GenericTilePolygonEditor::_base_control_draw() {
 		if (tile_data->get_flip_v()) {
 		if (tile_data->get_flip_v()) {
 			region_size.y = -region_size.y;
 			region_size.y = -region_size.y;
 		}
 		}
-		base_control->draw_texture_rect_region(background_atlas_source->get_texture(), Rect2(-background_region.size / 2 - tile_data->get_texture_origin(), region_size), background_region, tile_data->get_modulate(), tile_data->get_transpose());
+		// Destination rect position must account for transposing, size must not.
+		base_control->draw_texture_rect_region(background_atlas_source->get_texture(), Rect2(texture_rect.position, region_size), background_region, tile_data->get_modulate(), tile_data->get_transpose());
 	}
 	}
 
 
 	// Compute and draw the grid area.
 	// Compute and draw the grid area.
 	Rect2 grid_area = Rect2(-base_tile_size / 2, base_tile_size);
 	Rect2 grid_area = Rect2(-base_tile_size / 2, base_tile_size);
-	if (tile_data) {
-		grid_area.expand_to(-background_region.get_size() / 2 - tile_data->get_texture_origin());
-		grid_area.expand_to(background_region.get_size() / 2 - tile_data->get_texture_origin());
-	} else {
-		grid_area.expand_to(-background_region.get_size() / 2);
-		grid_area.expand_to(background_region.get_size() / 2);
-	}
+	grid_area.expand_to(texture_rect.position);
+	grid_area.expand_to(texture_rect.get_end());
 	base_control->draw_rect(grid_area, Color(1, 1, 1, 0.3), false);
 	base_control->draw_rect(grid_area, Color(1, 1, 1, 0.3), false);
 
 
 	// Draw grid.
 	// Draw grid.