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()