extends Node3D @onready var progress_bar: ProgressBar = $XROrigin3D/XRCamera3D/LoadingUI/SubViewport/Control/VBoxContainer/ProgressBar @onready var title_label: Label = $XROrigin3D/XRCamera3D/LoadingUI/SubViewport/Control/VBoxContainer/TitleLabel @onready var xr_interface: XRInterface = XRServer.find_interface("OpenXR") var main_scene_path: String = "res://scenes/escape-room-szene-room.tscn" # Passe den Pfad an deine Hauptszene an var loading_status: Array = [] var progress: float = 0.0 var loading_complete: bool = false var wait_timer: float = 0.0 const WAIT_TIME: float = 3.0 func _ready() -> void: print("VR Loading Screen gestartet") # Initialisiere XR if xr_interface and xr_interface.is_initialized(): print("OpenXR bereits initialisiert") get_viewport().use_xr = true elif xr_interface: print("Initialisiere OpenXR...") if xr_interface.initialize(): get_viewport().use_xr = true print("OpenXR erfolgreich initialisiert") else: push_error("OpenXR konnte nicht initialisiert werden") else: push_error("OpenXR Interface nicht gefunden") # Prüfe ob UI-Nodes existieren if progress_bar == null: push_error("ProgressBar nicht gefunden!") return if title_label == null: push_error("TitleLabel nicht gefunden!") return # Lade-Fortschritt initialisieren progress_bar.value = 0 title_label.text = "Lade VR-Erlebnis..." # Prüfe ob Hauptszene existiert if not ResourceLoader.exists(main_scene_path): push_error("Hauptszene nicht gefunden: " + main_scene_path) title_label.text = "Szene nicht gefunden!" return # Starte das Laden der Hauptszene im Hintergrund var error = ResourceLoader.load_threaded_request(main_scene_path) if error != OK: push_error("Fehler beim Laden der Szene: " + str(error)) title_label.text = "Fehler beim Laden!" func _process(delta: float) -> void: if progress_bar == null or title_label == null: return if not loading_complete: # Prüfe den Lade-Fortschritt var status = ResourceLoader.load_threaded_get_status(main_scene_path, loading_status) if status == ResourceLoader.THREAD_LOAD_IN_PROGRESS: # Aktualisiere die Progress Bar if loading_status.size() > 0: progress = loading_status[0] * 100.0 progress_bar.value = progress elif status == ResourceLoader.THREAD_LOAD_LOADED: # Laden abgeschlossen progress_bar.value = 100 title_label.text = "Laden abgeschlossen!" loading_complete = true print("Laden abgeschlossen, warte 3 Sekunden...") elif status == ResourceLoader.THREAD_LOAD_FAILED: push_error("Laden der Szene fehlgeschlagen!") title_label.text = "Laden fehlgeschlagen!" loading_complete = true else: # Warte 3 Sekunden nach dem Laden wait_timer += delta if wait_timer >= WAIT_TIME: _load_main_scene() func _load_main_scene() -> void: print("Wechsle zur Hauptszene...") var packed_scene = ResourceLoader.load_threaded_get(main_scene_path) if packed_scene: get_tree().change_scene_to_packed(packed_scene) else: push_error("Konnte geladene Szene nicht abrufen!")