Add Rect2 TileMap::get_used_rect(), closes #4390
(cherry picked from commit 136e1e18ba
)
This commit is contained in:
parent
7bf7fe854f
commit
ecb4d41d20
@ -737,6 +737,7 @@ void TileMap::set_cell(int p_x,int p_y,int p_tile,bool p_flip_x,bool p_flip_y,bo
|
|||||||
c.transpose=p_transpose;
|
c.transpose=p_transpose;
|
||||||
|
|
||||||
_make_quadrant_dirty(Q);
|
_make_quadrant_dirty(Q);
|
||||||
|
used_size_cache_dirty=true;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -825,6 +826,7 @@ void TileMap::clear() {
|
|||||||
|
|
||||||
_clear_quadrants();
|
_clear_quadrants();
|
||||||
tile_map.clear();
|
tile_map.clear();
|
||||||
|
used_size_cache_dirty=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TileMap::_set_tile_data(const DVector<int>& p_data) {
|
void TileMap::_set_tile_data(const DVector<int>& p_data) {
|
||||||
@ -1164,6 +1166,28 @@ Array TileMap::get_used_cells() const {
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Rect2 TileMap::get_used_rect() { // Not const because of cache
|
||||||
|
|
||||||
|
if (used_size_cache_dirty) {
|
||||||
|
if(tile_map.size() > 0) {
|
||||||
|
used_size_cache = Rect2(tile_map.front()->key().x, tile_map.front()->key().y, 0, 0);
|
||||||
|
|
||||||
|
for (Map<PosKey,Cell>::Element *E=tile_map.front();E;E=E->next()) {
|
||||||
|
used_size_cache.expand_to(Vector2(E->key().x, E->key().y));
|
||||||
|
}
|
||||||
|
|
||||||
|
used_size_cache.size += Vector2(1,1);
|
||||||
|
} else {
|
||||||
|
used_size_cache = Rect2();
|
||||||
|
}
|
||||||
|
|
||||||
|
used_size_cache_dirty = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return used_size_cache;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void TileMap::set_occluder_light_mask(int p_mask) {
|
void TileMap::set_occluder_light_mask(int p_mask) {
|
||||||
|
|
||||||
occluder_light_mask=p_mask;
|
occluder_light_mask=p_mask;
|
||||||
@ -1256,6 +1280,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_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));
|
||||||
ObjectTypeDB::bind_method(_MD("world_to_map","worldpos"),&TileMap::world_to_map);
|
ObjectTypeDB::bind_method(_MD("world_to_map","worldpos"),&TileMap::world_to_map);
|
||||||
@ -1305,6 +1330,7 @@ TileMap::TileMap() {
|
|||||||
|
|
||||||
|
|
||||||
rect_cache_dirty=true;
|
rect_cache_dirty=true;
|
||||||
|
used_size_cache_dirty=true;
|
||||||
pending_update=false;
|
pending_update=false;
|
||||||
quadrant_order_dirty=false;
|
quadrant_order_dirty=false;
|
||||||
quadrant_size=16;
|
quadrant_size=16;
|
||||||
|
@ -141,6 +141,8 @@ private:
|
|||||||
|
|
||||||
Rect2 rect_cache;
|
Rect2 rect_cache;
|
||||||
bool rect_cache_dirty;
|
bool rect_cache_dirty;
|
||||||
|
Rect2 used_size_cache;
|
||||||
|
bool used_size_cache_dirty;
|
||||||
bool quadrant_order_dirty;
|
bool quadrant_order_dirty;
|
||||||
bool y_sort_mode;
|
bool y_sort_mode;
|
||||||
float fp_adjust;
|
float fp_adjust;
|
||||||
@ -176,8 +178,6 @@ private:
|
|||||||
|
|
||||||
_FORCE_INLINE_ Vector2 _map_to_world(int p_x,int p_y,bool p_ignore_ofs=false) const;
|
_FORCE_INLINE_ Vector2 _map_to_world(int p_x,int p_y,bool p_ignore_ofs=false) const;
|
||||||
|
|
||||||
Array get_used_cells() const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
||||||
@ -252,6 +252,9 @@ public:
|
|||||||
void set_y_sort_mode(bool p_enable);
|
void set_y_sort_mode(bool p_enable);
|
||||||
bool is_y_sort_mode_enabled() const;
|
bool is_y_sort_mode_enabled() const;
|
||||||
|
|
||||||
|
Array get_used_cells() const;
|
||||||
|
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);
|
||||||
int get_occluder_light_mask() const;
|
int get_occluder_light_mask() const;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user