├── .gitignore
├── .gitattributes
├── README.md
├── 3D GUI.csproj
├── project.godot
├── 3DUI.tscn
├── icon.svg.import
├── 3D GUI.sln
├── LICENSE
├── Player
├── Hand.cs
└── Player.tscn
├── icon.svg
├── main.tscn
├── UI3D.cs
└── openxr_action_map.tres
/.gitignore:
--------------------------------------------------------------------------------
1 | # Godot 4+ specific ignores
2 | .godot/
3 | .vs/
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Normalize EOL for all files that Git considers text files.
2 | * text=auto eol=lf
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Godot 3D UI for VR and mouse interactions
2 |
3 | This branch is a demo scene for a UI in Godot 4, that works with VR controllers and mouse pointer.
4 |
--------------------------------------------------------------------------------
/3D GUI.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 | net6.0
4 | true
5 | DGUI
6 |
7 |
--------------------------------------------------------------------------------
/project.godot:
--------------------------------------------------------------------------------
1 | ; Engine configuration file.
2 | ; It's best edited using the editor UI and not directly,
3 | ; since the parameters that go here are not all obvious.
4 | ;
5 | ; Format:
6 | ; [section] ; section goes between []
7 | ; param=value ; assign values to parameters
8 |
9 | config_version=5
10 |
11 | [application]
12 |
13 | config/name="3D GUI"
14 | run/main_scene="res://main.tscn"
15 | config/features=PackedStringArray("4.0", "C#", "Forward Plus")
16 | config/icon="res://icon.svg"
17 |
18 | [dotnet]
19 |
20 | project/assembly_name="3D GUI"
21 |
22 | [xr]
23 |
24 | openxr/enabled=true
25 | shaders/enabled=true
26 |
--------------------------------------------------------------------------------
/3DUI.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=4 format=3 uid="uid://bqq3lrdx6uy6n"]
2 |
3 | [ext_resource type="Script" path="res://UI3D.cs" id="1_rx6mn"]
4 |
5 | [sub_resource type="QuadMesh" id="QuadMesh_1tg5i"]
6 | resource_local_to_scene = true
7 |
8 | [sub_resource type="BoxShape3D" id="BoxShape3D_5tcmx"]
9 | size = Vector3(1, 1, 0.0746835)
10 |
11 | [node name="3DUI" type="Node3D" node_paths=PackedStringArray("quad", "area", "shape")]
12 | script = ExtResource("1_rx6mn")
13 | quad = NodePath("MeshInstance3D")
14 | area = NodePath("MeshInstance3D/Area3D")
15 | shape = NodePath("MeshInstance3D/Area3D/CollisionShape3D")
16 |
17 | [node name="MeshInstance3D" type="MeshInstance3D" parent="."]
18 | mesh = SubResource("QuadMesh_1tg5i")
19 |
20 | [node name="Area3D" type="Area3D" parent="MeshInstance3D"]
21 |
22 | [node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/Area3D"]
23 | shape = SubResource("BoxShape3D_5tcmx")
24 |
--------------------------------------------------------------------------------
/icon.svg.import:
--------------------------------------------------------------------------------
1 | [remap]
2 |
3 | importer="texture"
4 | type="CompressedTexture2D"
5 | uid="uid://8ty6fbvkdaek"
6 | path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
7 | metadata={
8 | "vram_texture": false
9 | }
10 |
11 | [deps]
12 |
13 | source_file="res://icon.svg"
14 | dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
15 |
16 | [params]
17 |
18 | compress/mode=0
19 | compress/high_quality=false
20 | compress/lossy_quality=0.7
21 | compress/hdr_compression=1
22 | compress/normal_map=0
23 | compress/channel_pack=0
24 | mipmaps/generate=false
25 | mipmaps/limit=-1
26 | roughness/mode=0
27 | roughness/src_normal=""
28 | process/fix_alpha_border=true
29 | process/premult_alpha=false
30 | process/normal_map_invert_y=false
31 | process/hdr_as_srgb=false
32 | process/hdr_clamp_exposure=false
33 | process/size_limit=0
34 | detect_3d/compress_to=1
35 | svg/scale=1.0
36 | editor/scale_with_editor_scale=false
37 | editor/convert_colors_with_editor_theme=false
38 |
--------------------------------------------------------------------------------
/3D GUI.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio 2012
3 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "3D GUI", "3D GUI.csproj", "{F28503A7-0D50-413A-861C-9AA320C2FC45}"
4 | EndProject
5 | Global
6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
7 | Debug|Any CPU = Debug|Any CPU
8 | ExportDebug|Any CPU = ExportDebug|Any CPU
9 | ExportRelease|Any CPU = ExportRelease|Any CPU
10 | EndGlobalSection
11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
12 | {F28503A7-0D50-413A-861C-9AA320C2FC45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
13 | {F28503A7-0D50-413A-861C-9AA320C2FC45}.Debug|Any CPU.Build.0 = Debug|Any CPU
14 | {F28503A7-0D50-413A-861C-9AA320C2FC45}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
15 | {F28503A7-0D50-413A-861C-9AA320C2FC45}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
16 | {F28503A7-0D50-413A-861C-9AA320C2FC45}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
17 | {F28503A7-0D50-413A-861C-9AA320C2FC45}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
18 | EndGlobalSection
19 | EndGlobal
20 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Mateusz Zdrzałek
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Player/Hand.cs:
--------------------------------------------------------------------------------
1 | using Godot;
2 |
3 | public partial class Hand : XRController3D
4 | {
5 | [Export]
6 | public RayCast3D raycastCursor;
7 |
8 | [Export]
9 | public MeshInstance3D raycastVisualizer;
10 |
11 | public override void _Ready()
12 | {
13 | ButtonPressed += HandleButtonPress;
14 |
15 | raycastVisualizer.Visible = false;
16 | }
17 |
18 | public UI3D hoveredUi;
19 |
20 | public override void _PhysicsProcess(double delta)
21 | {
22 | if (raycastCursor.IsColliding())
23 | {
24 | HandleRaycastCollision();
25 | }
26 | else if (hoveredUi != null || raycastVisualizer.Visible)
27 | {
28 | HideRaycastVisualizer();
29 | }
30 | }
31 |
32 | private void HideRaycastVisualizer()
33 | {
34 | raycastVisualizer.Visible = false;
35 | hoveredUi = null;
36 | }
37 |
38 | private void HandleRaycastCollision()
39 | {
40 | if (raycastCursor.GetCollider() is not Area3D area)
41 | {
42 | HideRaycastVisualizer();
43 | return;
44 | }
45 |
46 | if (area.GetParent() is not MeshInstance3D mesh)
47 | {
48 | HideRaycastVisualizer();
49 | return;
50 | }
51 |
52 | if (mesh.GetParent() is not UI3D ui)
53 | {
54 | HideRaycastVisualizer();
55 | return;
56 | }
57 |
58 | raycastVisualizer.Visible = true;
59 | hoveredUi = ui;
60 |
61 | var point = raycastCursor.GetCollisionPoint();
62 |
63 | ui.HandleSynteticMouseMotion(point);
64 | }
65 |
66 | private void HandleButtonPress(string name)
67 | {
68 | if (name == "trigger_click")
69 | {
70 | if (hoveredUi != null)
71 | {
72 | HandleUIClick();
73 | }
74 | }
75 | }
76 |
77 | private void HandleUIClick()
78 | {
79 | var point = raycastCursor.GetCollisionPoint();
80 |
81 | hoveredUi.HandleSynteticMouseClick(point, true);
82 | hoveredUi.HandleSynteticMouseClick(point, false);
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/Player/Player.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=3 format=3 uid="uid://d0gifc85g2m56"]
2 |
3 | [ext_resource type="Script" path="res://Player/Hand.cs" id="1_xs8um"]
4 |
5 | [sub_resource type="CylinderMesh" id="CylinderMesh_15nf6"]
6 | top_radius = 0.0
7 | bottom_radius = 0.01
8 |
9 | [node name="Player" type="XROrigin3D"]
10 |
11 | [node name="XRCamera3D" type="XRCamera3D" parent="."]
12 |
13 | [node name="Left" type="XRController3D" parent="." node_paths=PackedStringArray("raycastCursor", "raycastVisualizer")]
14 | tracker = &"left_hand"
15 | script = ExtResource("1_xs8um")
16 | raycastCursor = NodePath("RayCast3D")
17 | raycastVisualizer = NodePath("MeshInstance3D")
18 |
19 | [node name="RayCast3D" type="RayCast3D" parent="Left"]
20 | transform = Transform3D(1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0)
21 | target_position = Vector3(0, -10, 0)
22 | collide_with_areas = true
23 |
24 | [node name="MeshInstance3D" type="MeshInstance3D" parent="Left"]
25 | transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -1)
26 | mesh = SubResource("CylinderMesh_15nf6")
27 |
28 | [node name="CSGSphere3D" type="CSGSphere3D" parent="Left"]
29 | radius = 0.0472235
30 |
31 | [node name="Right" type="XRController3D" parent="." node_paths=PackedStringArray("raycastCursor", "raycastVisualizer")]
32 | tracker = &"right_hand"
33 | script = ExtResource("1_xs8um")
34 | raycastCursor = NodePath("RayCast3D")
35 | raycastVisualizer = NodePath("MeshInstance3D")
36 |
37 | [node name="RayCast3D" type="RayCast3D" parent="Right"]
38 | transform = Transform3D(1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0)
39 | target_position = Vector3(0, -10, 0)
40 | collide_with_areas = true
41 |
42 | [node name="MeshInstance3D" type="MeshInstance3D" parent="Right"]
43 | transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -1)
44 | mesh = SubResource("CylinderMesh_15nf6")
45 |
46 | [node name="CSGSphere3D" type="CSGSphere3D" parent="Right"]
47 | radius = 0.0472235
48 |
--------------------------------------------------------------------------------
/icon.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/main.tscn:
--------------------------------------------------------------------------------
1 | [gd_scene load_steps=6 format=3 uid="uid://bwdpu05wxjipo"]
2 |
3 | [ext_resource type="PackedScene" uid="uid://d0gifc85g2m56" path="res://Player/Player.tscn" id="1_mlqki"]
4 | [ext_resource type="PackedScene" uid="uid://bqq3lrdx6uy6n" path="res://3DUI.tscn" id="2_t18ui"]
5 |
6 | [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_mr74m"]
7 |
8 | [sub_resource type="Sky" id="Sky_uchpi"]
9 | sky_material = SubResource("ProceduralSkyMaterial_mr74m")
10 |
11 | [sub_resource type="Environment" id="Environment_gbcny"]
12 | background_mode = 2
13 | sky = SubResource("Sky_uchpi")
14 |
15 | [node name="main" type="Node3D"]
16 |
17 | [node name="CSGBox3D" type="CSGBox3D" parent="."]
18 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
19 | size = Vector3(10, 1, 10)
20 |
21 | [node name="Player" parent="." instance=ExtResource("1_mlqki")]
22 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
23 |
24 | [node name="3DUI" parent="." node_paths=PackedStringArray("subViewport") instance=ExtResource("2_t18ui")]
25 | transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -2)
26 | subViewport = NodePath("SubViewport")
27 |
28 | [node name="SubViewport" type="SubViewport" parent="3DUI"]
29 | size = Vector2i(1024, 1024)
30 |
31 | [node name="Control" type="Control" parent="3DUI/SubViewport"]
32 | layout_mode = 3
33 | anchors_preset = 8
34 | anchor_left = 0.5
35 | anchor_top = 0.5
36 | anchor_right = 0.5
37 | anchor_bottom = 0.5
38 | offset_left = -512.0
39 | offset_top = -512.0
40 | offset_right = 512.0
41 | offset_bottom = 512.0
42 | grow_horizontal = 2
43 | grow_vertical = 2
44 |
45 | [node name="Button" type="Button" parent="3DUI/SubViewport/Control"]
46 | layout_mode = 1
47 | anchors_preset = 8
48 | anchor_left = 0.5
49 | anchor_top = 0.5
50 | anchor_right = 0.5
51 | anchor_bottom = 0.5
52 | offset_left = -59.0
53 | offset_top = -61.0
54 | offset_right = 61.0
55 | offset_bottom = 59.0
56 | grow_horizontal = 2
57 | grow_vertical = 2
58 | text = "1"
59 |
60 | [node name="3DUI2" parent="." node_paths=PackedStringArray("subViewport") instance=ExtResource("2_t18ui")]
61 | transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1, 2)
62 | subViewport = NodePath("SubViewport")
63 |
64 | [node name="SubViewport" type="SubViewport" parent="3DUI2"]
65 | size = Vector2i(1024, 1024)
66 |
67 | [node name="Control2" type="Control" parent="3DUI2/SubViewport"]
68 | layout_mode = 3
69 | anchors_preset = 8
70 | anchor_left = 0.5
71 | anchor_top = 0.5
72 | anchor_right = 0.5
73 | anchor_bottom = 0.5
74 | offset_left = -512.0
75 | offset_top = -512.0
76 | offset_right = 512.0
77 | offset_bottom = 512.0
78 | grow_horizontal = 2
79 | grow_vertical = 2
80 |
81 | [node name="Button" type="Button" parent="3DUI2/SubViewport/Control2"]
82 | layout_mode = 1
83 | anchors_preset = 8
84 | anchor_left = 0.5
85 | anchor_top = 0.5
86 | anchor_right = 0.5
87 | anchor_bottom = 0.5
88 | offset_left = -59.0
89 | offset_top = -61.0
90 | offset_right = 61.0
91 | offset_bottom = 59.0
92 | grow_horizontal = 2
93 | grow_vertical = 2
94 | text = "2"
95 |
96 | [node name="3DUI3" parent="." node_paths=PackedStringArray("subViewport") instance=ExtResource("2_t18ui")]
97 | transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -2, 1, 0)
98 | subViewport = NodePath("SubViewport")
99 |
100 | [node name="SubViewport" type="SubViewport" parent="3DUI3"]
101 | size = Vector2i(1024, 1024)
102 |
103 | [node name="Control3" type="Control" parent="3DUI3/SubViewport"]
104 | layout_mode = 3
105 | anchors_preset = 8
106 | anchor_left = 0.5
107 | anchor_top = 0.5
108 | anchor_right = 0.5
109 | anchor_bottom = 0.5
110 | offset_left = -512.0
111 | offset_top = -512.0
112 | offset_right = 512.0
113 | offset_bottom = 512.0
114 | grow_horizontal = 2
115 | grow_vertical = 2
116 |
117 | [node name="Button" type="Button" parent="3DUI3/SubViewport/Control3"]
118 | layout_mode = 1
119 | anchors_preset = 8
120 | anchor_left = 0.5
121 | anchor_top = 0.5
122 | anchor_right = 0.5
123 | anchor_bottom = 0.5
124 | offset_left = -59.0
125 | offset_top = -61.0
126 | offset_right = 61.0
127 | offset_bottom = 59.0
128 | grow_horizontal = 2
129 | grow_vertical = 2
130 | text = "3"
131 |
132 | [node name="3DUI4" parent="." node_paths=PackedStringArray("subViewport") instance=ExtResource("2_t18ui")]
133 | transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 2, 1, 0)
134 | subViewport = NodePath("SubViewport")
135 |
136 | [node name="SubViewport" type="SubViewport" parent="3DUI4"]
137 | size = Vector2i(1024, 1024)
138 |
139 | [node name="Control4" type="Control" parent="3DUI4/SubViewport"]
140 | layout_mode = 3
141 | anchors_preset = 8
142 | anchor_left = 0.5
143 | anchor_top = 0.5
144 | anchor_right = 0.5
145 | anchor_bottom = 0.5
146 | offset_left = -512.0
147 | offset_top = -512.0
148 | offset_right = 512.0
149 | offset_bottom = 512.0
150 | grow_horizontal = 2
151 | grow_vertical = 2
152 |
153 | [node name="Button" type="Button" parent="3DUI4/SubViewport/Control4"]
154 | layout_mode = 1
155 | anchors_preset = 8
156 | anchor_left = 0.5
157 | anchor_top = 0.5
158 | anchor_right = 0.5
159 | anchor_bottom = 0.5
160 | offset_left = -59.0
161 | offset_top = -61.0
162 | offset_right = 61.0
163 | offset_bottom = 59.0
164 | grow_horizontal = 2
165 | grow_vertical = 2
166 | text = "4"
167 |
168 | [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
169 | environment = SubResource("Environment_gbcny")
170 |
--------------------------------------------------------------------------------
/UI3D.cs:
--------------------------------------------------------------------------------
1 | using Godot;
2 |
3 | public partial class UI3D : Node3D
4 | {
5 | [Export]
6 | public SubViewport subViewport;
7 |
8 | [Export]
9 | public MeshInstance3D quad;
10 |
11 | [Export]
12 | public Area3D area;
13 |
14 | [Export]
15 | public CollisionShape3D shape;
16 |
17 | private Vector2 quadSize;
18 | private bool isMouseHeld = false;
19 | private bool isMouseInside = false;
20 | private Vector3? lastMousePosition3D;
21 | private Vector2 lastMousePosition2D = Vector2.Zero;
22 |
23 | public override void _Ready()
24 | {
25 | area.MouseEntered += MouseEnteredArea;
26 |
27 | CalculateSizes();
28 | }
29 |
30 | private void CalculateSizes()
31 | {
32 | var mesh = (QuadMesh)quad.Mesh;
33 |
34 | var material = new StandardMaterial3D
35 | {
36 | AlbedoTexture = subViewport.GetTexture(),
37 | CullMode = BaseMaterial3D.CullModeEnum.Disabled
38 | };
39 |
40 | mesh.Material = material;
41 |
42 | mesh.Size = new Vector2(subViewport.Size.X / 1024f, subViewport.Size.Y / 1024f);
43 |
44 | (shape.Shape as BoxShape3D).Size = new Vector3(mesh.Size.X, mesh.Size.Y, .1f);
45 | }
46 |
47 | public override void _ExitTree()
48 | {
49 | area.MouseEntered -= MouseEnteredArea;
50 | }
51 |
52 | private void MouseEnteredArea()
53 | {
54 | isMouseInside = true;
55 | }
56 |
57 | public override void _UnhandledInput(InputEvent @event)
58 | {
59 | bool isMouseEvent = false;
60 |
61 | if (@event is InputEventMouse || @event is InputEventMouseButton || @event is InputEventMouseMotion)
62 | {
63 | isMouseEvent = true;
64 | }
65 |
66 | if (isMouseEvent && (isMouseInside || isMouseHeld))
67 | {
68 | HandleMouse((InputEventMouse)@event);
69 | }
70 | else if (!isMouseEvent)
71 | {
72 | subViewport.PushInput(@event);
73 | }
74 | }
75 |
76 | private void HandleMouse(InputEventMouse @event)
77 | {
78 | isMouseInside = FindMouse(@event.GlobalPosition, out Vector3 position);
79 |
80 | HandleMouseInPosition(@event, position);
81 | }
82 |
83 | public void HandleSynteticMouseMotion(Vector3 position)
84 | {
85 | var ev = new InputEventMouseMotion();
86 |
87 | isMouseInside = true;
88 |
89 | HandleMouseInPosition(ev, position);
90 | }
91 |
92 | public void HandleSynteticMouseClick(Vector3 position, bool pressed)
93 | {
94 | var ev = new InputEventMouseButton() { ButtonIndex = MouseButton.Left, Pressed = pressed };
95 |
96 | isMouseInside = true;
97 |
98 | HandleMouseInPosition(ev, position);
99 | }
100 |
101 | private void HandleMouseInPosition(InputEventMouse @event, Vector3 position)
102 | {
103 | quadSize = (quad.Mesh as QuadMesh).Size;
104 |
105 | if (@event is InputEventMouseButton)
106 | {
107 | isMouseHeld = @event.IsPressed();
108 | }
109 |
110 | Vector3 mousePosition3D;
111 |
112 | if (isMouseInside)
113 | {
114 | mousePosition3D = area.GlobalTransform.AffineInverse() * position;
115 | lastMousePosition3D = mousePosition3D;
116 | }
117 | else
118 | {
119 | if (lastMousePosition3D != null)
120 | {
121 | mousePosition3D = (Vector3)lastMousePosition3D;
122 | }
123 | else
124 | {
125 | mousePosition3D = Vector3.Zero;
126 | }
127 | }
128 |
129 | var mousePosition2D = new Vector2(mousePosition3D.X, -mousePosition3D.Y);
130 |
131 | mousePosition2D.X += quadSize.X / 2;
132 | mousePosition2D.Y += quadSize.Y / 2;
133 |
134 | mousePosition2D.X /= quadSize.X;
135 | mousePosition2D.Y /= quadSize.Y;
136 |
137 | mousePosition2D.X *= subViewport.Size.X;
138 | mousePosition2D.Y *= subViewport.Size.Y;
139 |
140 | @event.Position = mousePosition2D;
141 | @event.GlobalPosition = mousePosition2D;
142 |
143 | if (@event is InputEventMouseMotion)
144 | {
145 | (@event as InputEventMouseMotion).Relative = mousePosition2D - lastMousePosition2D;
146 | }
147 |
148 | lastMousePosition2D = mousePosition2D;
149 |
150 | subViewport.PushInput(@event);
151 | }
152 |
153 | private bool FindMouse(Vector2 globalPosition, out Vector3 position)
154 | {
155 | var camera = GetViewport().GetCamera3D();
156 |
157 | var from = camera.ProjectRayOrigin(globalPosition);
158 | var dist = FindFurtherDistanceTo(camera.Transform.Origin);
159 | var to = from + camera.ProjectRayNormal(globalPosition) * dist;
160 |
161 | var parameters = new PhysicsRayQueryParameters3D() { From = from, To = to, CollideWithAreas = true, CollisionMask = area.CollisionLayer, CollideWithBodies = false };
162 |
163 | var result = GetWorld3D().DirectSpaceState.IntersectRay(parameters);
164 |
165 | position = Vector3.Zero;
166 |
167 | if (result.Count > 0)
168 | {
169 | position = (Vector3)result["position"];
170 |
171 | return true;
172 | }
173 | else
174 | {
175 | return false;
176 | }
177 | }
178 |
179 | private float FindFurtherDistanceTo(Vector3 origin)
180 | {
181 | Vector3[] edges = new Vector3[] {
182 | area.ToGlobal(new Vector3(quadSize.X / 2, quadSize.Y / 2, 0)),
183 | area.ToGlobal(new Vector3(quadSize.X / 2, -quadSize.Y / 2, 0)),
184 | area.ToGlobal(new Vector3(-quadSize.X / 2, quadSize.Y / 2, 0)),
185 | area.ToGlobal(new Vector3(-quadSize.X / 2, -quadSize.Y / 2, 0)),
186 | };
187 |
188 | float farDistance = 0;
189 |
190 | foreach (var edge in edges)
191 | {
192 | var tempDistance = origin.DistanceTo(edge);
193 |
194 | if (tempDistance > farDistance)
195 | {
196 | farDistance = tempDistance;
197 | }
198 | }
199 |
200 | return farDistance;
201 | }
202 | }
203 |
--------------------------------------------------------------------------------
/openxr_action_map.tres:
--------------------------------------------------------------------------------
1 | [gd_resource type="OpenXRActionMap" load_steps=195 format=3 uid="uid://cd2ql48s13ag7"]
2 |
3 | [sub_resource type="OpenXRAction" id="OpenXRAction_55duo"]
4 | resource_name = "trigger"
5 | localized_name = "Trigger"
6 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
7 |
8 | [sub_resource type="OpenXRAction" id="OpenXRAction_jnvwu"]
9 | resource_name = "trigger_click"
10 | localized_name = "Trigger click"
11 | action_type = 0
12 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
13 |
14 | [sub_resource type="OpenXRAction" id="OpenXRAction_1saiv"]
15 | resource_name = "trigger_touch"
16 | localized_name = "Trigger touching"
17 | action_type = 0
18 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
19 |
20 | [sub_resource type="OpenXRAction" id="OpenXRAction_fapth"]
21 | resource_name = "grip"
22 | localized_name = "Grip"
23 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
24 |
25 | [sub_resource type="OpenXRAction" id="OpenXRAction_xrwu1"]
26 | resource_name = "grip_click"
27 | localized_name = "Grip click"
28 | action_type = 0
29 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
30 |
31 | [sub_resource type="OpenXRAction" id="OpenXRAction_arvfm"]
32 | resource_name = "grip_touch"
33 | localized_name = "Grip touching"
34 | action_type = 0
35 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
36 |
37 | [sub_resource type="OpenXRAction" id="OpenXRAction_6u0s6"]
38 | resource_name = "primary"
39 | localized_name = "Primary joystick/thumbstick/trackpad"
40 | action_type = 2
41 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
42 |
43 | [sub_resource type="OpenXRAction" id="OpenXRAction_l6pre"]
44 | resource_name = "primary_click"
45 | localized_name = "Primary joystick/thumbstick/trackpad click"
46 | action_type = 0
47 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
48 |
49 | [sub_resource type="OpenXRAction" id="OpenXRAction_6soob"]
50 | resource_name = "primary_touch"
51 | localized_name = "Primary joystick/thumbstick/trackpad touching"
52 | action_type = 0
53 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
54 |
55 | [sub_resource type="OpenXRAction" id="OpenXRAction_5uf3q"]
56 | resource_name = "secondary"
57 | localized_name = "Secondary joystick/thumbstick/trackpad"
58 | action_type = 2
59 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
60 |
61 | [sub_resource type="OpenXRAction" id="OpenXRAction_xfm72"]
62 | resource_name = "secondary_click"
63 | localized_name = "Secondary joystick/thumbstick/trackpad click"
64 | action_type = 0
65 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
66 |
67 | [sub_resource type="OpenXRAction" id="OpenXRAction_cuv1q"]
68 | resource_name = "secondary_touch"
69 | localized_name = "Secondary joystick/thumbstick/trackpad touching"
70 | action_type = 0
71 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
72 |
73 | [sub_resource type="OpenXRAction" id="OpenXRAction_u7std"]
74 | resource_name = "menu_button"
75 | localized_name = "Menu button"
76 | action_type = 0
77 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
78 |
79 | [sub_resource type="OpenXRAction" id="OpenXRAction_1wsno"]
80 | resource_name = "select_button"
81 | localized_name = "Select button"
82 | action_type = 0
83 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
84 |
85 | [sub_resource type="OpenXRAction" id="OpenXRAction_qe7om"]
86 | resource_name = "ax_button"
87 | localized_name = "A/X button"
88 | action_type = 0
89 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
90 |
91 | [sub_resource type="OpenXRAction" id="OpenXRAction_ijhea"]
92 | resource_name = "ax_touch"
93 | localized_name = "A/X touching"
94 | action_type = 0
95 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
96 |
97 | [sub_resource type="OpenXRAction" id="OpenXRAction_mhncd"]
98 | resource_name = "by_button"
99 | localized_name = "B/Y button"
100 | action_type = 0
101 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
102 |
103 | [sub_resource type="OpenXRAction" id="OpenXRAction_6rybi"]
104 | resource_name = "by_touch"
105 | localized_name = "B/Y touching"
106 | action_type = 0
107 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
108 |
109 | [sub_resource type="OpenXRAction" id="OpenXRAction_7bqr1"]
110 | resource_name = "default_pose"
111 | localized_name = "Default pose"
112 | action_type = 3
113 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right", "/user/vive_tracker_htcx/role/left_foot", "/user/vive_tracker_htcx/role/right_foot", "/user/vive_tracker_htcx/role/left_shoulder", "/user/vive_tracker_htcx/role/right_shoulder", "/user/vive_tracker_htcx/role/left_elbow", "/user/vive_tracker_htcx/role/right_elbow", "/user/vive_tracker_htcx/role/left_knee", "/user/vive_tracker_htcx/role/right_knee", "/user/vive_tracker_htcx/role/waist", "/user/vive_tracker_htcx/role/chest", "/user/vive_tracker_htcx/role/camera", "/user/vive_tracker_htcx/role/keyboard")
114 |
115 | [sub_resource type="OpenXRAction" id="OpenXRAction_pxc5c"]
116 | resource_name = "aim_pose"
117 | localized_name = "Aim pose"
118 | action_type = 3
119 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
120 |
121 | [sub_resource type="OpenXRAction" id="OpenXRAction_dsu2j"]
122 | resource_name = "grip_pose"
123 | localized_name = "Grip pose"
124 | action_type = 3
125 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
126 |
127 | [sub_resource type="OpenXRAction" id="OpenXRAction_1d1o3"]
128 | resource_name = "palm_pose"
129 | localized_name = "Palm pose"
130 | action_type = 3
131 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right")
132 |
133 | [sub_resource type="OpenXRAction" id="OpenXRAction_87dm3"]
134 | resource_name = "haptic"
135 | localized_name = "Haptic"
136 | action_type = 4
137 | toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right", "/user/vive_tracker_htcx/role/left_foot", "/user/vive_tracker_htcx/role/right_foot", "/user/vive_tracker_htcx/role/left_shoulder", "/user/vive_tracker_htcx/role/right_shoulder", "/user/vive_tracker_htcx/role/left_elbow", "/user/vive_tracker_htcx/role/right_elbow", "/user/vive_tracker_htcx/role/left_knee", "/user/vive_tracker_htcx/role/right_knee", "/user/vive_tracker_htcx/role/waist", "/user/vive_tracker_htcx/role/chest", "/user/vive_tracker_htcx/role/camera", "/user/vive_tracker_htcx/role/keyboard")
138 |
139 | [sub_resource type="OpenXRActionSet" id="OpenXRActionSet_kotkd"]
140 | resource_name = "godot"
141 | localized_name = "Godot action set"
142 | actions = [SubResource("OpenXRAction_55duo"), SubResource("OpenXRAction_jnvwu"), SubResource("OpenXRAction_1saiv"), SubResource("OpenXRAction_fapth"), SubResource("OpenXRAction_xrwu1"), SubResource("OpenXRAction_arvfm"), SubResource("OpenXRAction_6u0s6"), SubResource("OpenXRAction_l6pre"), SubResource("OpenXRAction_6soob"), SubResource("OpenXRAction_5uf3q"), SubResource("OpenXRAction_xfm72"), SubResource("OpenXRAction_cuv1q"), SubResource("OpenXRAction_u7std"), SubResource("OpenXRAction_1wsno"), SubResource("OpenXRAction_qe7om"), SubResource("OpenXRAction_ijhea"), SubResource("OpenXRAction_mhncd"), SubResource("OpenXRAction_6rybi"), SubResource("OpenXRAction_7bqr1"), SubResource("OpenXRAction_pxc5c"), SubResource("OpenXRAction_dsu2j"), SubResource("OpenXRAction_1d1o3"), SubResource("OpenXRAction_87dm3")]
143 |
144 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oeqi7"]
145 | action = SubResource("OpenXRAction_7bqr1")
146 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
147 |
148 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_iamh1"]
149 | action = SubResource("OpenXRAction_pxc5c")
150 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
151 |
152 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bej6k"]
153 | action = SubResource("OpenXRAction_dsu2j")
154 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
155 |
156 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ri3lx"]
157 | action = SubResource("OpenXRAction_1d1o3")
158 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
159 |
160 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qv7bb"]
161 | action = SubResource("OpenXRAction_u7std")
162 | paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click")
163 |
164 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6w7q6"]
165 | action = SubResource("OpenXRAction_1wsno")
166 | paths = PackedStringArray("/user/hand/left/input/select/click", "/user/hand/right/input/select/click")
167 |
168 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tqlaw"]
169 | action = SubResource("OpenXRAction_87dm3")
170 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
171 |
172 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_cr1r0"]
173 | interaction_profile_path = "/interaction_profiles/khr/simple_controller"
174 | bindings = [SubResource("OpenXRIPBinding_oeqi7"), SubResource("OpenXRIPBinding_iamh1"), SubResource("OpenXRIPBinding_bej6k"), SubResource("OpenXRIPBinding_ri3lx"), SubResource("OpenXRIPBinding_qv7bb"), SubResource("OpenXRIPBinding_6w7q6"), SubResource("OpenXRIPBinding_tqlaw")]
175 |
176 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c2tpp"]
177 | action = SubResource("OpenXRAction_7bqr1")
178 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
179 |
180 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ackn2"]
181 | action = SubResource("OpenXRAction_pxc5c")
182 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
183 |
184 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sd1o6"]
185 | action = SubResource("OpenXRAction_dsu2j")
186 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
187 |
188 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8o0q6"]
189 | action = SubResource("OpenXRAction_1d1o3")
190 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
191 |
192 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mto7t"]
193 | action = SubResource("OpenXRAction_u7std")
194 | paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click")
195 |
196 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_br78p"]
197 | action = SubResource("OpenXRAction_1wsno")
198 | paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click")
199 |
200 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_53cpx"]
201 | action = SubResource("OpenXRAction_55duo")
202 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
203 |
204 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_q2838"]
205 | action = SubResource("OpenXRAction_jnvwu")
206 | paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click")
207 |
208 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ytb1g"]
209 | action = SubResource("OpenXRAction_fapth")
210 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
211 |
212 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gmngx"]
213 | action = SubResource("OpenXRAction_xrwu1")
214 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
215 |
216 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hmrxc"]
217 | action = SubResource("OpenXRAction_6u0s6")
218 | paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad")
219 |
220 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6vwgn"]
221 | action = SubResource("OpenXRAction_l6pre")
222 | paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click")
223 |
224 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xqxtn"]
225 | action = SubResource("OpenXRAction_6soob")
226 | paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch")
227 |
228 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b5w1v"]
229 | action = SubResource("OpenXRAction_87dm3")
230 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
231 |
232 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_jno2c"]
233 | interaction_profile_path = "/interaction_profiles/htc/vive_controller"
234 | bindings = [SubResource("OpenXRIPBinding_c2tpp"), SubResource("OpenXRIPBinding_ackn2"), SubResource("OpenXRIPBinding_sd1o6"), SubResource("OpenXRIPBinding_8o0q6"), SubResource("OpenXRIPBinding_mto7t"), SubResource("OpenXRIPBinding_br78p"), SubResource("OpenXRIPBinding_53cpx"), SubResource("OpenXRIPBinding_q2838"), SubResource("OpenXRIPBinding_ytb1g"), SubResource("OpenXRIPBinding_gmngx"), SubResource("OpenXRIPBinding_hmrxc"), SubResource("OpenXRIPBinding_6vwgn"), SubResource("OpenXRIPBinding_xqxtn"), SubResource("OpenXRIPBinding_b5w1v")]
235 |
236 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u1xot"]
237 | action = SubResource("OpenXRAction_7bqr1")
238 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
239 |
240 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eixfh"]
241 | action = SubResource("OpenXRAction_pxc5c")
242 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
243 |
244 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_trftx"]
245 | action = SubResource("OpenXRAction_dsu2j")
246 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
247 |
248 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lilno"]
249 | action = SubResource("OpenXRAction_1d1o3")
250 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
251 |
252 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_thawq"]
253 | action = SubResource("OpenXRAction_u7std")
254 | paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click")
255 |
256 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1d3t1"]
257 | action = SubResource("OpenXRAction_55duo")
258 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
259 |
260 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f4knq"]
261 | action = SubResource("OpenXRAction_jnvwu")
262 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
263 |
264 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0s303"]
265 | action = SubResource("OpenXRAction_fapth")
266 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
267 |
268 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_suwtd"]
269 | action = SubResource("OpenXRAction_xrwu1")
270 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
271 |
272 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f53aa"]
273 | action = SubResource("OpenXRAction_6u0s6")
274 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
275 |
276 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wktm2"]
277 | action = SubResource("OpenXRAction_l6pre")
278 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
279 |
280 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_j6ife"]
281 | action = SubResource("OpenXRAction_5uf3q")
282 | paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad")
283 |
284 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sy3df"]
285 | action = SubResource("OpenXRAction_xfm72")
286 | paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click")
287 |
288 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2olvh"]
289 | action = SubResource("OpenXRAction_cuv1q")
290 | paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch")
291 |
292 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ogtiu"]
293 | action = SubResource("OpenXRAction_87dm3")
294 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
295 |
296 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_vqfsn"]
297 | interaction_profile_path = "/interaction_profiles/microsoft/motion_controller"
298 | bindings = [SubResource("OpenXRIPBinding_u1xot"), SubResource("OpenXRIPBinding_eixfh"), SubResource("OpenXRIPBinding_trftx"), SubResource("OpenXRIPBinding_lilno"), SubResource("OpenXRIPBinding_thawq"), SubResource("OpenXRIPBinding_1d3t1"), SubResource("OpenXRIPBinding_f4knq"), SubResource("OpenXRIPBinding_0s303"), SubResource("OpenXRIPBinding_suwtd"), SubResource("OpenXRIPBinding_f53aa"), SubResource("OpenXRIPBinding_wktm2"), SubResource("OpenXRIPBinding_j6ife"), SubResource("OpenXRIPBinding_sy3df"), SubResource("OpenXRIPBinding_2olvh"), SubResource("OpenXRIPBinding_ogtiu")]
299 |
300 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e51nl"]
301 | action = SubResource("OpenXRAction_7bqr1")
302 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
303 |
304 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d8qpq"]
305 | action = SubResource("OpenXRAction_pxc5c")
306 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
307 |
308 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qyij3"]
309 | action = SubResource("OpenXRAction_dsu2j")
310 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
311 |
312 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_onuh2"]
313 | action = SubResource("OpenXRAction_1d1o3")
314 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
315 |
316 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5ke0n"]
317 | action = SubResource("OpenXRAction_u7std")
318 | paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/system/click")
319 |
320 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hff1e"]
321 | action = SubResource("OpenXRAction_qe7om")
322 | paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click")
323 |
324 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lfmwr"]
325 | action = SubResource("OpenXRAction_ijhea")
326 | paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch")
327 |
328 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_36lx8"]
329 | action = SubResource("OpenXRAction_mhncd")
330 | paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click")
331 |
332 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qknea"]
333 | action = SubResource("OpenXRAction_6rybi")
334 | paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch")
335 |
336 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b41hm"]
337 | action = SubResource("OpenXRAction_55duo")
338 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
339 |
340 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3we4y"]
341 | action = SubResource("OpenXRAction_jnvwu")
342 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
343 |
344 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v188b"]
345 | action = SubResource("OpenXRAction_1saiv")
346 | paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch")
347 |
348 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6a2oq"]
349 | action = SubResource("OpenXRAction_fapth")
350 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
351 |
352 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sgvca"]
353 | action = SubResource("OpenXRAction_xrwu1")
354 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
355 |
356 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5f77b"]
357 | action = SubResource("OpenXRAction_6u0s6")
358 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
359 |
360 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bepqe"]
361 | action = SubResource("OpenXRAction_l6pre")
362 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
363 |
364 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xk0rj"]
365 | action = SubResource("OpenXRAction_6soob")
366 | paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch")
367 |
368 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ine6x"]
369 | action = SubResource("OpenXRAction_87dm3")
370 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
371 |
372 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_7x666"]
373 | interaction_profile_path = "/interaction_profiles/oculus/touch_controller"
374 | bindings = [SubResource("OpenXRIPBinding_e51nl"), SubResource("OpenXRIPBinding_d8qpq"), SubResource("OpenXRIPBinding_qyij3"), SubResource("OpenXRIPBinding_onuh2"), SubResource("OpenXRIPBinding_5ke0n"), SubResource("OpenXRIPBinding_hff1e"), SubResource("OpenXRIPBinding_lfmwr"), SubResource("OpenXRIPBinding_36lx8"), SubResource("OpenXRIPBinding_qknea"), SubResource("OpenXRIPBinding_b41hm"), SubResource("OpenXRIPBinding_3we4y"), SubResource("OpenXRIPBinding_v188b"), SubResource("OpenXRIPBinding_6a2oq"), SubResource("OpenXRIPBinding_sgvca"), SubResource("OpenXRIPBinding_5f77b"), SubResource("OpenXRIPBinding_bepqe"), SubResource("OpenXRIPBinding_xk0rj"), SubResource("OpenXRIPBinding_ine6x")]
375 |
376 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_frooh"]
377 | action = SubResource("OpenXRAction_7bqr1")
378 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
379 |
380 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e6tou"]
381 | action = SubResource("OpenXRAction_pxc5c")
382 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
383 |
384 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_s5kqq"]
385 | action = SubResource("OpenXRAction_dsu2j")
386 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
387 |
388 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mu076"]
389 | action = SubResource("OpenXRAction_1d1o3")
390 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
391 |
392 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3mv8m"]
393 | action = SubResource("OpenXRAction_1wsno")
394 | paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click")
395 |
396 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oviwv"]
397 | action = SubResource("OpenXRAction_u7std")
398 | paths = PackedStringArray("/user/hand/left/input/back/click", "/user/hand/right/input/back/click")
399 |
400 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h1f2f"]
401 | action = SubResource("OpenXRAction_qe7om")
402 | paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click")
403 |
404 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8q7si"]
405 | action = SubResource("OpenXRAction_ijhea")
406 | paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch")
407 |
408 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_themp"]
409 | action = SubResource("OpenXRAction_mhncd")
410 | paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click")
411 |
412 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ufof8"]
413 | action = SubResource("OpenXRAction_6rybi")
414 | paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch")
415 |
416 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tlal3"]
417 | action = SubResource("OpenXRAction_55duo")
418 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
419 |
420 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3f7yd"]
421 | action = SubResource("OpenXRAction_jnvwu")
422 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
423 |
424 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n8qpf"]
425 | action = SubResource("OpenXRAction_1saiv")
426 | paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch")
427 |
428 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rgj2u"]
429 | action = SubResource("OpenXRAction_fapth")
430 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
431 |
432 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r685s"]
433 | action = SubResource("OpenXRAction_xrwu1")
434 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
435 |
436 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5mn6o"]
437 | action = SubResource("OpenXRAction_6u0s6")
438 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
439 |
440 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ifynk"]
441 | action = SubResource("OpenXRAction_l6pre")
442 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
443 |
444 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ui5vu"]
445 | action = SubResource("OpenXRAction_6soob")
446 | paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch")
447 |
448 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bt1jn"]
449 | action = SubResource("OpenXRAction_87dm3")
450 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
451 |
452 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_cwq0f"]
453 | interaction_profile_path = "/interaction_profiles/pico/neo3_controller"
454 | bindings = [SubResource("OpenXRIPBinding_frooh"), SubResource("OpenXRIPBinding_e6tou"), SubResource("OpenXRIPBinding_s5kqq"), SubResource("OpenXRIPBinding_mu076"), SubResource("OpenXRIPBinding_3mv8m"), SubResource("OpenXRIPBinding_oviwv"), SubResource("OpenXRIPBinding_h1f2f"), SubResource("OpenXRIPBinding_8q7si"), SubResource("OpenXRIPBinding_themp"), SubResource("OpenXRIPBinding_ufof8"), SubResource("OpenXRIPBinding_tlal3"), SubResource("OpenXRIPBinding_3f7yd"), SubResource("OpenXRIPBinding_n8qpf"), SubResource("OpenXRIPBinding_rgj2u"), SubResource("OpenXRIPBinding_r685s"), SubResource("OpenXRIPBinding_5mn6o"), SubResource("OpenXRIPBinding_ifynk"), SubResource("OpenXRIPBinding_ui5vu"), SubResource("OpenXRIPBinding_bt1jn")]
455 |
456 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_g0tka"]
457 | action = SubResource("OpenXRAction_7bqr1")
458 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
459 |
460 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kpecv"]
461 | action = SubResource("OpenXRAction_pxc5c")
462 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
463 |
464 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6f4jl"]
465 | action = SubResource("OpenXRAction_dsu2j")
466 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
467 |
468 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y1ouc"]
469 | action = SubResource("OpenXRAction_1d1o3")
470 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
471 |
472 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_k1t68"]
473 | action = SubResource("OpenXRAction_u7std")
474 | paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click")
475 |
476 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_36pkj"]
477 | action = SubResource("OpenXRAction_qe7om")
478 | paths = PackedStringArray("/user/hand/left/input/a/click", "/user/hand/right/input/a/click")
479 |
480 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_x2qxd"]
481 | action = SubResource("OpenXRAction_ijhea")
482 | paths = PackedStringArray("/user/hand/left/input/a/touch", "/user/hand/right/input/a/touch")
483 |
484 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bntpd"]
485 | action = SubResource("OpenXRAction_mhncd")
486 | paths = PackedStringArray("/user/hand/left/input/b/click", "/user/hand/right/input/b/click")
487 |
488 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jhmxn"]
489 | action = SubResource("OpenXRAction_6rybi")
490 | paths = PackedStringArray("/user/hand/left/input/b/touch", "/user/hand/right/input/b/touch")
491 |
492 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_q5sml"]
493 | action = SubResource("OpenXRAction_55duo")
494 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
495 |
496 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jff28"]
497 | action = SubResource("OpenXRAction_jnvwu")
498 | paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click")
499 |
500 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_auyr4"]
501 | action = SubResource("OpenXRAction_1saiv")
502 | paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch")
503 |
504 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mso1o"]
505 | action = SubResource("OpenXRAction_fapth")
506 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
507 |
508 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_okjko"]
509 | action = SubResource("OpenXRAction_xrwu1")
510 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
511 |
512 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rnpfh"]
513 | action = SubResource("OpenXRAction_6u0s6")
514 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
515 |
516 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_84ovo"]
517 | action = SubResource("OpenXRAction_l6pre")
518 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
519 |
520 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_krp2a"]
521 | action = SubResource("OpenXRAction_6soob")
522 | paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch")
523 |
524 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_a0ioy"]
525 | action = SubResource("OpenXRAction_5uf3q")
526 | paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad")
527 |
528 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_87k7k"]
529 | action = SubResource("OpenXRAction_xfm72")
530 | paths = PackedStringArray("/user/hand/left/input/trackpad/force", "/user/hand/right/input/trackpad/force")
531 |
532 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_08hic"]
533 | action = SubResource("OpenXRAction_cuv1q")
534 | paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch")
535 |
536 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ylsb7"]
537 | action = SubResource("OpenXRAction_87dm3")
538 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
539 |
540 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_hl3my"]
541 | interaction_profile_path = "/interaction_profiles/valve/index_controller"
542 | bindings = [SubResource("OpenXRIPBinding_g0tka"), SubResource("OpenXRIPBinding_kpecv"), SubResource("OpenXRIPBinding_6f4jl"), SubResource("OpenXRIPBinding_y1ouc"), SubResource("OpenXRIPBinding_k1t68"), SubResource("OpenXRIPBinding_36pkj"), SubResource("OpenXRIPBinding_x2qxd"), SubResource("OpenXRIPBinding_bntpd"), SubResource("OpenXRIPBinding_jhmxn"), SubResource("OpenXRIPBinding_q5sml"), SubResource("OpenXRIPBinding_jff28"), SubResource("OpenXRIPBinding_auyr4"), SubResource("OpenXRIPBinding_mso1o"), SubResource("OpenXRIPBinding_okjko"), SubResource("OpenXRIPBinding_rnpfh"), SubResource("OpenXRIPBinding_84ovo"), SubResource("OpenXRIPBinding_krp2a"), SubResource("OpenXRIPBinding_a0ioy"), SubResource("OpenXRIPBinding_87k7k"), SubResource("OpenXRIPBinding_08hic"), SubResource("OpenXRIPBinding_ylsb7")]
543 |
544 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_a7vvt"]
545 | action = SubResource("OpenXRAction_7bqr1")
546 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
547 |
548 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pvupb"]
549 | action = SubResource("OpenXRAction_pxc5c")
550 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
551 |
552 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m8ikt"]
553 | action = SubResource("OpenXRAction_dsu2j")
554 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
555 |
556 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_iipm7"]
557 | action = SubResource("OpenXRAction_1d1o3")
558 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
559 |
560 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_babb3"]
561 | action = SubResource("OpenXRAction_u7std")
562 | paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click")
563 |
564 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_k5wpk"]
565 | action = SubResource("OpenXRAction_qe7om")
566 | paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click")
567 |
568 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ijmfd"]
569 | action = SubResource("OpenXRAction_mhncd")
570 | paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click")
571 |
572 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mc2ou"]
573 | action = SubResource("OpenXRAction_55duo")
574 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
575 |
576 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_07peu"]
577 | action = SubResource("OpenXRAction_jnvwu")
578 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
579 |
580 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f54se"]
581 | action = SubResource("OpenXRAction_fapth")
582 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
583 |
584 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n2fkb"]
585 | action = SubResource("OpenXRAction_xrwu1")
586 | paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value")
587 |
588 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dina5"]
589 | action = SubResource("OpenXRAction_6u0s6")
590 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
591 |
592 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nwohl"]
593 | action = SubResource("OpenXRAction_l6pre")
594 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
595 |
596 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6vvam"]
597 | action = SubResource("OpenXRAction_87dm3")
598 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
599 |
600 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_3mxfg"]
601 | interaction_profile_path = "/interaction_profiles/hp/mixed_reality_controller"
602 | bindings = [SubResource("OpenXRIPBinding_a7vvt"), SubResource("OpenXRIPBinding_pvupb"), SubResource("OpenXRIPBinding_m8ikt"), SubResource("OpenXRIPBinding_iipm7"), SubResource("OpenXRIPBinding_babb3"), SubResource("OpenXRIPBinding_k5wpk"), SubResource("OpenXRIPBinding_ijmfd"), SubResource("OpenXRIPBinding_mc2ou"), SubResource("OpenXRIPBinding_07peu"), SubResource("OpenXRIPBinding_f54se"), SubResource("OpenXRIPBinding_n2fkb"), SubResource("OpenXRIPBinding_dina5"), SubResource("OpenXRIPBinding_nwohl"), SubResource("OpenXRIPBinding_6vvam")]
603 |
604 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dpfrg"]
605 | action = SubResource("OpenXRAction_7bqr1")
606 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
607 |
608 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y0vu7"]
609 | action = SubResource("OpenXRAction_pxc5c")
610 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
611 |
612 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jmmp4"]
613 | action = SubResource("OpenXRAction_dsu2j")
614 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
615 |
616 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v3fw0"]
617 | action = SubResource("OpenXRAction_1d1o3")
618 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
619 |
620 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dfc5k"]
621 | action = SubResource("OpenXRAction_u7std")
622 | paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click")
623 |
624 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5f0ld"]
625 | action = SubResource("OpenXRAction_55duo")
626 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
627 |
628 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2cb3g"]
629 | action = SubResource("OpenXRAction_jnvwu")
630 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
631 |
632 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ugiub"]
633 | action = SubResource("OpenXRAction_fapth")
634 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
635 |
636 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4e4lx"]
637 | action = SubResource("OpenXRAction_xrwu1")
638 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
639 |
640 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_txvlg"]
641 | action = SubResource("OpenXRAction_6u0s6")
642 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
643 |
644 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d6wa8"]
645 | action = SubResource("OpenXRAction_l6pre")
646 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
647 |
648 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kweqv"]
649 | action = SubResource("OpenXRAction_5uf3q")
650 | paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad")
651 |
652 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2b7wk"]
653 | action = SubResource("OpenXRAction_xfm72")
654 | paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click")
655 |
656 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uno8g"]
657 | action = SubResource("OpenXRAction_cuv1q")
658 | paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch")
659 |
660 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h7h10"]
661 | action = SubResource("OpenXRAction_87dm3")
662 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
663 |
664 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_f70rd"]
665 | interaction_profile_path = "/interaction_profiles/samsung/odyssey_controller"
666 | bindings = [SubResource("OpenXRIPBinding_dpfrg"), SubResource("OpenXRIPBinding_y0vu7"), SubResource("OpenXRIPBinding_jmmp4"), SubResource("OpenXRIPBinding_v3fw0"), SubResource("OpenXRIPBinding_dfc5k"), SubResource("OpenXRIPBinding_5f0ld"), SubResource("OpenXRIPBinding_2cb3g"), SubResource("OpenXRIPBinding_ugiub"), SubResource("OpenXRIPBinding_4e4lx"), SubResource("OpenXRIPBinding_txvlg"), SubResource("OpenXRIPBinding_d6wa8"), SubResource("OpenXRIPBinding_kweqv"), SubResource("OpenXRIPBinding_2b7wk"), SubResource("OpenXRIPBinding_uno8g"), SubResource("OpenXRIPBinding_h7h10")]
667 |
668 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0n88j"]
669 | action = SubResource("OpenXRAction_7bqr1")
670 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
671 |
672 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ie2i8"]
673 | action = SubResource("OpenXRAction_pxc5c")
674 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
675 |
676 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_haa3o"]
677 | action = SubResource("OpenXRAction_dsu2j")
678 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
679 |
680 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gbcus"]
681 | action = SubResource("OpenXRAction_1d1o3")
682 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
683 |
684 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bvgno"]
685 | action = SubResource("OpenXRAction_u7std")
686 | paths = PackedStringArray("/user/hand/left/input/menu/click")
687 |
688 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jyqxm"]
689 | action = SubResource("OpenXRAction_1wsno")
690 | paths = PackedStringArray("/user/hand/left/input/system/click")
691 |
692 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_02nsk"]
693 | action = SubResource("OpenXRAction_qe7om")
694 | paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click")
695 |
696 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7om03"]
697 | action = SubResource("OpenXRAction_mhncd")
698 | paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click")
699 |
700 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ugewi"]
701 | action = SubResource("OpenXRAction_55duo")
702 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
703 |
704 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ywet6"]
705 | action = SubResource("OpenXRAction_jnvwu")
706 | paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click")
707 |
708 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xcp6e"]
709 | action = SubResource("OpenXRAction_fapth")
710 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
711 |
712 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_67ltt"]
713 | action = SubResource("OpenXRAction_xrwu1")
714 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
715 |
716 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6k77f"]
717 | action = SubResource("OpenXRAction_6u0s6")
718 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
719 |
720 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_djjya"]
721 | action = SubResource("OpenXRAction_l6pre")
722 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
723 |
724 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_olwxq"]
725 | action = SubResource("OpenXRAction_6soob")
726 | paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch")
727 |
728 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m7rrm"]
729 | action = SubResource("OpenXRAction_87dm3")
730 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
731 |
732 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_x1emj"]
733 | interaction_profile_path = "/interaction_profiles/htc/vive_cosmos_controller"
734 | bindings = [SubResource("OpenXRIPBinding_0n88j"), SubResource("OpenXRIPBinding_ie2i8"), SubResource("OpenXRIPBinding_haa3o"), SubResource("OpenXRIPBinding_gbcus"), SubResource("OpenXRIPBinding_bvgno"), SubResource("OpenXRIPBinding_jyqxm"), SubResource("OpenXRIPBinding_02nsk"), SubResource("OpenXRIPBinding_7om03"), SubResource("OpenXRIPBinding_ugewi"), SubResource("OpenXRIPBinding_ywet6"), SubResource("OpenXRIPBinding_xcp6e"), SubResource("OpenXRIPBinding_67ltt"), SubResource("OpenXRIPBinding_6k77f"), SubResource("OpenXRIPBinding_djjya"), SubResource("OpenXRIPBinding_olwxq"), SubResource("OpenXRIPBinding_m7rrm")]
735 |
736 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_84ftb"]
737 | action = SubResource("OpenXRAction_7bqr1")
738 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
739 |
740 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gxock"]
741 | action = SubResource("OpenXRAction_pxc5c")
742 | paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose")
743 |
744 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qq0uv"]
745 | action = SubResource("OpenXRAction_dsu2j")
746 | paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose")
747 |
748 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_smo66"]
749 | action = SubResource("OpenXRAction_1d1o3")
750 | paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose")
751 |
752 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_efo4h"]
753 | action = SubResource("OpenXRAction_u7std")
754 | paths = PackedStringArray("/user/hand/left/input/menu/click")
755 |
756 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3t4io"]
757 | action = SubResource("OpenXRAction_1wsno")
758 | paths = PackedStringArray("/user/hand/left/input/system/click")
759 |
760 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5hop2"]
761 | action = SubResource("OpenXRAction_qe7om")
762 | paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click")
763 |
764 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_djryn"]
765 | action = SubResource("OpenXRAction_mhncd")
766 | paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click")
767 |
768 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tc38c"]
769 | action = SubResource("OpenXRAction_55duo")
770 | paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value")
771 |
772 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y581x"]
773 | action = SubResource("OpenXRAction_jnvwu")
774 | paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click")
775 |
776 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_flop2"]
777 | action = SubResource("OpenXRAction_1saiv")
778 | paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch")
779 |
780 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c10qp"]
781 | action = SubResource("OpenXRAction_fapth")
782 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
783 |
784 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m6bsd"]
785 | action = SubResource("OpenXRAction_xrwu1")
786 | paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click")
787 |
788 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cpsqg"]
789 | action = SubResource("OpenXRAction_6u0s6")
790 | paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick")
791 |
792 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jj0p1"]
793 | action = SubResource("OpenXRAction_l6pre")
794 | paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click")
795 |
796 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7aetu"]
797 | action = SubResource("OpenXRAction_6soob")
798 | paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch")
799 |
800 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_iqw6v"]
801 | action = SubResource("OpenXRAction_cuv1q")
802 | paths = PackedStringArray("/user/hand/left/input/thumbrest/touch", "/user/hand/right/input/thumbrest/touch")
803 |
804 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4lofl"]
805 | action = SubResource("OpenXRAction_87dm3")
806 | paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic")
807 |
808 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_ewwvc"]
809 | interaction_profile_path = "/interaction_profiles/htc/vive_focus3_controller"
810 | bindings = [SubResource("OpenXRIPBinding_84ftb"), SubResource("OpenXRIPBinding_gxock"), SubResource("OpenXRIPBinding_qq0uv"), SubResource("OpenXRIPBinding_smo66"), SubResource("OpenXRIPBinding_efo4h"), SubResource("OpenXRIPBinding_3t4io"), SubResource("OpenXRIPBinding_5hop2"), SubResource("OpenXRIPBinding_djryn"), SubResource("OpenXRIPBinding_tc38c"), SubResource("OpenXRIPBinding_y581x"), SubResource("OpenXRIPBinding_flop2"), SubResource("OpenXRIPBinding_c10qp"), SubResource("OpenXRIPBinding_m6bsd"), SubResource("OpenXRIPBinding_cpsqg"), SubResource("OpenXRIPBinding_jj0p1"), SubResource("OpenXRIPBinding_7aetu"), SubResource("OpenXRIPBinding_iqw6v"), SubResource("OpenXRIPBinding_4lofl")]
811 |
812 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2h4ce"]
813 | action = SubResource("OpenXRAction_7bqr1")
814 | paths = PackedStringArray("/user/vive_tracker_htcx/role/left_foot/input/grip/pose", "/user/vive_tracker_htcx/role/right_foot/input/grip/pose", "/user/vive_tracker_htcx/role/left_shoulder/input/grip/pose", "/user/vive_tracker_htcx/role/right_shoulder/input/grip/pose", "/user/vive_tracker_htcx/role/left_elbow/input/grip/pose", "/user/vive_tracker_htcx/role/right_elbow/input/grip/pose", "/user/vive_tracker_htcx/role/left_knee/input/grip/pose", "/user/vive_tracker_htcx/role/right_knee/input/grip/pose", "/user/vive_tracker_htcx/role/waist/input/grip/pose", "/user/vive_tracker_htcx/role/chest/input/grip/pose", "/user/vive_tracker_htcx/role/camera/input/grip/pose", "/user/vive_tracker_htcx/role/keyboard/input/grip/pose")
815 |
816 | [sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_552k3"]
817 | action = SubResource("OpenXRAction_87dm3")
818 | paths = PackedStringArray("/user/vive_tracker_htcx/role/left_foot/output/haptic", "/user/vive_tracker_htcx/role/right_foot/output/haptic", "/user/vive_tracker_htcx/role/left_shoulder/output/haptic", "/user/vive_tracker_htcx/role/right_shoulder/output/haptic", "/user/vive_tracker_htcx/role/left_elbow/output/haptic", "/user/vive_tracker_htcx/role/right_elbow/output/haptic", "/user/vive_tracker_htcx/role/left_knee/output/haptic", "/user/vive_tracker_htcx/role/right_knee/output/haptic", "/user/vive_tracker_htcx/role/waist/output/haptic", "/user/vive_tracker_htcx/role/chest/output/haptic", "/user/vive_tracker_htcx/role/camera/output/haptic", "/user/vive_tracker_htcx/role/keyboard/output/haptic")
819 |
820 | [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_kgn04"]
821 | interaction_profile_path = "/interaction_profiles/htc/vive_tracker_htcx"
822 | bindings = [SubResource("OpenXRIPBinding_2h4ce"), SubResource("OpenXRIPBinding_552k3")]
823 |
824 | [resource]
825 | action_sets = [SubResource("OpenXRActionSet_kotkd")]
826 | interaction_profiles = [SubResource("OpenXRInteractionProfile_cr1r0"), SubResource("OpenXRInteractionProfile_jno2c"), SubResource("OpenXRInteractionProfile_vqfsn"), SubResource("OpenXRInteractionProfile_7x666"), SubResource("OpenXRInteractionProfile_cwq0f"), SubResource("OpenXRInteractionProfile_hl3my"), SubResource("OpenXRInteractionProfile_3mxfg"), SubResource("OpenXRInteractionProfile_f70rd"), SubResource("OpenXRInteractionProfile_x1emj"), SubResource("OpenXRInteractionProfile_ewwvc"), SubResource("OpenXRInteractionProfile_kgn04")]
827 |
--------------------------------------------------------------------------------