YouDunIt/modules/you_done_it/ydi_vr_origin.cpp

43 lines
1.2 KiB
C++

#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<XRInterface> 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<XRInterface> 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;
}
}