You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-07 12:30:27 +00:00
Readd tilemap's shape_transform and bugfixes
This reverts commit a808f53020.
This commit is contained in:
@@ -90,9 +90,10 @@ void TileSetEditor::_import_node(Node *p_node, Ref<TileSet> p_library) {
|
||||
phys_offset += -s / 2;
|
||||
}
|
||||
|
||||
Vector<Ref<Shape2D> > collisions;
|
||||
Vector<TileSet::ShapeData> collisions;
|
||||
Ref<NavigationPolygon> nav_poly;
|
||||
Ref<OccluderPolygon2D> occluder;
|
||||
bool found_collisions = false;
|
||||
|
||||
for (int j = 0; j < mi->get_child_count(); j++) {
|
||||
|
||||
@@ -106,24 +107,38 @@ void TileSetEditor::_import_node(Node *p_node, Ref<TileSet> p_library) {
|
||||
|
||||
if (!child2->cast_to<StaticBody2D>())
|
||||
continue;
|
||||
|
||||
found_collisions = true;
|
||||
|
||||
StaticBody2D *sb = child2->cast_to<StaticBody2D>();
|
||||
|
||||
List<uint32_t> shapes;
|
||||
sb->get_shape_owners(&shapes);
|
||||
|
||||
for (List<uint32_t>::Element *E = shapes.front(); E; E = E->next()) {
|
||||
if (sb->is_shape_owner_disabled(E->get())) continue;
|
||||
|
||||
Vector2 shape_offset = sb->shape_owner_get_transform(E->get()).get_origin();
|
||||
Transform2D shape_transform = sb->shape_owner_get_transform(E->get());
|
||||
bool one_way = sb->is_shape_owner_one_way_collision_enabled(E->get());
|
||||
|
||||
shape_transform.set_origin(shape_transform.get_origin() - phys_offset);
|
||||
|
||||
for (int k = 0; k < sb->shape_owner_get_shape_count(E->get()); k++) {
|
||||
|
||||
Ref<Shape> shape = sb->shape_owner_get_shape(E->get(), k);
|
||||
p_library->tile_add_shape(id, shape, shape_offset, one_way);
|
||||
Ref<Shape2D> shape = sb->shape_owner_get_shape(E->get(), k);
|
||||
TileSet::ShapeData shape_data;
|
||||
shape_data.shape = shape;
|
||||
shape_data.shape_transform = shape_transform;
|
||||
shape_data.one_way_collision = one_way;
|
||||
collisions.push_back(shape_data);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (found_collisions) {
|
||||
p_library->tile_set_shapes(id, collisions);
|
||||
}
|
||||
|
||||
p_library->tile_set_texture_offset(id, mi->get_offset());
|
||||
p_library->tile_set_navigation_polygon(id, nav_poly);
|
||||
p_library->tile_set_light_occluder(id, occluder);
|
||||
|
||||
Reference in New Issue
Block a user