vrp-gruppe-sechs/escape-room/old_skripte/loading_screen.gd

94 lines
3.0 KiB
GDScript

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!")