From de33138e87d758ef96ac8b0ca3b6d20b63cb9850 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 9 Mar 2024 10:33:18 +0100 Subject: [PATCH] Fix creating polygons in GenericTilePolygonEditor. --- .../editor/layered_tile_data_editors.cpp | 13 +++++++++---- .../editor/layered_tile_data_editors.h | 1 + 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/modules/layered_tile_map/editor/layered_tile_data_editors.cpp b/modules/layered_tile_map/editor/layered_tile_data_editors.cpp index 32ea70deb0..a10044214a 100644 --- a/modules/layered_tile_map/editor/layered_tile_data_editors.cpp +++ b/modules/layered_tile_map/editor/layered_tile_data_editors.cpp @@ -545,9 +545,7 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref p_event) if (!multiple_polygon_mode) { clear_polygons(); } - int added = add_polygon(in_creation_polygon); - - in_creation_polygon.clear(); + button_edit->set_pressed(true); undo_redo->create_action(TTR("Edit Polygons")); if (!multiple_polygon_mode) { @@ -555,10 +553,12 @@ void GenericTilePolygonEditor::_base_control_gui_input(Ref p_event) } undo_redo->add_do_method(this, "add_polygon", in_creation_polygon); undo_redo->add_do_method(base_control, "update"); - undo_redo->add_undo_method(this, "remove_polygon", added); + undo_redo->add_undo_method(this, "remove_last_polygon"); undo_redo->add_undo_method(base_control, "update"); undo_redo->commit_action(); emit_signal("polygons_changed"); + + in_creation_polygon.clear(); } else { // Create a new point. drag_type = DRAG_TYPE_CREATE_POINT; @@ -795,6 +795,10 @@ void GenericTilePolygonEditor::remove_polygon(int p_index) { base_control->update(); } +void GenericTilePolygonEditor::remove_last_polygon() { + remove_polygon(polygons.size() - 1); +} + void GenericTilePolygonEditor::clear_polygons() { polygons.clear(); base_control->update(); @@ -854,6 +858,7 @@ void GenericTilePolygonEditor::_bind_methods() { ClassDB::bind_method(D_METHOD("get_polygon_count"), &GenericTilePolygonEditor::get_polygon_count); ClassDB::bind_method(D_METHOD("add_polygon", "polygon", "index"), &GenericTilePolygonEditor::add_polygon, DEFVAL(-1)); ClassDB::bind_method(D_METHOD("remove_polygon", "index"), &GenericTilePolygonEditor::remove_polygon); + ClassDB::bind_method(D_METHOD("remove_last_polygon"), &GenericTilePolygonEditor::remove_last_polygon); ClassDB::bind_method(D_METHOD("clear_polygons"), &GenericTilePolygonEditor::clear_polygons); ClassDB::bind_method(D_METHOD("set_polygon", "index", "polygon"), &GenericTilePolygonEditor::set_polygon); ClassDB::bind_method(D_METHOD("get_polygon", "index"), &GenericTilePolygonEditor::get_polygon); diff --git a/modules/layered_tile_map/editor/layered_tile_data_editors.h b/modules/layered_tile_map/editor/layered_tile_data_editors.h index d7cc583cea..662cd88a0d 100644 --- a/modules/layered_tile_map/editor/layered_tile_data_editors.h +++ b/modules/layered_tile_map/editor/layered_tile_data_editors.h @@ -189,6 +189,7 @@ class GenericTilePolygonEditor : public VBoxContainer { int get_polygon_count(); int add_polygon(const Vector &p_polygon, int p_index = -1); void remove_polygon(int p_index); + void remove_last_polygon(); void clear_polygons(); void set_polygon(int p_polygon_index, const Vector &p_polygon); Vector get_polygon(int p_polygon_index);