diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp index 309dfef4647..acc1640ce6d 100644 --- a/scene/2d/tile_map.cpp +++ b/scene/2d/tile_map.cpp @@ -1207,6 +1207,21 @@ Array TileMap::get_used_cells() const { return a; } +Array TileMap::get_used_cells_by_id(int p_id) const { + + Array a; + a.clear(); + for (Map::Element *E = tile_map.front(); E; E = E->next()) { + + if (E->value().id == p_id) { + Vector2 p(E->key().x, E->key().y); + a.push_back(p); + } + } + + return a; +} + Rect2 TileMap::get_used_rect() { // Not const because of cache if (used_size_cache_dirty) { @@ -1325,6 +1340,7 @@ void TileMap::_bind_methods() { ObjectTypeDB::bind_method(_MD("clear"), &TileMap::clear); ObjectTypeDB::bind_method(_MD("get_used_cells"), &TileMap::get_used_cells); + ObjectTypeDB::bind_method(_MD("get_used_cells_by_id", "id"), &TileMap::get_used_cells_by_id); ObjectTypeDB::bind_method(_MD("get_used_rect"), &TileMap::get_used_rect); ObjectTypeDB::bind_method(_MD("map_to_world", "mappos", "ignore_half_ofs"), &TileMap::map_to_world, DEFVAL(false)); diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h index 52823a29416..36090582588 100644 --- a/scene/2d/tile_map.h +++ b/scene/2d/tile_map.h @@ -270,6 +270,7 @@ public: bool is_y_sort_mode_enabled() const; Array get_used_cells() const; + Array get_used_cells_by_id(int p_id) const; Rect2 get_used_rect(); // Not const because of cache void set_occluder_light_mask(int p_mask);