Improve 2d snapping

Partially revert change allowing sprite get_rect snapping to be controlled by `pixel_snap` again rather than `transform_snap` (to prevent breaking compatibility). Adds a final `use_camera_snap` project setting to allow snapping viewports as in reduz original PR.
This commit is contained in:
lawnjelly
2020-12-25 18:53:00 +00:00
parent 626ca08108
commit a237c671bb
4 changed files with 19 additions and 4 deletions

View File

@@ -40,12 +40,24 @@ static Transform2D _canvas_get_transform(VisualServerViewport::Viewport *p_viewp
Transform2D xf = p_viewport->global_transform;
float scale = 1.0;
bool snap = Engine::get_singleton()->get_snap_2d_viewports();
if (p_viewport->canvas_map.has(p_canvas->parent)) {
xf = xf * p_viewport->canvas_map[p_canvas->parent].transform;
Transform2D c_xform = p_viewport->canvas_map[p_canvas->parent].transform;
if (snap) {
c_xform.elements[2] = c_xform.elements[2].floor();
}
xf = xf * c_xform;
scale = p_canvas->parent_scale;
}
xf = xf * p_canvas_data->transform;
Transform2D c_xform = p_canvas_data->transform;
if (snap) {
c_xform.elements[2] = c_xform.elements[2].floor();
}
xf = xf * c_xform;
if (scale != 1.0 && !VSG::canvas->disable_scale) {
Vector2 pivot = p_vp_size * 0.5;