浏览代码

Merge pull request #9975 from Hassan-A/2.1

added get_used_cells_by_id method
Rémi Verschelde 8 年之前
父节点
当前提交
04ff3e4238
共有 2 个文件被更改,包括 17 次插入0 次删除
  1. 16 0
      scene/2d/tile_map.cpp
  2. 1 0
      scene/2d/tile_map.h

+ 16 - 0
scene/2d/tile_map.cpp

@@ -1207,6 +1207,21 @@ Array TileMap::get_used_cells() const {
 	return a;
 	return a;
 }
 }
 
 
+Array TileMap::get_used_cells_by_id(int p_id) const {
+
+	Array a;
+	a.clear();
+	for (Map<PosKey, Cell>::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
 Rect2 TileMap::get_used_rect() { // Not const because of cache
 
 
 	if (used_size_cache_dirty) {
 	if (used_size_cache_dirty) {
@@ -1325,6 +1340,7 @@ void TileMap::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("clear"), &TileMap::clear);
 	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"), &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("get_used_rect"), &TileMap::get_used_rect);
 
 
 	ObjectTypeDB::bind_method(_MD("map_to_world", "mappos", "ignore_half_ofs"), &TileMap::map_to_world, DEFVAL(false));
 	ObjectTypeDB::bind_method(_MD("map_to_world", "mappos", "ignore_half_ofs"), &TileMap::map_to_world, DEFVAL(false));

+ 1 - 0
scene/2d/tile_map.h

@@ -270,6 +270,7 @@ public:
 	bool is_y_sort_mode_enabled() const;
 	bool is_y_sort_mode_enabled() const;
 
 
 	Array get_used_cells() 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
 	Rect2 get_used_rect(); // Not const because of cache
 
 
 	void set_occluder_light_mask(int p_mask);
 	void set_occluder_light_mask(int p_mask);