diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2017-06-26 22:47:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-26 22:47:26 +0200 |
commit | f2bc0cc96663bbdde872c2a4d9a29f2218ff7d22 (patch) | |
tree | 0a5208df19f37c66d63853bcf02579f5efd2a877 /scene/2d/tile_map.cpp | |
parent | f7b77e5b76639dbc2e7a770cc57b64fc02a1e075 (diff) | |
parent | 207feb2f879058eb972b73e0220c34422e467b27 (diff) | |
download | redot-engine-f2bc0cc96663bbdde872c2a4d9a29f2218ff7d22.tar.gz |
Merge pull request #9370 from bojidar-bg/c-9318-oneway-tilemaps
Add one-way collisions and individual shape offsets for tilesets
Diffstat (limited to 'scene/2d/tile_map.cpp')
-rw-r--r-- | scene/2d/tile_map.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 098bdf93de..57e25ec609 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -452,25 +452,25 @@ void TileMap::_update_dirty_quadrants() { tex->draw_rect_region(canvas_item, rect, r, modulate, c.transpose, normal_map); } - Vector<Ref<Shape2D> > shapes = tile_set->tile_get_shapes(c.id); + Vector<TileSet::ShapeData> shapes = tile_set->tile_get_shapes(c.id); for (int i = 0; i < shapes.size(); i++) { - Ref<Shape2D> shape = shapes[i]; + Ref<Shape2D> shape = shapes[i].shape; if (shape.is_valid()) { - - Vector2 shape_ofs = tile_set->tile_get_shape_offset(c.id); Transform2D xform; xform.set_origin(offset.floor()); - _fix_cell_transform(xform, c, shape_ofs + center_ofs, s); + _fix_cell_transform(xform, c, shapes[i].shape_offset + center_ofs, s); if (debug_canvas_item.is_valid()) { vs->canvas_item_add_set_transform(debug_canvas_item, xform); shape->draw(debug_canvas_item, debug_collision_color); } ps->body_add_shape(q.body, shape->get_rid(), xform); - ps->body_set_shape_metadata(q.body, shape_idx++, Vector2(E->key().x, E->key().y)); + shape_idx++; + ps->body_set_shape_as_one_way_collision(q.body, shape_idx, shapes[i].one_way_collision); + ps->body_set_shape_metadata(q.body, shape_idx, Vector2(E->key().x, E->key().y)); } } |