diff --git a/scenes/game/upgrades_card.tscn b/scenes/game/upgrades_card.tscn index 5ab37a3..2c6da90 100644 --- a/scenes/game/upgrades_card.tscn +++ b/scenes/game/upgrades_card.tscn @@ -29,6 +29,27 @@ grow_horizontal = 2 grow_vertical = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_oaoa1") +[node name="MarginContainer" type="MarginContainer" parent="."] +layout_mode = 1 +anchors_preset = 1 +anchor_left = 1.0 +anchor_right = 1.0 +offset_left = -48.0 +offset_bottom = 27.0 +grow_horizontal = 0 +theme_override_constants/margin_left = 2 +theme_override_constants/margin_top = 6 +theme_override_constants/margin_right = 6 +theme_override_constants/margin_bottom = 2 + +[node name="UpgradeInfoLabel" type="Label" parent="MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_colors/font_color = Color(0.27450982, 1, 0, 1) +text = "New!" +horizontal_alignment = 2 +vertical_alignment = 1 + [node name="VBoxContainer" type="VBoxContainer" parent="."] layout_mode = 1 anchors_preset = 15 diff --git a/scripts/game/upgrades_card.gd b/scripts/game/upgrades_card.gd index adfe3fd..4f4eb18 100644 --- a/scripts/game/upgrades_card.gd +++ b/scripts/game/upgrades_card.gd @@ -9,6 +9,7 @@ extends Panel @export var title := "" @export var icon: Texture2D +@onready var upgrade_info_label: Label = $MarginContainer/UpgradeInfoLabel @onready var texture_rect: TextureRect = $VBoxContainer/MarginContainer/TextureRect @onready var label: Label = $VBoxContainer/MarginContainer2/Label @@ -37,6 +38,7 @@ func _refresh() -> void: label.text = title if title != "" else _set_name_for(upgrade) if is_instance_valid(texture_rect): texture_rect.texture = _set_image_for(upgrade) + _refresh_badge() ## Retorna o nome descritivo do upgrade conforme o tipo especificado. @@ -72,3 +74,23 @@ func _gui_input(event: InputEvent) -> void: if event is InputEventMouseButton and event.pressed and event.button_index == MOUSE_BUTTON_LEFT: PlayerUpgrades.apply_upgrade(upgrade) chosen.emit(upgrade) + + +## Atualiza o badge informativo da carta de upgrade. +func _refresh_badge() -> void: + if not is_instance_valid(upgrade_info_label): + return + if not get_tree().root.has_node("PlayerUpgrades"): + upgrade_info_label.visible = false + return + var current_level := PlayerUpgrades.get_level_for_track(upgrade) + upgrade_info_label.visible = true + if current_level >= PlayerUpgrades.MAX_LEVEL: + upgrade_info_label.text = "MAX!" + upgrade_info_label.add_theme_color_override("font_color", Color("#FF1E1E")) + elif current_level <= 0: + upgrade_info_label.text = "New!" + upgrade_info_label.add_theme_color_override("font_color", Color("#00FF4A")) + else: + upgrade_info_label.text = "Level UP!" + upgrade_info_label.add_theme_color_override("font_color", Color("#FF7A00")) diff --git a/scripts/player/player_upgrades.gd b/scripts/player/player_upgrades.gd index 84b6e8f..7c9ccb5 100644 --- a/scripts/player/player_upgrades.gd +++ b/scripts/player/player_upgrades.gd @@ -106,3 +106,24 @@ func reset() -> void: passive_shield_level = 0 passive_speed_level = 0 stats_updated.emit() + + +## Retorna o nível atual (0..MAX_LEVEL) da trilha de upgrade informada. +## permitir que a UI (cartas/badges) e outras regras do jogo +## consultem rapidamente se um upgrade é novo, está evoluindo ou já atingiu o máximo. +func get_level_for_track(track: int) -> int: + match track: + UpgradeTrack.ACTIVE_WEAPON_1: + return active_weapon_1_level + UpgradeTrack.ACTIVE_WEAPON_2: + return active_weapon_2_level + UpgradeTrack.ACTIVE_WEAPON_3: + return active_weapon_3_level + UpgradeTrack.ACTIVE_WEAPON_4: + return active_weapon_4_level + UpgradeTrack.PASSIVE_SHIELD: + return passive_shield_level + UpgradeTrack.PASSIVE_SPEED: + return passive_speed_level + _: + return 0