TowerDefense/UI/gui.gd

97 lines
3 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
const BUTTON_QTY = 4
2025-08-29 20:07:36 +02:00
const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
2025-08-29 20:07:36 +02:00
@onready var buttonContainer = %ButtonContainer
2025-09-03 20:52:14 +02:00
@onready var cubeIntegrity = %CubeIntegrity
2025-09-07 19:48:58 +02:00
@onready var cubeBtn = %CubeBtn
2025-09-06 22:08:29 +02:00
var waveCooldown : float
2025-08-27 13:27:32 +02:00
2025-08-30 00:46:34 +02:00
2025-08-27 13:27:32 +02:00
func _ready() -> void:
EventBus.team_in_rest_changed.connect(func(count): %LabelTowerInCube.text = "Zzz : %d" % count)
EventBus.team_in_action_changed.connect(func(count): %LabelTowerOnTerrain.text = " In action : %d" % count)
2025-09-07 19:48:58 +02:00
EventBus.wave_has_change.connect(onWaveChange)
2025-09-09 19:29:29 +02:00
EventBus.tower_selected.connect(func(_type):
cubeBtn.set_pressed_no_signal(cubeBtn.button_pressed && _type == Tower.TYPE.NONE))
2025-09-07 19:48:58 +02:00
Game.allowed_tower_has_change.connect(addTowerButtonNodes)
2025-09-06 22:08:29 +02:00
Game.cube_integrity_changed.connect(func(): cubeIntegrity.value = Game.health)
cubeIntegrity.max_value = Game.max_health
cubeIntegrity.value = Game.health
Game.money_changed.connect(func(): %LabelMoney.text = "%d" % Game.money)
2025-09-07 19:48:58 +02:00
%NextWaveBtn.pressed.connect(EventBus.lauch_next_wave.emit)
2025-09-06 22:08:29 +02:00
$WaveCooldown/Timer.timeout.connect(updateWaveCooldownLabel)
2025-09-06 23:26:37 +02:00
%QuitLevelBtn.pressed.connect(Helper.showConfirmPopup.bind("Quit level ?", self, Game.quitLevel))
%QuitGameBtn.pressed.connect(Helper.showConfirmPopup.bind("Quit game ?", self, Game.quitGame))
2025-09-07 19:48:58 +02:00
cubeBtn.toggled.connect(onCubeBtnPressed)
$InfoPanel.visible = false
$InfoPanel.mouse_entered.connect(onMouseEnteredGui)
$InfoPanel.mouse_exited.connect(onMouseExitedGui)
2025-09-07 11:52:50 +02:00
$TowerButtonPanel.mouse_entered.connect(onMouseEnteredGui)
$TowerButtonPanel.mouse_exited.connect(onMouseExitedGui)
2025-09-06 22:08:29 +02:00
if Engine.is_editor_hint():
var allowedTowers : Array[Tower.TYPE]
allowedTowers.assign(Tower.TYPE.values().filter(func(v): return v))
Game.initTowers(allowedTowers)
2025-08-29 20:07:36 +02:00
2025-08-26 19:26:36 +02:00
2025-09-07 19:48:58 +02:00
func onCubeBtnPressed(state : bool) -> void:
2025-09-09 19:29:29 +02:00
EventBus.tower_selected.emit(Tower.TYPE.NONE)
2025-09-07 19:48:58 +02:00
if state:
EventBus.cube_selected.emit()
2025-08-27 13:27:32 +02:00
2025-09-06 22:08:29 +02:00
func onWaveChange(waveNumber : int, timeRemaining : float) -> void:
%WaveNumber.text = "Wave N°%d" % waveNumber
waveCooldown = timeRemaining
$WaveCooldown/Timer.start()
2025-08-27 13:27:32 +02:00
2025-09-06 22:08:29 +02:00
func updateWaveCooldownLabel() -> void:
waveCooldown -= $WaveCooldown/Timer.wait_time
if waveCooldown > 5:
$WaveCooldown.text = "\n\nNext wave : %3.0f" % waveCooldown
elif waveCooldown < 0:
$WaveCooldown/Timer.stop()
$WaveCooldown.text = ""
else:
$WaveCooldown.text = "\n\nNext wave : %3.1f" % waveCooldown
2025-08-29 20:07:36 +02:00
2025-08-30 00:46:34 +02:00
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-09-06 22:08:29 +02:00
for towerType in Game.towers.keys() :
createTowerButton(towerType)
for i in BUTTON_QTY - (buttonContainer.get_children().size() % BUTTON_QTY):
createTowerButton(Tower.TYPE.NONE)
func createTowerButton(towerType : Tower.TYPE) -> void:
var btn : GuiButton = guiButton.instantiate()
btn.set_meta("dynamicButton", true)
if towerType:
2025-09-06 22:08:29 +02:00
btn.tower = Game.towers.get(towerType)
else:
btn.disabled = true
buttonContainer.add_child(btn)
2025-09-07 11:52:50 +02:00
func onMouseEnteredGui() -> void:
EventBus.mouse_entered_gui.emit()
func onMouseExitedGui() -> void:
EventBus.mouse_exited_gui.emit()