TowerDefense/UI/gui.gd
Varylios 23e0c03fc0 feat: add autoloader for menu level buttons
fix: wave not restartable when winned
clean: remove useless files + warnings
2025-09-03 03:44:44 +02:00

70 lines
2.2 KiB
GDScript

@tool
extends Control
const BUTTON_QTY = 12
const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
@onready var buttonContainer = %ButtonContainer
@onready var moneyLabel = %LabelMoney
@onready var towerInCubeLabel = %LabelTowerInCube
@onready var towerOnTerrainLabel = %LabelTowerOnTerrain
var allowedTowers : Array[Tower.TYPE]
func _ready() -> void:
addTowerButtonNodes()
EventBus.allowedTowerHasChange.connect(allowedTowerHasChange)
EventBus.money_changed.connect(func(amount): moneyLabel.text = str(amount) + "")
EventBus.team_in_rest_changed.connect(func(count): towerInCubeLabel.text = str(count) + " x Zzz")
EventBus.team_in_action_changed.connect(func(count): towerOnTerrainLabel.text = str(count) + " in action")
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.TYPE]) -> void:
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 towerType in Game.towers:
if not Engine.is_editor_hint() && not allowedTowers.has(towerType):
additionalPlaceholder += 1
else:
createTowerButton(towerType)
for i in BUTTON_QTY - Game.towers.size() + additionalPlaceholder:
var placeholderBtn : Button = Button.new()
placeholderBtn.set_meta("dynamicButton", true)
placeholderBtn.custom_minimum_size = Vector2(80, 80)
buttonContainer.add_child(placeholderBtn)
func createTowerButton(towerType : Tower.TYPE) -> void:
var towerBtn : GuiButton = guiButton.instantiate()
var tower : PackedScene = Game.towers.get(towerType)
towerBtn.towerType = towerType
towerBtn.hasEnergyBar = true
towerBtn.toggle_mode = true
towerBtn.tooltip_text = str(EnhancedResource.getPackedSceneProperty(tower, "name"))
towerBtn.texture = EnhancedResource.getPackedSceneProperty(tower, "icone")
towerBtn.set_meta("dynamicButton", true)
buttonContainer.add_child(towerBtn)