Skip to content

Commit f27e698

Browse files
committed
Refactor tile_set reference to use WeakRef. Fix #14
1 parent 3b6ebe6 commit f27e698

2 files changed

Lines changed: 20 additions & 11 deletions

File tree

.changeset/curvy-windows-double.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"hexagon-tile-map-layer": patch
3+
---
4+
5+
Refactor tile_set reference to use WeakRef. Fix #14

addons/hexagon_tilemaplayer/hexagon_tilemaplayer.gd

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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.
4242
var 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

116116
func _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

124127
func _ready() -> void:
@@ -406,12 +409,13 @@ func local_to_cube(map_position: Vector2) -> Vector3i:
406409

407410

408411
func _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

Comments
 (0)