TileMap: Add update_bitmask_region(2), expose update_bitmask_area(1) and update_bitmask_region(2) to GDscript

This commit is contained in:
Andrew Thomas 2017-12-05 18:14:33 -06:00
parent 5938466c84
commit d8c4324cfb
2 changed files with 24 additions and 0 deletions

View file

@ -759,6 +759,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);
@ -1531,6 +1551,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

@ -251,6 +251,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();