@tool extends Control const BUTTON_QTY = 12 const towerButton := preload("res://UI/tower_button.tscn") var towerListResource := preload("res://Towers/towers.tres") @onready var buttonContainer = $HBoxContainer/ControlPanelBase/MarginContainer/GridContainer var allowedTowers : Array[Tower.TYPES] func _ready() -> void: addTowerButtonNodes() EventBus.allowedTowerHasChange.connect(allowedTowerHasChange) if Engine.is_editor_hint(): towerListResource.changed.connect(addTowerButtonNodes) func _on_button_cube_pressed() -> void: pass # Replace with function body. func _on_button_quit_level_pressed() -> void: Transition.goto("res://UI/start_menu.tscn") func _on_button_quit_game_pressed() -> void: get_tree().quit() func allowedTowerHasChange(allowedTowers : Array[Tower.TYPES]) -> void: self.allowedTowers = allowedTowers if is_node_ready(): addTowerButtonNodes() func addTowerButtonNodes() -> void: for node in buttonContainer.get_children(): if node.has_meta("dynamicButton"): node.queue_free() var additionalPlaceholder : int = 0 for towerResource in towerListResource.towers: if !towerResource || not allowedTowers.has(towerResource.towerType): additionalPlaceholder += 1 continue var towerBtn := towerButton.instantiate() var tower : Tower = towerResource.towerScene.instantiate() towerBtn.towerType = tower.tower_type towerBtn.tooltip_text = tower.name towerBtn.setButtonTexture(tower.icone) towerBtn.set_meta("dynamicButton", true) tower.queue_free() buttonContainer.add_child(towerBtn) for i in BUTTON_QTY - towerListResource.towers.size() + additionalPlaceholder: var placeholderBtn := Button.new() placeholderBtn.set_meta("dynamicButton", true) placeholderBtn.custom_minimum_size = Vector2(80, 80) buttonContainer.add_child(placeholderBtn)