Files

93 lines
3.8 KiB
GDScript

extends CanvasLayer
@onready var health_text = $HealthText
@onready var vignette = $Vignette
# Переменные для динамического поиска панели смерти
var death_panel: Control = null
var restart_button: Button = null
var health_component: Node = null
func _ready() -> void:
print("[ОТЛАДКА UI] Скрипт интерфейса здоровья УСПЕШНО ЗАПУЩЕН!")
# Глубокий поиск панели смерти по всей сцене, чтобы не зависеть от путей $Узел
death_panel = find_child("DeathPanel", true, false)
if death_panel:
print("[ОТЛАДКА UI] Панель DeathPanel найдена. Скрываю её со старта.")
death_panel.visible = false
# Ищем кнопку внутри панели
restart_button = death_panel.find_child("RestartButton", true, false)
if restart_button:
print("[ОТЛАДКА UI] Кнопка RestartButton найдена. Подключаю клик.")
restart_button.pressed.connect(_on_restart_button_pressed)
else:
print("[ОТЛАДКА UI] ОШИБКА: Кнопка с именем RestartButton НЕ найдена внутри DeathPanel!")
else:
print("[ОТЛАДКА UI] КРИТИЧЕСКАЯ ОШИБКА: Узел с именем DeathPanel вообще НЕ существует в этой сцене UI!")
# Ищем компонент здоровья у игрока
if get_parent():
health_component = get_parent().find_child("HealthComponent", true, false)
if health_component == null:
print("[ОТЛАДКА UI] ОШИБКА: HealthComponent игрока не найден!")
if health_text: health_text.visible = true
if vignette: vignette.visible = false
func _process(delta: float) -> void:
if health_component == null: return
var current_health = health_component.current_health
# 1. ОБНОВЛЯЕМ ЦИФРЫ НА ЭКРАНЕ
if health_text:
health_text.text = str(clamp(int(current_health), 0, 100))
if current_health <= 30:
health_text.add_theme_color_override("font_color", Color.RED)
else:
health_text.add_theme_color_override("font_color", Color.WHITE)
# 2. УПРАВЛЯЕМ КРАСНОЙ ВИНЬЕТКОЙ
if vignette:
if current_health <= 30 and current_health > 0:
vignette.visible = true
var color_rect = vignette.get_node_or_null("ColorRect")
if color_rect:
color_rect.visible = true
var pulse = (sin(Time.get_ticks_msec() * 0.005) + 1.0) / 2.0
color_rect.modulate.a = lerp(0.3, 1.0, pulse)
else:
vignette.visible = false
# 3. ПЕРЕХВАТ СМЕРТИ ИГРОКА
if current_health <= 0:
print("[ОТЛАДКА UI] ВНИМАНИЕ: Здоровье упало до 0! Включаю экран смерти...")
set_process(false) # Останавливаем цикл опроса
# Жестко включаем панель смерти
if death_panel:
death_panel.visible = true
print("[ОТЛАДКА UI] Свойство visible для DeathPanel переведено в TRUE.")
else:
print("[ОТЛАДКА UI] Сбой: Панель смерти равна null, включать нечего!")
# Включаем курсор мыши наэкранно
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
# Замораживаем стрельбу в WeaponManager ассета
var player_node = get_parent()
if player_node:
var wm = player_node.find_child("WeaponManager", true, false)
if wm and "canUseWeapon" in wm:
wm.canUseWeapon = false
func _on_restart_button_pressed() -> void:
print("[ОТЛАДКА UI] Игрок кликнул по кнопке рестарта! Перезагружаю уровень...")
var gt = get_node_or_null("/root/GameTransfer")
if gt and "saved_health" in gt:
gt.saved_health = 100.0
get_tree().reload_current_scene()