Files

56 lines
2.3 KiB
GDScript
Raw Permalink Normal View History

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