#include "ydi_vr_origin.h" #include "core/config/engine.h" #include "scene/main/viewport.h" #include "servers/xr/xr_interface.h" #include "servers/xr_server.h" void VROrigin::_bind_methods() {} void VROrigin::setup_vr_interface(Ref with_interface) { if (with_interface.is_valid()) { DisplayServer::get_singleton()->window_set_vsync_mode(DisplayServer::VSYNC_DISABLED); get_viewport()->set_use_xr(true); } } void VROrigin::on_xr_interface_added(StringName interface) { if (interface == "OpenXR") { setup_vr_interface(XRServer::get_singleton()->find_interface(interface)); XRServer::get_singleton()->disconnect("interface_added", callable_mp(this, &self_type::on_xr_interface_added)); } } void VROrigin::enter_tree() { Ref xrint{ XRServer::get_singleton()->find_interface("OpenXR") }; if (xrint.is_valid()) { setup_vr_interface(xrint); } else { XRServer::get_singleton()->connect("interface_added", callable_mp(this, &self_type::on_xr_interface_added)); } } void VROrigin::_notification(int what) { if (Engine::get_singleton()->is_editor_hint()) { return; } switch (what) { case NOTIFICATION_ENTER_TREE: enter_tree(); return; default: return; } }