2024-02-22 06:22:22 +11:00
|
|
|
class_name HUD extends CanvasLayer
|
|
|
|
|
|
|
|
var last_lives_count: int = 120
|
|
|
|
@export var wave_count: Label
|
|
|
|
@export var lives_count: Label
|
|
|
|
@export var currency_count: Label
|
|
|
|
@export var minimap_outline: TextureRect
|
|
|
|
@export var crosshair: Control
|
|
|
|
@export var minimap: TextureRect
|
|
|
|
@export var minimap_cam: MinimapCamera3D
|
|
|
|
@export var minimap_viewport: SubViewport
|
|
|
|
@export var fps_label: Label
|
|
|
|
@export var hover_text: Label
|
|
|
|
var minimap_anchor: Node3D
|
|
|
|
var enemy_names: Array[String]
|
|
|
|
@export var enemy_sprites: Array[TextureRect]
|
|
|
|
@export var enemy_counts: Array[Label]
|
|
|
|
@export var weapon_energy_bar: TextureProgressBar
|
|
|
|
@export var offhand_energy_bar: TextureProgressBar
|
|
|
|
@export var pickup_notif_scene: PackedScene
|
|
|
|
@export var wave_start_label: Label
|
|
|
|
|
|
|
|
|
|
|
|
func set_energy_visible(value: bool) -> void:
|
2023-11-27 13:52:46 +11:00
|
|
|
weapon_energy_bar.set_visible(value)
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_offhand_energy_visible(value: bool) -> void:
|
2023-11-28 16:52:15 +11:00
|
|
|
offhand_energy_bar.set_visible(value)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func _process(_delta: float) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
fps_label.text = "FPS: " + str(Engine.get_frames_per_second())
|
2023-12-09 01:09:12 +11:00
|
|
|
wave_start_label.text = "Press [" + Data.player_keymap.ready.as_text_key_label() + "] to start wave"
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func grow_wave_start_label() -> void:
|
2023-12-10 12:05:41 +11:00
|
|
|
tween_label(300.0)
|
2023-12-09 01:09:12 +11:00
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func shrink_wave_start_label() -> void:
|
2023-12-10 12:05:41 +11:00
|
|
|
tween_label(0.0)
|
|
|
|
|
|
|
|
|
|
|
|
func tween_label(x: float) -> void:
|
2024-02-22 06:22:22 +11:00
|
|
|
var tween: Tween = create_tween()
|
2023-12-10 12:05:41 +11:00
|
|
|
tween.set_ease(Tween.EASE_IN_OUT)
|
|
|
|
tween.set_trans(Tween.TRANS_QUAD)
|
|
|
|
if x > 0.0:
|
|
|
|
tween.tween_callback(wave_start_label.set_visible.bind(true))
|
|
|
|
tween.parallel().tween_property(wave_start_label, "offset_left", -x, 0.6)
|
|
|
|
tween.parallel().tween_property(wave_start_label, "offset_right", x, 0.6)
|
|
|
|
if x <= 0.0:
|
|
|
|
tween.tween_callback(wave_start_label.set_visible.bind(false))
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_hover_text(text: String) -> void:
|
2023-11-09 20:37:12 +11:00
|
|
|
hover_text.text = text
|
|
|
|
hover_text.set_visible(true)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func unset_hover_text() -> void:
|
2023-11-09 20:37:12 +11:00
|
|
|
hover_text.set_visible(false)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_wave_count(value: int) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
wave_count.text = str(value)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_lives_count(value: int) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
lives_count.text = str(value)
|
2024-02-22 06:22:22 +11:00
|
|
|
for x: int in last_lives_count - value:
|
2023-11-08 14:28:55 +11:00
|
|
|
$LivesBar.take_life()
|
|
|
|
last_lives_count = value
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func enemy_count_down(enemy: Enemy) -> void:
|
|
|
|
var index: int = enemy_names.find(enemy.title)
|
|
|
|
var num: int = enemy_counts[index].text.to_int() - 1
|
2023-11-09 17:56:08 +11:00
|
|
|
enemy_counts[index].text = str(num)
|
|
|
|
if num == 0:
|
|
|
|
enemy_counts[index].set_visible(false)
|
|
|
|
enemy_sprites[index].set_visible(false)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_upcoming_wave(value: Dictionary) -> void:
|
|
|
|
var frame_count: int = 0
|
2023-11-09 17:56:08 +11:00
|
|
|
enemy_names = []
|
2024-02-22 06:22:22 +11:00
|
|
|
var wave: Dictionary = {}
|
|
|
|
for index: int in value:
|
2023-11-13 19:36:35 +11:00
|
|
|
wave[Data.enemies[index]] = value[index]
|
2024-02-22 06:22:22 +11:00
|
|
|
for x: int in enemy_sprites.size():
|
2023-11-08 14:28:55 +11:00
|
|
|
enemy_sprites[x].set_visible(false)
|
|
|
|
enemy_counts[x].set_visible(false)
|
2024-02-22 06:22:22 +11:00
|
|
|
for enemy: Enemy in wave:
|
2023-11-09 17:56:08 +11:00
|
|
|
enemy_names.append(enemy.title)
|
2023-11-08 14:28:55 +11:00
|
|
|
enemy_sprites[frame_count].texture = enemy.icon
|
2023-11-13 19:36:35 +11:00
|
|
|
enemy_counts[frame_count].text = str(wave[enemy])
|
2023-11-08 14:28:55 +11:00
|
|
|
enemy_sprites[frame_count].set_visible(true)
|
|
|
|
enemy_counts[frame_count].set_visible(true)
|
|
|
|
frame_count += 1
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_currency_count(value: int) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
currency_count.text = str(value)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_crosshair_visible(value: bool) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
crosshair.set_visible(value)
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_weapon_energy(value: int) -> void:
|
2023-11-27 13:52:46 +11:00
|
|
|
weapon_energy_bar.value = value
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func set_offhand_energy(value: int) -> void:
|
2023-11-28 16:52:15 +11:00
|
|
|
offhand_energy_bar.value = value
|
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func maximise_minimap(anchor: Node3D) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
minimap_cam.anchor = anchor
|
|
|
|
minimap.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
|
|
|
minimap.offset_bottom = -40
|
|
|
|
minimap.offset_top = 40
|
|
|
|
minimap.offset_left = 40
|
|
|
|
minimap.offset_right = -40
|
|
|
|
minimap_viewport.size = Vector2(1840, 1000)
|
|
|
|
minimap_cam.size = 30
|
2023-11-30 23:37:00 +11:00
|
|
|
minimap_outline.set_visible(false)
|
|
|
|
currency_count.set_visible(false)
|
2023-11-08 14:28:55 +11:00
|
|
|
|
|
|
|
|
2024-02-22 06:22:22 +11:00
|
|
|
func minimize_minimap(anchor: Node3D) -> void:
|
2023-11-08 14:28:55 +11:00
|
|
|
minimap_cam.anchor = anchor
|
|
|
|
minimap.set_anchors_and_offsets_preset(Control.PRESET_TOP_RIGHT)
|
|
|
|
minimap.offset_right = -40
|
|
|
|
minimap.offset_top = 40
|
|
|
|
minimap.offset_left = -256
|
|
|
|
minimap.offset_bottom = 256
|
|
|
|
minimap_viewport.size = Vector2(256, 256)
|
|
|
|
minimap_cam.size = 15
|
2023-11-30 23:37:00 +11:00
|
|
|
minimap_outline.set_visible(true)
|
|
|
|
currency_count.set_visible(true)
|
2023-12-08 18:25:15 +11:00
|
|
|
|
|
|
|
|
|
|
|
func pickup(card: Card) -> void:
|
2024-02-22 06:22:22 +11:00
|
|
|
var notif: PickupNotification = pickup_notif_scene.instantiate()
|
2023-12-08 18:25:15 +11:00
|
|
|
notif.set_card(card)
|
|
|
|
$VBoxContainer.add_child(notif)
|