@tool extends Control const BUTTON_QTY = 4 const GUI_BUTTON : PackedScene = preload("uid://dqb5o8w7u50hc") @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 = GUI_BUTTON.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()