@@ -36,7 +36,7 @@ class TileShape:
3636 return TileShape .new (shape , Transform2D (transform .x , transform .y , position ))
3737
3838
39- var _current_tile_set : TileSet
39+ var _current_tile_set : WeakRef
4040
4141## [AStar2D] instance for this [HexagonTileMapLayer]. Only avaliable if [HexagonTileMapLayer.pathfinding_enabled] is true.
4242var astar : AStar2D
@@ -108,17 +108,20 @@ func _enter_tree() -> void:
108108 if Engine .is_editor_hint ():
109109 tile_set .changed .connect (update_configuration_warnings )
110110 else :
111- _current_tile_set = tile_set
111+ _current_tile_set = weakref ( tile_set )
112112 tile_set .changed .connect (_on_tileset_changed )
113113 changed .connect (_on_changed )
114114
115115
116116func _exit_tree () -> void :
117117 if Engine .is_editor_hint ():
118- tile_set .changed .disconnect (update_configuration_warnings )
118+ if tile_set .changed .is_connected (update_configuration_warnings ):
119+ tile_set .changed .disconnect (update_configuration_warnings )
119120 else :
120- tile_set .changed .disconnect (_on_tileset_changed )
121- changed .disconnect (_on_changed )
121+ if tile_set .changed .is_connected (_on_tileset_changed ):
122+ tile_set .changed .disconnect (_on_tileset_changed )
123+ if changed .is_connected (_on_changed ):
124+ changed .disconnect (_on_changed )
122125
123126
124127func _ready () -> void :
@@ -406,12 +409,13 @@ func local_to_cube(map_position: Vector2) -> Vector3i:
406409
407410
408411func _on_changed () -> void :
409- if _current_tile_set != tile_set :
410- if _current_tile_set :
411- _current_tile_set .changed .disconnect (_on_tileset_changed )
412- _current_tile_set = tile_set
413- if _current_tile_set :
414- _current_tile_set .changed .connect (_on_tileset_changed )
412+ var current_tile_set : TileSet = _current_tile_set .get_ref ()
413+ if current_tile_set != tile_set :
414+ if is_instance_valid (current_tile_set ) and current_tile_set .changed .is_connected (_on_tileset_changed ):
415+ current_tile_set .changed .disconnect (_on_tileset_changed )
416+ _current_tile_set = weakref (tile_set )
417+ if is_instance_valid (tile_set ):
418+ tile_set .changed .connect (_on_tileset_changed )
415419 _on_tileset_changed ()
416420
417421
0 commit comments