feat: added VROrigin node
This commit is contained in:
parent
99ad06d2ae
commit
4cb2b334ab
6 changed files with 80 additions and 5 deletions
|
|
@ -3,6 +3,7 @@
|
|||
#include "client_node.h"
|
||||
#include "server_node.h"
|
||||
#include "ydi_networking.h"
|
||||
#include "ydi_vr_origin.h"
|
||||
#include <core/object/class_db.h>
|
||||
|
||||
void initialize_you_done_it_module(ModuleInitializationLevel p_level) {
|
||||
|
|
@ -12,6 +13,7 @@ void initialize_you_done_it_module(ModuleInitializationLevel p_level) {
|
|||
ClassDB::register_class<ServerNode>();
|
||||
ClassDB::register_class<ClientNode>();
|
||||
ClassDB::register_abstract_class<NetworkData>();
|
||||
ClassDB::register_class<VROrigin>();
|
||||
}
|
||||
|
||||
void uninitialize_you_done_it_module(ModuleInitializationLevel p_level) {
|
||||
|
|
|
|||
43
modules/you_done_it/ydi_vr_origin.cpp
Normal file
43
modules/you_done_it/ydi_vr_origin.cpp
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#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::start_vr(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") {
|
||||
start_vr(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()) {
|
||||
start_vr(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;
|
||||
}
|
||||
}
|
||||
17
modules/you_done_it/ydi_vr_origin.h
Normal file
17
modules/you_done_it/ydi_vr_origin.h
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include <scene/3d/xr/xr_nodes.h>
|
||||
#include <servers/xr/xr_interface.h>
|
||||
|
||||
class VROrigin : public XROrigin3D {
|
||||
GDCLASS(VROrigin, XROrigin3D);
|
||||
static void _bind_methods();
|
||||
|
||||
private:
|
||||
void start_vr(Ref<XRInterface> with_interface);
|
||||
void on_xr_interface_added(StringName interface);
|
||||
void enter_tree();
|
||||
|
||||
protected:
|
||||
void _notification(int what);
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue