Merge pull request #13991 from CyanBlob/master

TileMap: Add update_bitmask_region(2), expose update_bitmask_area(1) …
This commit is contained in:
Rémi Verschelde 2017-12-16 16:38:59 +01:00 committed by GitHub
commit caf3a405ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 0 deletions

View file

@ -739,6 +739,26 @@ void TileMap::update_bitmask_area(const Vector2 &p_pos) {
}
}
void TileMap::update_bitmask_region(const Vector2 &p_start, const Vector2 &p_end) {
if ((p_end.x < p_start.x || p_end.y < p_start.y) || (p_end.x == p_start.x && p_end.y == p_start.y)) {
int i;
Array a = get_used_cells();
for (i = 0; i < a.size(); i++) {
// update_bitmask_area() in order to update cells adjacent to the
// current cell, since ordering in array may not be reliable
Vector2 vector = (Vector2)a[i];
update_bitmask_area(Vector2(vector.x, vector.y));
}
return;
}
for (int x = p_start.x - 1; x <= p_end.x + 1; x++) {
for (int y = p_start.y - 1; y <= p_end.y + 1; y++) {
update_cell_bitmask(x, y);
}
}
}
void TileMap::update_cell_bitmask(int p_x, int p_y) {
PosKey p(p_x, p_y);
@ -1507,6 +1527,9 @@ void TileMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("_recreate_quadrants"), &TileMap::_recreate_quadrants);
ClassDB::bind_method(D_METHOD("_update_dirty_quadrants"), &TileMap::_update_dirty_quadrants);
ClassDB::bind_method(D_METHOD("update_bitmask_area"), &TileMap::update_bitmask_area);
ClassDB::bind_method(D_METHOD("update_bitmask_region", "start", "end"), &TileMap::update_bitmask_region, DEFVAL(Vector2()), DEFVAL(Vector2()));
ClassDB::bind_method(D_METHOD("_set_tile_data"), &TileMap::_set_tile_data);
ClassDB::bind_method(D_METHOD("_get_tile_data"), &TileMap::_get_tile_data);

View file

@ -245,6 +245,7 @@ public:
void make_bitmask_area_dirty(const Vector2 &p_pos);
void update_bitmask_area(const Vector2 &p_pos);
void update_bitmask_region(const Vector2 &p_start = Vector2(), const Vector2 &p_end = Vector2());
void update_cell_bitmask(int p_x, int p_y);
void update_dirty_bitmask();