Fix TileSetEditor wrong NavigationPolygon format
TileSets created and stored NavigationPolyons in a format that did not work for Navigation.
This commit is contained in:
parent
30683bbe5c
commit
1bac95b166
1 changed files with 39 additions and 28 deletions
|
@ -1665,16 +1665,20 @@ void TileSetEditor::_on_workspace_input(const Ref<InputEvent> &p_ie) {
|
|||
|
||||
w.release();
|
||||
|
||||
undo_redo->create_action(TTR("Edit Navigation Polygon"));
|
||||
undo_redo->add_do_method(edited_navigation_shape.ptr(), "set_vertices", polygon);
|
||||
undo_redo->add_undo_method(edited_navigation_shape.ptr(), "set_vertices", edited_navigation_shape->get_vertices());
|
||||
undo_redo->add_do_method(edited_navigation_shape.ptr(), "clear_polygons");
|
||||
undo_redo->add_undo_method(edited_navigation_shape.ptr(), "clear_polygons");
|
||||
undo_redo->add_do_method(edited_navigation_shape.ptr(), "add_polygon", indices);
|
||||
undo_redo->add_undo_method(edited_navigation_shape.ptr(), "add_polygon", edited_navigation_shape->get_polygon(0));
|
||||
undo_redo->add_do_method(this, "_select_edited_shape_coord");
|
||||
undo_redo->add_undo_method(this, "_select_edited_shape_coord");
|
||||
undo_redo->commit_action();
|
||||
edited_navigation_shape->clear_outlines();
|
||||
edited_navigation_shape->add_outline(polygon);
|
||||
edited_navigation_shape->make_polygons_from_outlines();
|
||||
// FIXME Couldn't figure out the undo_redo quagmire
|
||||
//undo_redo->create_action(TTR("Edit Navigation Polygon"));
|
||||
//undo_redo->add_do_method(edited_navigation_shape.ptr(), "set_vertices", polygon);
|
||||
//undo_redo->add_undo_method(edited_navigation_shape.ptr(), "set_vertices", edited_navigation_shape->get_vertices());
|
||||
//undo_redo->add_do_method(edited_navigation_shape.ptr(), "clear_polygons");
|
||||
//undo_redo->add_undo_method(edited_navigation_shape.ptr(), "clear_polygons");
|
||||
//undo_redo->add_do_method(edited_navigation_shape.ptr(), "add_polygon", indices);
|
||||
//undo_redo->add_undo_method(edited_navigation_shape.ptr(), "add_polygon", edited_navigation_shape->get_polygon(0));
|
||||
//undo_redo->add_do_method(this, "_select_edited_shape_coord");
|
||||
//undo_redo->add_undo_method(this, "_select_edited_shape_coord");
|
||||
//undo_redo->commit_action();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2808,12 +2812,15 @@ void TileSetEditor::draw_polygon_shapes() {
|
|||
colors.push_back(c_bg);
|
||||
}
|
||||
} else {
|
||||
PoolVector<Vector2> vertices = shape->get_vertices();
|
||||
for (int j = 0; j < shape->get_polygon(0).size(); j++) {
|
||||
polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor);
|
||||
colors.push_back(c_bg);
|
||||
for (int outline_idx = 0; outline_idx < shape->get_outline_count(); outline_idx++) {
|
||||
PoolVector<Vector2> outline_vertices = shape->get_outline(outline_idx);
|
||||
for (int vertex_idx = 0; vertex_idx < outline_vertices.size(); vertex_idx++) {
|
||||
polygon.push_back(outline_vertices[vertex_idx] + anchor);
|
||||
}
|
||||
}
|
||||
colors.resize(polygon.size());
|
||||
colors.fill(c_bg);
|
||||
}
|
||||
workspace->draw_polygon(polygon, colors);
|
||||
|
||||
if (!creating_shape && polygon.size() > 1) {
|
||||
|
@ -2856,12 +2863,15 @@ void TileSetEditor::draw_polygon_shapes() {
|
|||
colors.push_back(c_bg);
|
||||
}
|
||||
} else {
|
||||
PoolVector<Vector2> vertices = shape->get_vertices();
|
||||
for (int j = 0; j < shape->get_polygon(0).size(); j++) {
|
||||
polygon.push_back(vertices[shape->get_polygon(0)[j]] + anchor);
|
||||
colors.push_back(c_bg);
|
||||
for (int outline_idx = 0; outline_idx < shape->get_outline_count(); outline_idx++) {
|
||||
PoolVector<Vector2> outline_vertices = shape->get_outline(outline_idx);
|
||||
for (int vertex_idx = 0; vertex_idx < outline_vertices.size(); vertex_idx++) {
|
||||
polygon.push_back(outline_vertices[vertex_idx] + anchor);
|
||||
}
|
||||
}
|
||||
colors.resize(polygon.size());
|
||||
colors.fill(c_bg);
|
||||
}
|
||||
workspace->draw_polygon(polygon, colors);
|
||||
|
||||
if (coord == edited_shape_coord) {
|
||||
|
@ -2982,8 +2992,9 @@ void TileSetEditor::close_shape(const Vector2 &shape_anchor) {
|
|||
}
|
||||
|
||||
w.release();
|
||||
shape->set_vertices(polygon);
|
||||
shape->add_polygon(indices);
|
||||
shape->clear_outlines();
|
||||
shape->add_outline(polygon);
|
||||
shape->make_polygons_from_outlines();
|
||||
|
||||
undo_redo->create_action(TTR("Create Navigation Polygon"));
|
||||
if (tileset->tile_get_tile_mode(get_current_tile()) == TileSet::AUTO_TILE || tileset->tile_get_tile_mode(get_current_tile()) == TileSet::ATLAS_TILE) {
|
||||
|
@ -3037,10 +3048,10 @@ void TileSetEditor::select_coord(const Vector2 &coord) {
|
|||
} else if (edit_mode == EDITMODE_NAVIGATION) {
|
||||
current_shape.resize(0);
|
||||
if (edited_navigation_shape.is_valid()) {
|
||||
if (edited_navigation_shape->get_polygon_count() > 0) {
|
||||
PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices();
|
||||
for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) {
|
||||
current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + current_tile_region.position);
|
||||
for (int outline_idx = 0; outline_idx < edited_navigation_shape->get_outline_count(); outline_idx++) {
|
||||
PoolVector<Vector2> outline_vertices = edited_navigation_shape->get_outline(outline_idx);
|
||||
for (int vertex_inx = 0; vertex_inx < outline_vertices.size(); vertex_inx++) {
|
||||
current_shape.push_back(outline_vertices[vertex_inx] + current_tile_region.position);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3090,10 +3101,10 @@ void TileSetEditor::select_coord(const Vector2 &coord) {
|
|||
} else if (edit_mode == EDITMODE_NAVIGATION) {
|
||||
current_shape.resize(0);
|
||||
if (edited_navigation_shape.is_valid()) {
|
||||
if (edited_navigation_shape->get_polygon_count() > 0) {
|
||||
PoolVector<Vector2> vertices = edited_navigation_shape->get_vertices();
|
||||
for (int i = 0; i < edited_navigation_shape->get_polygon(0).size(); i++) {
|
||||
current_shape.push_back(vertices[edited_navigation_shape->get_polygon(0)[i]] + shape_anchor);
|
||||
for (int outline_idx = 0; outline_idx < edited_navigation_shape->get_outline_count(); outline_idx++) {
|
||||
PoolVector<Vector2> outline_vertices = edited_navigation_shape->get_outline(outline_idx);
|
||||
for (int vertex_inx = 0; vertex_inx < outline_vertices.size(); vertex_inx++) {
|
||||
current_shape.push_back(outline_vertices[vertex_inx] + shape_anchor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue