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);
|
||||
};
|
||||
|
|
@ -11,6 +11,7 @@ config_version=5
|
|||
[application]
|
||||
|
||||
config/name="you_done_it"
|
||||
run/main_scene="uid://b5m5h30gog3pu"
|
||||
config/features=PackedStringArray("4.5", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,9 @@ glow_enabled = true
|
|||
|
||||
[node name="Root" type="Node3D"]
|
||||
|
||||
[node name="VROrigin" parent="." instance=ExtResource("2_onqr8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0004169941, 0, -0.95417106)
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_bw6k5")
|
||||
|
||||
|
|
@ -48,8 +51,5 @@ directional_shadow_mode = 0
|
|||
directional_shadow_fade_start = 0.965
|
||||
directional_shadow_max_distance = 20.0
|
||||
|
||||
[node name="XROrigin3D" parent="." instance=ExtResource("2_onqr8")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0004169941, 0, -0.95417106)
|
||||
|
||||
[node name="Block Out VR" parent="." instance=ExtResource("1_w5aja")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.27989578, 0, 1.4924412)
|
||||
|
|
|
|||
|
|
@ -1,13 +1,25 @@
|
|||
[gd_scene format=3 uid="uid://ctf3dsro4aqon"]
|
||||
[gd_scene load_steps=2 format=3 uid="uid://ctf3dsro4aqon"]
|
||||
|
||||
[node name="XROrigin3D" type="XROrigin3D"]
|
||||
[sub_resource type="CylinderMesh" id="CylinderMesh_y71p3"]
|
||||
top_radius = 0.05
|
||||
bottom_radius = 0.05
|
||||
height = 0.05
|
||||
|
||||
[node name="VROrigin" type="VROrigin"]
|
||||
|
||||
[node name="XRCamera3D" type="XRCamera3D" parent="."]
|
||||
current = true
|
||||
|
||||
[node name="LeftController" type="XRController3D" parent="."]
|
||||
tracker = &"left_hand"
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="LeftController"]
|
||||
mesh = SubResource("CylinderMesh_y71p3")
|
||||
|
||||
[node name="RightController" type="XRController3D" parent="."]
|
||||
tracker = &"right_hand"
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="RightController"]
|
||||
mesh = SubResource("CylinderMesh_y71p3")
|
||||
|
||||
[node name="ClientNode" type="ClientNode" parent="."]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue