summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2021-10-13 16:03:31 +0200
committerGitHub <noreply@github.com>2021-10-13 16:03:31 +0200
commit004b44e91519626e847c981c9f91ae3c4e36282c (patch)
tree8c02643bfb3d78591c1aaa782f2d87ee507126e1 /scene
parent6eff4c1feedec6253fdd748db6981311dcf40fcd (diff)
parent0de2fce3e18b2e8047aa6a32cf0f6e370ef10d06 (diff)
Merge pull request #53767 from groud/improve_tile_set_change_performances
Diffstat (limited to 'scene')
-rw-r--r--scene/2d/tile_map.cpp14
-rw-r--r--scene/2d/tile_map.h2
2 files changed, 14 insertions, 2 deletions
diff --git a/scene/2d/tile_map.cpp b/scene/2d/tile_map.cpp
index 050168f9d9..c2f150ce00 100644
--- a/scene/2d/tile_map.cpp
+++ b/scene/2d/tile_map.cpp
@@ -3095,6 +3095,8 @@ void TileMap::_bind_methods() {
ClassDB::bind_method(D_METHOD("_set_tile_data", "layer"), &TileMap::_set_tile_data);
ClassDB::bind_method(D_METHOD("_get_tile_data", "layer"), &TileMap::_get_tile_data);
+ ClassDB::bind_method(D_METHOD("_tile_set_changed_deferred_update"), &TileMap::_tile_set_changed_deferred_update);
+
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "tile_set", PROPERTY_HINT_RESOURCE_TYPE, "TileSet"), "set_tileset", "get_tileset");
ADD_PROPERTY(PropertyInfo(Variant::INT, "cell_quadrant_size", PROPERTY_HINT_RANGE, "1,128,1"), "set_quadrant_size", "get_quadrant_size");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collision_animatable"), "set_collision_animatable", "is_collision_animatable");
@@ -3114,8 +3116,16 @@ void TileMap::_bind_methods() {
void TileMap::_tile_set_changed() {
emit_signal(SNAME("changed"));
- _clear_internals();
- _recreate_internals();
+ _tile_set_changed_deferred_update_needed = true;
+ call_deferred("_tile_set_changed_deferred_update");
+}
+
+void TileMap::_tile_set_changed_deferred_update() {
+ if (_tile_set_changed_deferred_update_needed) {
+ _clear_internals();
+ _recreate_internals();
+ _tile_set_changed_deferred_update_needed = false;
+ }
}
TileMap::TileMap() {
diff --git a/scene/2d/tile_map.h b/scene/2d/tile_map.h
index b1fbdfdf8a..e5809deabb 100644
--- a/scene/2d/tile_map.h
+++ b/scene/2d/tile_map.h
@@ -285,6 +285,8 @@ private:
Vector<int> _get_tile_data(int p_layer) const;
void _tile_set_changed();
+ bool _tile_set_changed_deferred_update_needed = false;
+ void _tile_set_changed_deferred_update();
protected:
bool _set(const StringName &p_name, const Variant &p_value);