diff options
-rw-r--r-- | editor/plugins/abstract_polygon_2d_editor.cpp | 6 | ||||
-rw-r--r-- | editor/plugins/abstract_polygon_2d_editor.h | 2 | ||||
-rw-r--r-- | editor/plugins/polygon_2d_editor_plugin.cpp | 59 | ||||
-rw-r--r-- | editor/plugins/polygon_2d_editor_plugin.h | 1 |
4 files changed, 47 insertions, 21 deletions
diff --git a/editor/plugins/abstract_polygon_2d_editor.cpp b/editor/plugins/abstract_polygon_2d_editor.cpp index 41e2062ab2..8f6f244e8f 100644 --- a/editor/plugins/abstract_polygon_2d_editor.cpp +++ b/editor/plugins/abstract_polygon_2d_editor.cpp @@ -297,6 +297,12 @@ bool AbstractPolygon2DEditor::forward_gui_input(const Ref<InputEvent> &p_event) if (mb.is_valid()) { + String cant_edit = _why_cant_edit_polygon(); + if (cant_edit != String()) { + EditorNode::get_singleton()->show_warning(cant_edit); + return true; + } + Transform2D xform = canvas_item_editor->get_canvas_transform() * _get_node()->get_global_transform(); Vector2 gpoint = mb->get_position(); diff --git a/editor/plugins/abstract_polygon_2d_editor.h b/editor/plugins/abstract_polygon_2d_editor.h index 289c2785b1..f10af4ee6e 100644 --- a/editor/plugins/abstract_polygon_2d_editor.h +++ b/editor/plugins/abstract_polygon_2d_editor.h @@ -134,6 +134,8 @@ protected: virtual bool _has_resource() const; virtual void _create_resource(); + virtual String _why_cant_edit_polygon() const { return String(); } + public: bool forward_gui_input(const Ref<InputEvent> &p_event); void forward_canvas_draw_over_viewport(Control *p_overlay); diff --git a/editor/plugins/polygon_2d_editor_plugin.cpp b/editor/plugins/polygon_2d_editor_plugin.cpp index 1d7b4ffa41..28a17d0bef 100644 --- a/editor/plugins/polygon_2d_editor_plugin.cpp +++ b/editor/plugins/polygon_2d_editor_plugin.cpp @@ -52,6 +52,16 @@ Vector2 Polygon2DEditor::_get_offset(int p_idx) const { return node->get_offset(); } +String Polygon2DEditor::_why_cant_edit_polygon() const { + + if (node->get_internal_vertex_count() > 0) { + + return TTR("Polygon 2D has internal vertices, so it can no longer be edited in the viewport."); + } + + return String(); +} + int Polygon2DEditor::_get_polygon_count() const { if (node->get_internal_vertex_count() > 0) { return 0; //do not edit if internal vertices exist @@ -1028,6 +1038,9 @@ void Polygon2DEditor::_uv_draw() { Ref<Texture> internal_handle = get_icon("EditorInternalHandle", "EditorIcons"); Color poly_line_color = Color(0.9, 0.5, 0.5); + if (polygons.size() || polygon_create.size()) { + poly_line_color.a *= 0.25; + } Color polygon_line_color = Color(0.5, 0.5, 0.9); Vector<Color> polygon_fill_color; { @@ -1041,6 +1054,30 @@ void Polygon2DEditor::_uv_draw() { int uv_draw_max = uvs.size(); + uv_draw_max -= node->get_internal_vertex_count(); + if (uv_draw_max < 0) { + uv_draw_max = 0; + } + + for (int i = 0; i < uvs.size(); i++) { + + int next = uv_draw_max > 0 ? (i + 1) % uv_draw_max : 0; + + if (i < uv_draw_max && uv_drag && uv_move_current == UV_MODE_EDIT_POINT && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { + uv_edit_draw->draw_line(mtx.xform(points_prev[i]), mtx.xform(points_prev[next]), prev_color, 2 * EDSCALE); + } + + Vector2 next_point = uvs[next]; + if (uv_create && i == uvs.size() - 1) { + next_point = uv_create_to; + } + if (i < uv_draw_max /*&& polygons.size() == 0 && polygon_create.size() == 0*/) { //if using or creating polygons, do not show outline (will show polygons instead) + uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, 2 * EDSCALE); + } + + rect.expand_to(mtx.basis_xform(uvs[i])); + } + for (int i = 0; i < polygons.size(); i++) { PoolVector<int> points = polygons[i]; @@ -1063,27 +1100,8 @@ void Polygon2DEditor::_uv_draw() { } } - uv_draw_max -= node->get_internal_vertex_count(); - if (uv_draw_max < 0) { - uv_draw_max = 0; - } - for (int i = 0; i < uvs.size(); i++) { - int next = uv_draw_max > 0 ? (i + 1) % uv_draw_max : 0; - - if (i < uv_draw_max && uv_drag && uv_move_current == UV_MODE_EDIT_POINT && EDITOR_DEF("editors/poly_editor/show_previous_outline", true)) { - uv_edit_draw->draw_line(mtx.xform(points_prev[i]), mtx.xform(points_prev[next]), prev_color, 2 * EDSCALE); - } - - Vector2 next_point = uvs[next]; - if (uv_create && i == uvs.size() - 1) { - next_point = uv_create_to; - } - if (i < uv_draw_max && polygons.size() == 0 && polygon_create.size() == 0) { //if using or creating polygons, do not show outline (will show polygons instead) - uv_edit_draw->draw_line(mtx.xform(uvs[i]), mtx.xform(next_point), poly_line_color, 2 * EDSCALE); - } - if (weight_r.ptr()) { Vector2 draw_pos = mtx.xform(uvs[i]); float weight = weight_r[i]; @@ -1095,14 +1113,13 @@ void Polygon2DEditor::_uv_draw() { uv_edit_draw->draw_texture(internal_handle, mtx.xform(uvs[i]) - internal_handle->get_size() * 0.5); } } - rect.expand_to(mtx.basis_xform(uvs[i])); } if (polygon_create.size()) { for (int i = 0; i < polygon_create.size(); i++) { Vector2 from = uvs[polygon_create[i]]; Vector2 to = (i + 1) < polygon_create.size() ? uvs[polygon_create[i + 1]] : uv_create_to; - uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), poly_line_color, 2); + uv_edit_draw->draw_line(mtx.xform(from), mtx.xform(to), polygon_line_color, 2); } } diff --git a/editor/plugins/polygon_2d_editor_plugin.h b/editor/plugins/polygon_2d_editor_plugin.h index d1849dd09b..d3277e90f7 100644 --- a/editor/plugins/polygon_2d_editor_plugin.h +++ b/editor/plugins/polygon_2d_editor_plugin.h @@ -152,6 +152,7 @@ protected: virtual void _set_node(Node *p_polygon); virtual Vector2 _get_offset(int p_idx) const; + virtual String _why_cant_edit_polygon() const; virtual bool _has_uv() const { return true; }; virtual void _commit_action(); |