extends StaticBody3D @export_file("*.tscn") var next_scene_path: String = "" var is_triggered: bool = false var detect_area: Area3D = null @export var results_screen_scene: PackedScene func _ready() -> void: detect_area = $DetectArea func _physics_process(delta: float) -> void: if is_triggered or detect_area == null: return var overlapping_stuff: Array = [] overlapping_stuff.append_array(detect_area.get_overlapping_bodies()) overlapping_stuff.append_array(detect_area.get_overlapping_areas()) for node in overlapping_stuff: if node == self or node == detect_area or node is StaticBody3D or "CSG" in node.name: continue var is_real_player = node.name == "PlayerCharacter" if not is_real_player and node.get_parent(): is_real_player = node.get_parent().name == "PlayerCharacter" if is_real_player: is_triggered = true print("[УРОВЕНЬ] МГНОВЕННЫЙ ФИНИШ! Полностью блокирую камеру и открываю курсор...") # Отключаем сам триггер set_physics_process(false) # Находим корневой узел игрока var main_player = node if node.name == "PlayerCharacter" else node.get_parent() # --- МГНОВЕННАЯ ЗАМОРОЗКА ИНПУТОВ КАМЕРЫ И ОРУЖИЯ --- # Переводим игрока в режим PROCESS_MODE_DISABLED. # Это мгновенно отключает у него функции _process, _physics_process и ВСЕ _input функции мыши! # Камера намертво каменеет в ту же секунду, без необходимости кликать кнопками. if main_player: main_player.process_mode = Node.PROCESS_MODE_DISABLED # ---------------------------------------------------- # Аппаратно освобождаем мышь для клика по кнопке "Далее" Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) # Спавним экран результатов в корень игры if results_screen_scene: var results_instance = results_screen_scene.instantiate() get_tree().get_root().add_child(results_instance) if results_instance.has_method("show_results"): results_instance.show_results(next_scene_path) return