95 lines
3.1 KiB
GDScript
95 lines
3.1 KiB
GDScript
@tool
|
|
extends Control
|
|
|
|
const BUTTON_QTY = 4
|
|
|
|
const guiButton : PackedScene = preload("res://UI/gui_button.tscn")
|
|
|
|
@onready var buttonContainer : GridContainer = %ButtonContainer
|
|
@onready var cubeIntegrity : ProgressBar = %CubeIntegrity
|
|
@onready var cubeBtn : GuiButton = %CubeBtn
|
|
|
|
|
|
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)
|
|
EventBus.wave_has_change.connect(onWaveChange)
|
|
EventBus.cube_selected.connect(cubeBtn.set_pressed_no_signal.bind(true))
|
|
EventBus.tower_selected.connect(func(_type): cubeBtn.set_pressed_no_signal(false))
|
|
|
|
Game.allowed_tower_has_change.connect(addTowerButtonNodes)
|
|
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)
|
|
|
|
%NextWaveBtn.pressed.connect(EventBus.lauch_next_wave.emit)
|
|
%QuitLevelBtn.pressed.connect(Helper.showConfirmPopup.bind("Quit level ?", self, Game.quitLevel))
|
|
%QuitGameBtn.pressed.connect(Helper.showConfirmPopup.bind("Quit game ?", self, Game.quitGame))
|
|
cubeBtn.toggled.connect(onCubeBtnPressed)
|
|
$InfoPanel.visible = false
|
|
$InfoPanel.mouse_entered.connect(onMouseEnteredGui)
|
|
$InfoPanel.mouse_exited.connect(onMouseExitedGui)
|
|
$TowerButtonPanel.mouse_entered.connect(onMouseEnteredGui)
|
|
$TowerButtonPanel.mouse_exited.connect(onMouseExitedGui)
|
|
|
|
if Engine.is_editor_hint():
|
|
var allowedTowers : Array[Tower.TYPE]
|
|
allowedTowers.assign(Tower.TYPE.values().filter(func(v): return v))
|
|
Game.initTowers(allowedTowers)
|
|
|
|
|
|
func onCubeBtnPressed(state : bool) -> void:
|
|
EventBus.tower_selected.emit(Tower.TYPE.NONE)
|
|
if state:
|
|
EventBus.cube_selected.emit()
|
|
|
|
|
|
func onWaveChange(waveNumber : int, timeRemaining : float) -> void:
|
|
%WaveNumber.text = "Wave N°%d" % waveNumber
|
|
updateWaveCooldownLabel(timeRemaining)
|
|
|
|
|
|
func updateWaveCooldownLabel(waveCooldown : float) -> void:
|
|
const tickDuration : float = .1
|
|
$WaveCooldown.visible = true
|
|
while waveCooldown > 0:
|
|
if waveCooldown > 5:
|
|
$WaveCooldown.text = "\n\nNext wave : %3.0f" % waveCooldown
|
|
else:
|
|
$WaveCooldown.text = "\n\nNext wave : %3.1f" % waveCooldown
|
|
waveCooldown -= tickDuration
|
|
await get_tree().create_timer(tickDuration, false).timeout
|
|
|
|
$WaveCooldown.visible = false
|
|
|
|
|
|
func addTowerButtonNodes() -> void:
|
|
for node in buttonContainer.get_children():
|
|
if node.has_meta("dynamicButton"):
|
|
node.queue_free()
|
|
|
|
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:
|
|
btn.tower = Game.towers.get(towerType)
|
|
else:
|
|
btn.disabled = true
|
|
buttonContainer.add_child(btn)
|
|
|
|
|
|
func onMouseEnteredGui() -> void:
|
|
EventBus.mouse_entered_gui.emit()
|
|
|
|
|
|
func onMouseExitedGui() -> void:
|
|
EventBus.mouse_exited_gui.emit()
|