TowerDefense/UI/gui.gd

64 lines
1.8 KiB
GDScript3
Raw Normal View History

2025-08-29 20:07:36 +02:00
@tool
2025-08-26 19:26:36 +02:00
extends Control
2025-08-29 20:07:36 +02:00
const BUTTON_QTY = 12
2025-08-31 23:07:55 +02:00
const towerButton : PackedScene = preload("res://UI/tower_button.tscn")
var towerListResource : TowerListResource = preload("res://Towers/towers.tres")
2025-08-29 20:07:36 +02:00
@onready var buttonContainer = $HBoxContainer/ControlPanelBase/MarginContainer/GridContainer
2025-08-27 13:27:32 +02:00
var allowedTowers : Array[Tower.TYPE]
2025-08-30 00:46:34 +02:00
2025-08-27 13:27:32 +02:00
func _ready() -> void:
2025-08-29 20:07:36 +02:00
addTowerButtonNodes()
2025-08-30 00:46:34 +02:00
EventBus.allowedTowerHasChange.connect(allowedTowerHasChange)
2025-08-29 20:07:36 +02:00
if Engine.is_editor_hint():
towerListResource.changed.connect(addTowerButtonNodes)
2025-08-26 19:26:36 +02:00
func _on_button_cube_pressed() -> void:
pass # Replace with function body.
2025-08-27 13:27:32 +02:00
func _on_button_quit_level_pressed() -> void:
Transition.goto("res://UI/start_menu.tscn")
func _on_button_quit_game_pressed() -> void:
get_tree().quit()
2025-08-29 20:07:36 +02:00
2025-08-30 00:46:34 +02:00
2025-08-31 23:07:55 +02:00
func allowedTowerHasChange(_allowedTowers : Array[Tower.TYPE]) -> void:
allowedTowers = _allowedTowers
2025-08-30 00:46:34 +02:00
if is_node_ready():
addTowerButtonNodes()
2025-08-29 20:07:36 +02:00
func addTowerButtonNodes() -> void:
for node in buttonContainer.get_children():
if node.has_meta("dynamicButton"):
node.queue_free()
2025-08-30 00:46:34 +02:00
var additionalPlaceholder : int = 0
2025-08-29 20:07:36 +02:00
for towerResource in towerListResource.towers:
2025-08-30 00:46:34 +02:00
if !towerResource || not allowedTowers.has(towerResource.towerType):
additionalPlaceholder += 1
2025-08-29 20:07:36 +02:00
continue
2025-08-31 23:07:55 +02:00
var towerBtn : TowerButton = towerButton.instantiate()
2025-08-29 20:07:36 +02:00
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)
2025-08-30 00:46:34 +02:00
for i in BUTTON_QTY - towerListResource.towers.size() + additionalPlaceholder:
2025-08-31 23:07:55 +02:00
var placeholderBtn : Button = Button.new()
2025-08-29 20:07:36 +02:00
placeholderBtn.set_meta("dynamicButton", true)
placeholderBtn.custom_minimum_size = Vector2(80, 80)
buttonContainer.add_child(placeholderBtn)