diff --git a/.github/workflows/publish-demo-on-push.yaml b/.github/workflows/publish-demo-on-push.yaml index d76d379..c9a5d71 100644 --- a/.github/workflows/publish-demo-on-push.yaml +++ b/.github/workflows/publish-demo-on-push.yaml @@ -14,10 +14,10 @@ on: # Environment variables env: # Configure Godot version - GODOT_VERSION: 4.3.0 + GODOT_VERSION: 4.6.1 # OpenXR Vendors version - OPENXR_VENDORS_VERSION: 3.1.1-stable + OPENXR_VENDORS_VERSION: 4.3.0-stable # Butler API Key (comment to disable) BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }} diff --git a/README.md b/README.md index f2dd6b6..12f1d71 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,8 @@ Official releases are tagged and can be found [here](https://github.com/GodotVR/ The following branches are in active development: | Branch | Description | Godot version | |----------|-------------------------------|-----------------| -| main | Current development branch | Godot 4.2+ | +| main | Current development branch | Godot 4.6+ | +| 4.2 | Godot 4.2 development branch | Godot 4.2-4.5 | | 4.1 | Godot 4.1 development branch | Godot 4.1 | | 3.x | Godot 3.x development branch | Godot 3.5+ | @@ -26,6 +27,10 @@ This project uses the following assets: - [Godot XR Tools](https://godotengine.org/asset-library/asset/1515) - [OpenXR Vendors](https://github.com/GodotVR/godot_openxr_vendors) +> [!NOTE] +> OpenXR Vendors is not included in the repo but will be downloaded by CI scripts. +> When cloning this repository, manually download the version correct for the version of +> Godot you are using. # Getting Started diff --git a/VERSIONS.md b/VERSIONS.md index 2eac2c6..8c7e7b3 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -1,3 +1,8 @@ +# 4.5.0 + - Upgrade Godot XR Tools to 4.5.1 + - Upgrade to using Godot 4.6 + - Update CI accordingly + # 4.4.0 - Upgrade Godot XR Tools to 4.4.0 - Add CI publish scripts diff --git a/addons/godot-xr-tools/CONTRIBUTORS.md b/addons/godot-xr-tools/CONTRIBUTORS.md index 21c8da6..032703f 100644 --- a/addons/godot-xr-tools/CONTRIBUTORS.md +++ b/addons/godot-xr-tools/CONTRIBUTORS.md @@ -5,18 +5,35 @@ The main author of this project is [Bastiaan Olij](https://github.com/BastiaanOl https://github.com/GodotVR/godot-xr-tools Other people who have helped out by submitting fixes, enhancements, etc are: -- [Florian Jung](https://github.com/Windfisch) -- [RMKD](https://github.com/RMKD) - [Alessandro Schillaci](https://github.com/silverslade) -- [jtank4](https://github.com/jtank4) -- [Malcolm Nixon](https://github.com/malcolmnixon) -- [Sam Sarette](https://github.com/lunarcloud) -- [Henodude](https://github.com/Henodude) -- [Miodrag Sejic](https://github.com/DigitalN8m4r3) +- [Andy Maloney](https://github.com/asmaloney) - [Carlos Padial](https://github.com/surreal6) +- [Cube Whidden](https://github.com/septuagint) +- [Daniel Espinosa](https://github.com/esodan) +- [Daniel Kinsman](https://github.com/DanielKinsman) +- [Dave Hakim](https://github.com/davehakim) +- [David Snopek](https://github.com/dsnopek) +- [Florian Jung](https://github.com/Windfisch) +- [Gaël Fenet-Garde](https://github.com/GaelFG-Anderon) +- [Gavin John](https://github.com/Pandapip1) +- [Henodude](https://github.com/Henodude) +- [Ian Young](https://github.com/duffrecords) +- [Jamie-Pate](https://github.com/jamie-pate) +- [Jason Morgado](https://github.com/jasonmorgado) +- [jtank4](https://github.com/jtank4) - [Julian Todd](https://github.com/goatchurchprime) - [Kai Tödter](https://github.com/toedter) +- [Malcolm Nixon](https://github.com/malcolmnixon) +- [Miodrag Sejic](https://github.com/DigitalN8m4r3) +- [NetroScript](https://github.com/NetroScript) +- [Pietru2004](https://github.com/pietru2004) +- [Rahul Ghosh](https://github.com/SYBIOTE) +- [RMKD](https://github.com/RMKD) - [Sam Sarette](https://github.com/lunarcloud) - [Squidt](https://github.com/squidt) +- [Suriya Palaniswami](https://github.com/Suriya-Palaniswami) +- [Tanner Probst](https://github.com/Ritter7124) +- [Teddybear08](https://github.com/teddybear082) +- [Tomaaron](https://github.com/tomaaron) Want to be on this list? We would love your help. diff --git a/addons/godot-xr-tools/VERSIONS.md b/addons/godot-xr-tools/VERSIONS.md index 1eb7684..e743707 100644 --- a/addons/godot-xr-tools/VERSIONS.md +++ b/addons/godot-xr-tools/VERSIONS.md @@ -1,3 +1,22 @@ +# 4.5.0 +- Minimum Godot version changed to 4.4 +- Added UIDs for all classes +- Improve material handling in Viewport2Din3D +- Improve performance by avoiding force_update_transform on grab driver +- Don't trigger haptics when primary interface is null +- Fix 'create_snap' desync +- Fix grab with scaled pickables by swapping inverse for affine_inverse +- Fix "UP" direction in player movement +- Gracefully handle freed objects with collision exceptions +- Added support for using grip or palm pose instead of aim pose +- Various bits of code cleanup +- Improved player body collisions so players can move over tables +- Fix: Stash sound should not play on scene load (minor breaking) +- Fixed node process mode issue for XRToolsInteractableAreaButton +- Renamed controler to controller in various classes (minor breaking) +- Demo now has an optional spectator view for PCVR +- Fixed issue with setting the ranged collision mask + # 4.4.0 - Minimum Godot version changed to 4.2 - Add pickable action_released signal diff --git a/addons/godot-xr-tools/audio/area_audio.gd b/addons/godot-xr-tools/audio/area_audio.gd index fcd55ce..b824fa9 100644 --- a/addons/godot-xr-tools/audio/area_audio.gd +++ b/addons/godot-xr-tools/audio/area_audio.gd @@ -18,8 +18,8 @@ extends AudioStreamPlayer3D # Add support for is_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsAreaAudio" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsAreaAudio" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/audio/area_audio.gd.uid b/addons/godot-xr-tools/audio/area_audio.gd.uid new file mode 100644 index 0000000..2d32f8a --- /dev/null +++ b/addons/godot-xr-tools/audio/area_audio.gd.uid @@ -0,0 +1 @@ +uid://bmqrm3opvrbgq diff --git a/addons/godot-xr-tools/audio/area_audio.tscn b/addons/godot-xr-tools/audio/area_audio.tscn index f58aa33..e9295dc 100644 --- a/addons/godot-xr-tools/audio/area_audio.tscn +++ b/addons/godot-xr-tools/audio/area_audio.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://duqehif60vcjg"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/audio/area_audio.gd" id="1_q1jr0"] +[ext_resource type="Script" uid="uid://bmqrm3opvrbgq" path="res://addons/godot-xr-tools/audio/area_audio.gd" id="1_q1jr0"] [node name="AreaAudio" type="AudioStreamPlayer3D"] unit_size = 3.0 diff --git a/addons/godot-xr-tools/audio/area_audio_type.gd.uid b/addons/godot-xr-tools/audio/area_audio_type.gd.uid new file mode 100644 index 0000000..8b9a811 --- /dev/null +++ b/addons/godot-xr-tools/audio/area_audio_type.gd.uid @@ -0,0 +1 @@ +uid://bg0vquffh1cr4 diff --git a/addons/godot-xr-tools/audio/pickable_audio.gd b/addons/godot-xr-tools/audio/pickable_audio.gd index baec23a..fe024d2 100644 --- a/addons/godot-xr-tools/audio/pickable_audio.gd +++ b/addons/godot-xr-tools/audio/pickable_audio.gd @@ -21,8 +21,8 @@ extends AudioStreamPlayer3D # Add support for is_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsPickableAudio" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsPickableAudio" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/audio/pickable_audio.gd.uid b/addons/godot-xr-tools/audio/pickable_audio.gd.uid new file mode 100644 index 0000000..c8c5238 --- /dev/null +++ b/addons/godot-xr-tools/audio/pickable_audio.gd.uid @@ -0,0 +1 @@ +uid://cl6ayr6145cwi diff --git a/addons/godot-xr-tools/audio/pickable_audio.tscn b/addons/godot-xr-tools/audio/pickable_audio.tscn index 3b2a8f9..95ca87a 100644 --- a/addons/godot-xr-tools/audio/pickable_audio.tscn +++ b/addons/godot-xr-tools/audio/pickable_audio.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bikkxsbo8x7sd"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/audio/pickable_audio.gd" id="1_cfg1k"] +[ext_resource type="Script" uid="uid://cl6ayr6145cwi" path="res://addons/godot-xr-tools/audio/pickable_audio.gd" id="1_cfg1k"] [node name="PickableAudio" type="AudioStreamPlayer3D"] unit_size = 3.0 diff --git a/addons/godot-xr-tools/audio/pickable_audio_type.gd.uid b/addons/godot-xr-tools/audio/pickable_audio_type.gd.uid new file mode 100644 index 0000000..d68c1e5 --- /dev/null +++ b/addons/godot-xr-tools/audio/pickable_audio_type.gd.uid @@ -0,0 +1 @@ +uid://dcdtk842mf1h5 diff --git a/addons/godot-xr-tools/audio/surface_audio.gd b/addons/godot-xr-tools/audio/surface_audio.gd index 9d339c4..bf86f8f 100644 --- a/addons/godot-xr-tools/audio/surface_audio.gd +++ b/addons/godot-xr-tools/audio/surface_audio.gd @@ -16,8 +16,8 @@ extends Node # Add support for is_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsSurfaceAudio" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsSurfaceAudio" # This method checks for configuration issues. diff --git a/addons/godot-xr-tools/audio/surface_audio.gd.uid b/addons/godot-xr-tools/audio/surface_audio.gd.uid new file mode 100644 index 0000000..b4f8349 --- /dev/null +++ b/addons/godot-xr-tools/audio/surface_audio.gd.uid @@ -0,0 +1 @@ +uid://mc4dmfy38nqa diff --git a/addons/godot-xr-tools/audio/surface_audio.tscn b/addons/godot-xr-tools/audio/surface_audio.tscn index 0bae98f..79f43f8 100644 --- a/addons/godot-xr-tools/audio/surface_audio.tscn +++ b/addons/godot-xr-tools/audio/surface_audio.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://c8jtmtuihfujs"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/audio/surface_audio.gd" id="1"] +[ext_resource type="Script" uid="uid://mc4dmfy38nqa" path="res://addons/godot-xr-tools/audio/surface_audio.gd" id="1"] [node name="SurfaceAudio" type="Node"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/audio/surface_audio_type.gd.uid b/addons/godot-xr-tools/audio/surface_audio_type.gd.uid new file mode 100644 index 0000000..4eb2255 --- /dev/null +++ b/addons/godot-xr-tools/audio/surface_audio_type.gd.uid @@ -0,0 +1 @@ +uid://bsk5funnj0084 diff --git a/addons/godot-xr-tools/desktop-support/controler_hider.tscn b/addons/godot-xr-tools/desktop-support/controler_hider.tscn deleted file mode 100644 index b9c6e9b..0000000 --- a/addons/godot-xr-tools/desktop-support/controler_hider.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://chb848dtavews"] - -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/controler_hider.gd" id="1_6xusf"] - -[node name="ControlerHider" type="Node"] -script = ExtResource("1_6xusf") diff --git a/addons/godot-xr-tools/desktop-support/controler_hider.gd b/addons/godot-xr-tools/desktop-support/controller_hider.gd similarity index 87% rename from addons/godot-xr-tools/desktop-support/controler_hider.gd rename to addons/godot-xr-tools/desktop-support/controller_hider.gd index 4863e4d..3cfcd6f 100644 --- a/addons/godot-xr-tools/desktop-support/controler_hider.gd +++ b/addons/godot-xr-tools/desktop-support/controller_hider.gd @@ -1,11 +1,11 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/function.svg") -class_name XRToolsDesktopControlerHider +class_name XRToolsDesktopControllerHider extends Node -## XR Tools Controler Hider +## XR Tools Controller Hider ## -## This script hides controler if XR is not active. +## This script hides controller if XR is not active. var _pointer_disabler := false var _last_xr_active := true @@ -26,8 +26,8 @@ func _ready() -> void: _pointer_disabler = true # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopControlerHider" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopControllerHider" func _process(_delta: float) -> void: if Engine.is_editor_hint() or !is_inside_tree(): diff --git a/addons/godot-xr-tools/desktop-support/controller_hider.gd.uid b/addons/godot-xr-tools/desktop-support/controller_hider.gd.uid new file mode 100644 index 0000000..f48eb21 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/controller_hider.gd.uid @@ -0,0 +1 @@ +uid://hyiqt6os3ud6 diff --git a/addons/godot-xr-tools/desktop-support/controller_hider.tscn b/addons/godot-xr-tools/desktop-support/controller_hider.tscn new file mode 100644 index 0000000..ba64957 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/controller_hider.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://chb848dtavews"] + +[ext_resource type="Script" uid="uid://hyiqt6os3ud6" path="res://addons/godot-xr-tools/desktop-support/controller_hider.gd" id="1_6xusf"] + +[node name="ControllerHider" type="Node"] +script = ExtResource("1_6xusf") diff --git a/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd b/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd index 017708e..29229b2 100644 --- a/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd +++ b/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd @@ -117,8 +117,8 @@ var _world_scale : float = 1.0 "XRToolsStaging"),"StartXR","Node") ## Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopFunctionPointer" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopFunctionPointer" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd.uid b/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd.uid new file mode 100644 index 0000000..16ee023 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd.uid @@ -0,0 +1 @@ +uid://dycttwespa005 diff --git a/addons/godot-xr-tools/desktop-support/function_desktop_pointer.tscn b/addons/godot-xr-tools/desktop-support/function_desktop_pointer.tscn index b3ea384..9f04262 100644 --- a/addons/godot-xr-tools/desktop-support/function_desktop_pointer.tscn +++ b/addons/godot-xr-tools/desktop-support/function_desktop_pointer.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=6 format=3 uid="uid://42xbeno6pt3y"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/pointer.tres" id="1"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd" id="1_fkfo7"] +[ext_resource type="Script" uid="uid://dycttwespa005" path="res://addons/godot-xr-tools/desktop-support/function_desktop_pointer.gd" id="1_fkfo7"] [sub_resource type="BoxMesh" id="BoxMesh_ctrty"] resource_local_to_scene = true diff --git a/addons/godot-xr-tools/desktop-support/mouse_capture.gd b/addons/godot-xr-tools/desktop-support/mouse_capture.gd index 1ce4fcf..99d3915 100644 --- a/addons/godot-xr-tools/desktop-support/mouse_capture.gd +++ b/addons/godot-xr-tools/desktop-support/mouse_capture.gd @@ -26,8 +26,8 @@ extends XRToolsMovementProvider # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopMouseCapture" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopMouseCapture" or super(xr_name) # Perform jump movement @@ -48,4 +48,3 @@ func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: elif (!xr_start_node.is_xr_active() and capture): Input.mouse_mode=Input.MOUSE_MODE_CAPTURED return - diff --git a/addons/godot-xr-tools/desktop-support/mouse_capture.gd.uid b/addons/godot-xr-tools/desktop-support/mouse_capture.gd.uid new file mode 100644 index 0000000..5d8e525 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/mouse_capture.gd.uid @@ -0,0 +1 @@ +uid://71ls6bjad8tp diff --git a/addons/godot-xr-tools/desktop-support/mouse_capture.tscn b/addons/godot-xr-tools/desktop-support/mouse_capture.tscn index 17ed501..af12333 100644 --- a/addons/godot-xr-tools/desktop-support/mouse_capture.tscn +++ b/addons/godot-xr-tools/desktop-support/mouse_capture.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bkse5rxsx5tb3"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/mouse_capture.gd" id="1_po4v8"] +[ext_resource type="Script" uid="uid://71ls6bjad8tp" path="res://addons/godot-xr-tools/desktop-support/mouse_capture.gd" id="1_po4v8"] -[node name="MouseCapture" type="Node" groups=["movement_providers"]] +[node name="MouseCapture" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_po4v8") diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd b/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd index 6946f76..d5e9505 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd @@ -47,8 +47,8 @@ var _crouch_button_down : bool = false # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementCrouch" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementCrouch" or super(xr_name) # Perform jump movement @@ -81,4 +81,3 @@ func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: player_body.override_player_height(self, crouch_height) else: player_body.override_player_height(self) - diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd.uid b/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd.uid new file mode 100644 index 0000000..4ced023 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd.uid @@ -0,0 +1 @@ +uid://onavg33r434i diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.tscn b/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.tscn index c05da47..ee4275f 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_crouch.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://d2iqcc25yvk61"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd" id="1_4rbnc"] +[ext_resource type="Script" uid="uid://onavg33r434i" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_crouch.gd" id="1_4rbnc"] -[node name="MovementDesktopCrouch" type="Node" groups=["movement_providers"]] +[node name="MovementDesktopCrouch" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_4rbnc") diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd b/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd index 9f810eb..edcf9e0 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd @@ -36,8 +36,8 @@ extends XRToolsMovementProvider # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopMovementDirect" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopMovementDirect" or super(xr_name) # Perform jump movement diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd.uid b/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd.uid new file mode 100644 index 0000000..4d61317 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd.uid @@ -0,0 +1 @@ +uid://ciqexxqb7lxs4 diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_direct.tscn b/addons/godot-xr-tools/desktop-support/movement_desktop_direct.tscn index b9e1d27..ae84038 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_direct.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_direct.tscn @@ -1,7 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://6uusxts6n6gm"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd" id="1_e8v0q"] +[ext_resource type="Script" uid="uid://ciqexxqb7lxs4" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_direct.gd" id="1_e8v0q"] -[node name="MovementDesktopDirect" type="Node" groups=["movement_providers"]] +[node name="MovementDesktopDirect" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_e8v0q") -strafe = true diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd b/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd index 13e623d..461e121 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd @@ -79,8 +79,8 @@ var _flight_button : bool = false # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopMovementFlight" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopMovementFlight" or super(xr_name) func _ready(): diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd.uid b/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd.uid new file mode 100644 index 0000000..3de932d --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd.uid @@ -0,0 +1 @@ +uid://te6vlh1cbi7o diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_flight.tscn b/addons/godot-xr-tools/desktop-support/movement_desktop_flight.tscn index 3bd0bc2..ab8ec6d 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_flight.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_flight.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://cfa5gsol863rv"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd" id="1_exmlf"] +[ext_resource type="Script" uid="uid://te6vlh1cbi7o" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_flight.gd" id="1_exmlf"] -[node name="MovementDesktopFlight" type="Node" groups=["movement_providers"]] +[node name="MovementDesktopFlight" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_exmlf") diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd b/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd index da62168..84654db 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd @@ -28,8 +28,8 @@ extends XRToolsMovementProvider # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopMovementJump" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopMovementJump" or super(xr_name) # Perform jump movement @@ -41,4 +41,3 @@ func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: # Request jump if the button is pressed if Input.is_action_pressed(jump_button_action): player_body.request_jump() - diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd.uid b/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd.uid new file mode 100644 index 0000000..66dea75 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd.uid @@ -0,0 +1 @@ +uid://b0l4n05yrf11b diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_jump.tscn b/addons/godot-xr-tools/desktop-support/movement_desktop_jump.tscn index 4488c9a..0ad0cfc 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_jump.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_jump.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dluln6777mmh3"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd" id="1_tccpc"] +[ext_resource type="Script" uid="uid://b0l4n05yrf11b" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_jump.gd" id="1_tccpc"] -[node name="MovementDesktopJump" type="Node" groups=["movement_providers"]] +[node name="MovementDesktopJump" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_tccpc") diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd b/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd index 783a768..ade07ae 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd @@ -60,8 +60,8 @@ var _direct_original_max_speed : float = 0.0 # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopMovementSprint" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopMovementSprint" or super(xr_name) func _ready(): diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd.uid b/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd.uid new file mode 100644 index 0000000..f76a08a --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd.uid @@ -0,0 +1 @@ +uid://dskqlyywoylkm diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.tscn b/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.tscn index 59166d7..69cc22f 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_sprint.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dgm5op1hausw5"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd" id="1_md0f7"] +[ext_resource type="Script" uid="uid://dskqlyywoylkm" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_sprint.gd" id="1_md0f7"] -[node name="MovementDesktopSprint" type="Node" groups=["movement_providers"]] +[node name="MovementDesktopSprint" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_md0f7") diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd index 33f810b..83aed22 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd @@ -59,8 +59,8 @@ var _turn_step : float = 0.0 # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsDesktopMovementTurn" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsDesktopMovementTurn" or super(xr_name) func _unhandled_input(event): if !enabled: @@ -120,7 +120,7 @@ func physics_movement(delta: float, player_body: XRToolsPlayerBody, _disabled: b # Test if snap turning should be used func _snap_turning(): - #temp removal - IDK if normal controler will be considered to have this as use + #temp removal - IDK if normal controller will be considered to have this as use return false # match turn_mode: # TurnMode.SNAP: diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd.uid b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd.uid new file mode 100644 index 0000000..84c288e --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd.uid @@ -0,0 +1 @@ +uid://bjqk58f7j3hgl diff --git a/addons/godot-xr-tools/desktop-support/movement_desktop_turn.tscn b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.tscn index 41c8fb8..d4b0312 100644 --- a/addons/godot-xr-tools/desktop-support/movement_desktop_turn.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_desktop_turn.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://c4d13r420hnx2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd" id="1_qv43c"] +[ext_resource type="Script" uid="uid://bjqk58f7j3hgl" path="res://addons/godot-xr-tools/desktop-support/movement_desktop_turn.gd" id="1_qv43c"] -[node name="MovementDesktopTurn" type="Node" groups=["movement_providers"]] +[node name="MovementDesktopTurn" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_qv43c") diff --git a/addons/godot-xr-tools/desktop-support/movement_gravity_zones.gd.uid b/addons/godot-xr-tools/desktop-support/movement_gravity_zones.gd.uid new file mode 100644 index 0000000..eb9d7f3 --- /dev/null +++ b/addons/godot-xr-tools/desktop-support/movement_gravity_zones.gd.uid @@ -0,0 +1 @@ +uid://dyifp672tjli7 diff --git a/addons/godot-xr-tools/desktop-support/movement_gravity_zones.tscn b/addons/godot-xr-tools/desktop-support/movement_gravity_zones.tscn index 7546a57..5423e24 100644 --- a/addons/godot-xr-tools/desktop-support/movement_gravity_zones.tscn +++ b/addons/godot-xr-tools/desktop-support/movement_gravity_zones.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=2 format=3] +[gd_scene load_steps=2 format=3 uid="uid://kx0gpdwdcham"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/desktop-support/movement_gravity_zones.gd" id="1"] +[ext_resource type="Script" uid="uid://dyifp672tjli7" path="res://addons/godot-xr-tools/desktop-support/movement_gravity_zones.gd" id="1"] -[node name="MovementGravityZones" type="Node" groups=["movement_providers"]] +[node name="MovementGravityZones" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/effects/fade.gd b/addons/godot-xr-tools/effects/fade.gd index cdefe02..5ed3509 100644 --- a/addons/godot-xr-tools/effects/fade.gd +++ b/addons/godot-xr-tools/effects/fade.gd @@ -7,6 +7,11 @@ extends Node3D ## ## This script manages fading the view. +@export_flags_3d_render var layers = 2: + set(value): + layers = value + if _mesh: + _mesh.layers = layers # Dictionary of fade requests var _faders : Dictionary = {} @@ -22,8 +27,8 @@ var _material : ShaderMaterial # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFade" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFade" # Called when the fade node is ready @@ -34,7 +39,9 @@ func _ready() -> void: # Get the mesh and material _mesh = $FadeMesh - _material = _mesh.get_surface_override_material(0) + if _mesh: + _mesh.layers = layers + _material = _mesh.get_surface_override_material(0) # Called every frame. 'delta' is the elapsed time since the previous frame. @@ -69,6 +76,17 @@ func set_fade_level(p_whom : Variant, p_color : Color) -> void: _update = true +## Returns our first current fade node +static func get_fade_node() -> XRToolsFade: + # In the future this use of groups should be replaced by static instances. + var tree := Engine.get_main_loop() as SceneTree + for node in tree.get_nodes_in_group("fade_mesh"): + var fade := node as XRToolsFade + if fade: + return fade + + return null + ## Set the fade level on the fade instance static func set_fade(p_whom : Variant, p_color : Color) -> void: # In the future this use of groups should be replaced by static instances. diff --git a/addons/godot-xr-tools/effects/fade.gd.uid b/addons/godot-xr-tools/effects/fade.gd.uid new file mode 100644 index 0000000..55a8739 --- /dev/null +++ b/addons/godot-xr-tools/effects/fade.gd.uid @@ -0,0 +1 @@ +uid://ook5rcwquue diff --git a/addons/godot-xr-tools/effects/fade.gdshader.uid b/addons/godot-xr-tools/effects/fade.gdshader.uid new file mode 100644 index 0000000..cf3672b --- /dev/null +++ b/addons/godot-xr-tools/effects/fade.gdshader.uid @@ -0,0 +1 @@ +uid://crgou0mlv2l0s diff --git a/addons/godot-xr-tools/effects/fade.tscn b/addons/godot-xr-tools/effects/fade.tscn index 416cbff..9a29bbc 100644 --- a/addons/godot-xr-tools/effects/fade.tscn +++ b/addons/godot-xr-tools/effects/fade.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=3 uid="uid://wtpox7m5vu2b"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/effects/fade.gd" id="1_6667f"] -[ext_resource type="Shader" path="res://addons/godot-xr-tools/effects/fade.gdshader" id="1_tjen8"] +[ext_resource type="Script" uid="uid://ook5rcwquue" path="res://addons/godot-xr-tools/effects/fade.gd" id="1_6667f"] +[ext_resource type="Shader" uid="uid://crgou0mlv2l0s" path="res://addons/godot-xr-tools/effects/fade.gdshader" id="1_tjen8"] [sub_resource type="QuadMesh" id="QuadMesh_aqp6r"] custom_aabb = AABB(-5000, -5000, -5000, 10000, 10000, 10000) @@ -14,6 +14,7 @@ shader_parameter/albedo = Color(0, 0, 0, 1) [node name="Fade" type="Node3D"] script = ExtResource("1_6667f") +cull_mask = 1 [node name="FadeMesh" type="MeshInstance3D" parent="."] visible = false diff --git a/addons/godot-xr-tools/effects/vignette.gd b/addons/godot-xr-tools/effects/vignette.gd index c8bb62a..ee27869 100644 --- a/addons/godot-xr-tools/effects/vignette.gd +++ b/addons/godot-xr-tools/effects/vignette.gd @@ -13,6 +13,12 @@ extends Node3D @export var auto_rotation_limit : float = 20.0: set = set_auto_rotation_limit @export var auto_velocity_limit : float = 10.0 +@export_flags_3d_render var layers = 2: + set(value): + layers = value + if is_inside_tree(): + $Mesh.layers = layers + var material : ShaderMaterial = preload("res://addons/godot-xr-tools/effects/vignette.tres") var auto_first = true @@ -80,6 +86,7 @@ func _update_mesh() -> void: arr_mesh.custom_aabb = AABB(Vector3(-1.0, -1.0, -1.0), Vector3(1.0, 1.0, 1.0)) $Mesh.mesh = arr_mesh + $Mesh.layers = layers $Mesh.set_surface_override_material(0, material) func set_auto_adjust(new_auto_adjust : bool) -> void: @@ -99,8 +106,8 @@ func set_auto_rotation_limit(new_auto_rotation_limit : float) -> void: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsVignette" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsVignette" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/effects/vignette.gd.uid b/addons/godot-xr-tools/effects/vignette.gd.uid new file mode 100644 index 0000000..e4cc410 --- /dev/null +++ b/addons/godot-xr-tools/effects/vignette.gd.uid @@ -0,0 +1 @@ +uid://4ehwuml4mp5k diff --git a/addons/godot-xr-tools/effects/vignette.gdshader.uid b/addons/godot-xr-tools/effects/vignette.gdshader.uid new file mode 100644 index 0000000..c515dab --- /dev/null +++ b/addons/godot-xr-tools/effects/vignette.gdshader.uid @@ -0,0 +1 @@ +uid://dxjwjsisjug3u diff --git a/addons/godot-xr-tools/effects/vignette.tscn b/addons/godot-xr-tools/effects/vignette.tscn index 304a637..fd38341 100644 --- a/addons/godot-xr-tools/effects/vignette.tscn +++ b/addons/godot-xr-tools/effects/vignette.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=4 format=3 uid="uid://cc6ngdqie8o8c"] +[gd_scene load_steps=4 format=4 uid="uid://cc6ngdqie8o8c"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/effects/vignette.gd" id="1"] +[ext_resource type="Script" uid="uid://4ehwuml4mp5k" path="res://addons/godot-xr-tools/effects/vignette.gd" id="1"] [ext_resource type="Material" uid="uid://cesiqdvdfojle" path="res://addons/godot-xr-tools/effects/vignette.tres" id="2_djtaj"] [sub_resource type="ArrayMesh" id="ArrayMesh_yyajy"] @@ -8,11 +8,11 @@ _surfaces = [{ "aabb": AABB(-2, -2, 0, 4, 4, 1e-05), "format": 34359742465, "index_count": 192, -"index_data": PackedByteArray(32, 0, 33, 0, 1, 0, 32, 0, 1, 0, 0, 0, 33, 0, 34, 0, 2, 0, 33, 0, 2, 0, 1, 0, 34, 0, 35, 0, 3, 0, 34, 0, 3, 0, 2, 0, 35, 0, 36, 0, 4, 0, 35, 0, 4, 0, 3, 0, 36, 0, 37, 0, 5, 0, 36, 0, 5, 0, 4, 0, 37, 0, 38, 0, 6, 0, 37, 0, 6, 0, 5, 0, 38, 0, 39, 0, 7, 0, 38, 0, 7, 0, 6, 0, 39, 0, 40, 0, 8, 0, 39, 0, 8, 0, 7, 0, 40, 0, 41, 0, 9, 0, 40, 0, 9, 0, 8, 0, 41, 0, 42, 0, 10, 0, 41, 0, 10, 0, 9, 0, 42, 0, 43, 0, 11, 0, 42, 0, 11, 0, 10, 0, 43, 0, 44, 0, 12, 0, 43, 0, 12, 0, 11, 0, 44, 0, 45, 0, 13, 0, 44, 0, 13, 0, 12, 0, 45, 0, 46, 0, 14, 0, 45, 0, 14, 0, 13, 0, 46, 0, 47, 0, 15, 0, 46, 0, 15, 0, 14, 0, 47, 0, 48, 0, 16, 0, 47, 0, 16, 0, 15, 0, 48, 0, 49, 0, 17, 0, 48, 0, 17, 0, 16, 0, 49, 0, 50, 0, 18, 0, 49, 0, 18, 0, 17, 0, 50, 0, 51, 0, 19, 0, 50, 0, 19, 0, 18, 0, 51, 0, 52, 0, 20, 0, 51, 0, 20, 0, 19, 0, 52, 0, 53, 0, 21, 0, 52, 0, 21, 0, 20, 0, 53, 0, 54, 0, 22, 0, 53, 0, 22, 0, 21, 0, 54, 0, 55, 0, 23, 0, 54, 0, 23, 0, 22, 0, 55, 0, 56, 0, 24, 0, 55, 0, 24, 0, 23, 0, 56, 0, 57, 0, 25, 0, 56, 0, 25, 0, 24, 0, 57, 0, 58, 0, 26, 0, 57, 0, 26, 0, 25, 0, 58, 0, 59, 0, 27, 0, 58, 0, 27, 0, 26, 0, 59, 0, 60, 0, 28, 0, 59, 0, 28, 0, 27, 0, 60, 0, 61, 0, 29, 0, 60, 0, 29, 0, 28, 0, 61, 0, 62, 0, 30, 0, 61, 0, 30, 0, 29, 0, 62, 0, 63, 0, 31, 0, 62, 0, 31, 0, 30, 0, 63, 0, 32, 0, 0, 0, 63, 0, 0, 0, 31, 0), +"index_data": PackedByteArray("IAAhAAEAIAABAAAAIQAiAAIAIQACAAEAIgAjAAMAIgADAAIAIwAkAAQAIwAEAAMAJAAlAAUAJAAFAAQAJQAmAAYAJQAGAAUAJgAnAAcAJgAHAAYAJwAoAAgAJwAIAAcAKAApAAkAKAAJAAgAKQAqAAoAKQAKAAkAKgArAAsAKgALAAoAKwAsAAwAKwAMAAsALAAtAA0ALAANAAwALQAuAA4ALQAOAA0ALgAvAA8ALgAPAA4ALwAwABAALwAQAA8AMAAxABEAMAARABAAMQAyABIAMQASABEAMgAzABMAMgATABIAMwA0ABQAMwAUABMANAA1ABUANAAVABQANQA2ABYANQAWABUANgA3ABcANgAXABYANwA4ABgANwAYABcAOAA5ABkAOAAZABgAOQA6ABoAOQAaABkAOgA7ABsAOgAbABoAOwA8ABwAOwAcABsAPAA9AB0APAAdABwAPQA+AB4APQAeAB0APgA/AB8APgAfAB4APwAgAAAAPwAAAB8A"), "primitive": 3, "uv_scale": Vector4(0, 0, 0, 0), "vertex_count": 64, -"vertex_data": PackedByteArray(0, 0, 128, 63, 0, 0, 0, 0, 0, 0, 0, 0, 190, 20, 123, 63, 194, 197, 71, 190, 0, 0, 0, 0, 94, 131, 108, 63, 22, 239, 195, 190, 0, 0, 0, 0, 49, 219, 84, 63, 218, 57, 14, 191, 0, 0, 0, 0, 243, 4, 53, 63, 243, 4, 53, 191, 0, 0, 0, 0, 218, 57, 14, 63, 49, 219, 84, 191, 0, 0, 0, 0, 21, 239, 195, 62, 94, 131, 108, 191, 0, 0, 0, 0, 196, 197, 71, 62, 190, 20, 123, 191, 0, 0, 0, 0, 46, 189, 59, 179, 0, 0, 128, 191, 0, 0, 0, 0, 194, 197, 71, 190, 190, 20, 123, 191, 0, 0, 0, 0, 20, 239, 195, 190, 95, 131, 108, 191, 0, 0, 0, 0, 217, 57, 14, 191, 50, 219, 84, 191, 0, 0, 0, 0, 243, 4, 53, 191, 243, 4, 53, 191, 0, 0, 0, 0, 50, 219, 84, 191, 217, 57, 14, 191, 0, 0, 0, 0, 94, 131, 108, 191, 23, 239, 195, 190, 0, 0, 0, 0, 191, 20, 123, 191, 193, 197, 71, 190, 0, 0, 0, 0, 0, 0, 128, 191, 46, 189, 187, 51, 0, 0, 0, 0, 191, 20, 123, 191, 189, 197, 71, 62, 0, 0, 0, 0, 94, 131, 108, 191, 21, 239, 195, 62, 0, 0, 0, 0, 48, 219, 84, 191, 219, 57, 14, 63, 0, 0, 0, 0, 244, 4, 53, 191, 242, 4, 53, 63, 0, 0, 0, 0, 221, 57, 14, 191, 47, 219, 84, 63, 0, 0, 0, 0, 26, 239, 195, 190, 94, 131, 108, 63, 0, 0, 0, 0, 198, 197, 71, 190, 190, 20, 123, 63, 0, 0, 0, 0, 46, 222, 76, 50, 0, 0, 128, 63, 0, 0, 0, 0, 200, 197, 71, 62, 190, 20, 123, 63, 0, 0, 0, 0, 27, 239, 195, 62, 93, 131, 108, 63, 0, 0, 0, 0, 215, 57, 14, 63, 51, 219, 84, 63, 0, 0, 0, 0, 242, 4, 53, 63, 245, 4, 53, 63, 0, 0, 0, 0, 49, 219, 84, 63, 219, 57, 14, 63, 0, 0, 0, 0, 95, 131, 108, 63, 21, 239, 195, 62, 0, 0, 0, 0, 191, 20, 123, 63, 188, 197, 71, 62, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 190, 20, 251, 63, 194, 197, 199, 190, 0, 0, 0, 0, 94, 131, 236, 63, 22, 239, 67, 191, 0, 0, 0, 0, 49, 219, 212, 63, 218, 57, 142, 191, 0, 0, 0, 0, 243, 4, 181, 63, 243, 4, 181, 191, 0, 0, 0, 0, 218, 57, 142, 63, 49, 219, 212, 191, 0, 0, 0, 0, 21, 239, 67, 63, 94, 131, 236, 191, 0, 0, 0, 0, 196, 197, 199, 62, 190, 20, 251, 191, 0, 0, 0, 0, 46, 189, 187, 179, 0, 0, 0, 192, 0, 0, 0, 0, 194, 197, 199, 190, 190, 20, 251, 191, 0, 0, 0, 0, 20, 239, 67, 191, 95, 131, 236, 191, 0, 0, 0, 0, 217, 57, 142, 191, 50, 219, 212, 191, 0, 0, 0, 0, 243, 4, 181, 191, 243, 4, 181, 191, 0, 0, 0, 0, 50, 219, 212, 191, 217, 57, 142, 191, 0, 0, 0, 0, 94, 131, 236, 191, 23, 239, 67, 191, 0, 0, 0, 0, 191, 20, 251, 191, 193, 197, 199, 190, 0, 0, 0, 0, 0, 0, 0, 192, 46, 189, 59, 52, 0, 0, 0, 0, 191, 20, 251, 191, 189, 197, 199, 62, 0, 0, 0, 0, 94, 131, 236, 191, 21, 239, 67, 63, 0, 0, 0, 0, 48, 219, 212, 191, 219, 57, 142, 63, 0, 0, 0, 0, 244, 4, 181, 191, 242, 4, 181, 63, 0, 0, 0, 0, 221, 57, 142, 191, 47, 219, 212, 63, 0, 0, 0, 0, 26, 239, 67, 191, 94, 131, 236, 63, 0, 0, 0, 0, 198, 197, 199, 190, 190, 20, 251, 63, 0, 0, 0, 0, 46, 222, 204, 50, 0, 0, 0, 64, 0, 0, 0, 0, 200, 197, 199, 62, 190, 20, 251, 63, 0, 0, 0, 0, 27, 239, 67, 63, 93, 131, 236, 63, 0, 0, 0, 0, 215, 57, 142, 63, 51, 219, 212, 63, 0, 0, 0, 0, 242, 4, 181, 63, 245, 4, 181, 63, 0, 0, 0, 0, 49, 219, 212, 63, 219, 57, 142, 63, 0, 0, 0, 0, 95, 131, 236, 63, 21, 239, 67, 63, 0, 0, 0, 0, 191, 20, 251, 63, 188, 197, 199, 62, 0, 0, 0, 0) +"vertex_data": PackedByteArray("AACAPwAAAAAAAAAAvhR7P8LFR74AAAAAXoNsPxbvw74AAAAAMdtUP9o5Dr8AAAAA8wQ1P/MENb8AAAAA2jkOPzHbVL8AAAAAFe/DPl6DbL8AAAAAxMVHPr4Ue78AAAAALr07swAAgL8AAAAAwsVHvr4Ue78AAAAAFO/Dvl+DbL8AAAAA2TkOvzLbVL8AAAAA8wQ1v/MENb8AAAAAMttUv9k5Dr8AAAAAXoNsvxfvw74AAAAAvxR7v8HFR74AAAAAAACAvy69uzMAAAAAvxR7v73FRz4AAAAAXoNsvxXvwz4AAAAAMNtUv9s5Dj8AAAAA9AQ1v/IENT8AAAAA3TkOvy/bVD8AAAAAGu/Dvl6DbD8AAAAAxsVHvr4Uez8AAAAALt5MMgAAgD8AAAAAyMVHPr4Uez8AAAAAG+/DPl2DbD8AAAAA1zkOPzPbVD8AAAAA8gQ1P/UENT8AAAAAMdtUP9s5Dj8AAAAAX4NsPxXvwz4AAAAAvxR7P7zFRz4AAAAAAAAAQAAAAAAAAAAAvhT7P8LFx74AAAAAXoPsPxbvQ78AAAAAMdvUP9o5jr8AAAAA8wS1P/MEtb8AAAAA2jmOPzHb1L8AAAAAFe9DP16D7L8AAAAAxMXHPr4U+78AAAAALr27swAAAMAAAAAAwsXHvr4U+78AAAAAFO9Dv1+D7L8AAAAA2TmOvzLb1L8AAAAA8wS1v/MEtb8AAAAAMtvUv9k5jr8AAAAAXoPsvxfvQ78AAAAAvxT7v8HFx74AAAAAAAAAwC69OzQAAAAAvxT7v73Fxz4AAAAAXoPsvxXvQz8AAAAAMNvUv9s5jj8AAAAA9AS1v/IEtT8AAAAA3TmOvy/b1D8AAAAAGu9Dv16D7D8AAAAAxsXHvr4U+z8AAAAALt7MMgAAAEAAAAAAyMXHPr4U+z8AAAAAG+9DP12D7D8AAAAA1zmOPzPb1D8AAAAA8gS1P/UEtT8AAAAAMdvUP9s5jj8AAAAAX4PsPxXvQz8AAAAAvxT7P7zFxz4AAAAA") }] custom_aabb = AABB(-1, -1, -1, 1, 1, 1) @@ -22,6 +22,7 @@ script = ExtResource("1") [node name="Mesh" type="MeshInstance3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1) visible = false +layers = 2 cast_shadow = 0 ignore_occlusion_culling = true mesh = SubResource("ArrayMesh_yyajy") diff --git a/addons/godot-xr-tools/events/pointer_event.gd.uid b/addons/godot-xr-tools/events/pointer_event.gd.uid new file mode 100644 index 0000000..c55e8ab --- /dev/null +++ b/addons/godot-xr-tools/events/pointer_event.gd.uid @@ -0,0 +1 @@ +uid://bpvc61v8e2vlm diff --git a/addons/godot-xr-tools/examples/fall_damage.gd b/addons/godot-xr-tools/examples/fall_damage.gd index 58dd2f5..aec2589 100644 --- a/addons/godot-xr-tools/examples/fall_damage.gd +++ b/addons/godot-xr-tools/examples/fall_damage.gd @@ -49,8 +49,8 @@ var _previous_velocity : Vector3 = Vector3.ZERO # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFallDamage" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFallDamage" func _ready(): diff --git a/addons/godot-xr-tools/examples/fall_damage.gd.uid b/addons/godot-xr-tools/examples/fall_damage.gd.uid new file mode 100644 index 0000000..f783111 --- /dev/null +++ b/addons/godot-xr-tools/examples/fall_damage.gd.uid @@ -0,0 +1 @@ +uid://d2qt6y7dh31n2 diff --git a/addons/godot-xr-tools/examples/fall_damage.tscn b/addons/godot-xr-tools/examples/fall_damage.tscn index e1b607d..5b4b5f0 100644 --- a/addons/godot-xr-tools/examples/fall_damage.tscn +++ b/addons/godot-xr-tools/examples/fall_damage.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://d2yejwiwab3wv"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/examples/fall_damage.gd" id="1"] +[ext_resource type="Script" uid="uid://d2qt6y7dh31n2" path="res://addons/godot-xr-tools/examples/fall_damage.gd" id="1"] [node name="FallDamage" type="Node" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/function_gaze_pointer.gd b/addons/godot-xr-tools/functions/function_gaze_pointer.gd index 2d6c17c..8d93fd3 100644 --- a/addons/godot-xr-tools/functions/function_gaze_pointer.gd +++ b/addons/godot-xr-tools/functions/function_gaze_pointer.gd @@ -136,8 +136,8 @@ var _world_scale : float = 1.0 var _camera_parent : XRCamera3D ## Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFunctionGazePointer" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFunctionGazePointer" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/functions/function_gaze_pointer.gd.uid b/addons/godot-xr-tools/functions/function_gaze_pointer.gd.uid new file mode 100644 index 0000000..01e009d --- /dev/null +++ b/addons/godot-xr-tools/functions/function_gaze_pointer.gd.uid @@ -0,0 +1 @@ +uid://f60byrk7xjak diff --git a/addons/godot-xr-tools/functions/function_gaze_pointer.tscn b/addons/godot-xr-tools/functions/function_gaze_pointer.tscn index 2734819..1f9790a 100644 --- a/addons/godot-xr-tools/functions/function_gaze_pointer.tscn +++ b/addons/godot-xr-tools/functions/function_gaze_pointer.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=9 format=3 uid="uid://do1wif8rpqtwj"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/function_gaze_pointer.gd" id="1_ipkdr"] +[ext_resource type="Script" uid="uid://f60byrk7xjak" path="res://addons/godot-xr-tools/functions/function_gaze_pointer.gd" id="1_ipkdr"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/pointer.tres" id="2_ndm62"] [ext_resource type="Shader" uid="uid://dncfip67nl2sf" path="res://addons/godot-xr-tools/misc/hold_button_gaze_pointer_visualshader.tres" id="3_1p5pd"] diff --git a/addons/godot-xr-tools/functions/function_pickup.gd b/addons/godot-xr-tools/functions/function_pickup.gd index 99ecdd6..1bfb17a 100644 --- a/addons/godot-xr-tools/functions/function_pickup.gd +++ b/addons/godot-xr-tools/functions/function_pickup.gd @@ -1,7 +1,7 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/function.svg") class_name XRToolsFunctionPickup -extends Node3D +extends XRToolsHandPalmOffset ## XR Tools Function Pickup Script @@ -87,19 +87,16 @@ var _ranged_area : Area3D var _ranged_collision : CollisionShape3D var _active_copied_collisions : Array[CopiedCollision] -## Controller -@onready var _controller := XRHelpers.get_xr_controller(self) - ## Collision hand (if applicable) -@onready var _collision_hand : XRToolsCollisionHand = XRToolsCollisionHand.find_ancestor(self) +@onready var _collision_hand : XRToolsCollisionHand ## Grip threshold (from configuration) @onready var _grip_threshold : float = XRTools.get_grip_threshold() # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFunctionPickup" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFunctionPickup" # Called when the node enters the scene tree for the first time. @@ -147,13 +144,35 @@ func _ready(): # Update the colliders _update_colliders() + +# Called when we're added to the tree +func _enter_tree(): + super._enter_tree() + + _collision_hand = XRToolsCollisionHand.find_ancestor(self) + # Monitor Grab Button - _controller.connect("button_pressed", _on_button_pressed) - _controller.connect("button_released", _on_button_released) + if _controller: + _controller.button_pressed.connect(_on_button_pressed) + _controller.button_released.connect(_on_button_released) + +# Called when we exit the tree +func _exit_tree(): + if _controller: + _controller.button_pressed.disconnect(_on_button_pressed) + _controller.button_released.disconnect(_on_button_released) + + if _collision_hand: + _remove_copied_collisions() + _collision_hand = null + + super._exit_tree() # Called on each frame to update the pickup func _process(delta): + super._process(delta) + # Do not process if in the editor if Engine.is_editor_hint(): return @@ -252,8 +271,8 @@ func _set_ranged_angle(new_value: float) -> void: # Called when the ranged-grab collision mask has been modified func _set_ranged_collision_mask(new_value: int) -> void: ranged_collision_mask = new_value - if is_inside_tree() and _ranged_collision: - _ranged_collision.collision_mask = new_value + if is_inside_tree() and _ranged_area: + _ranged_area.collision_mask = new_value # Update the colliders geometry diff --git a/addons/godot-xr-tools/functions/function_pickup.gd.uid b/addons/godot-xr-tools/functions/function_pickup.gd.uid new file mode 100644 index 0000000..7078f85 --- /dev/null +++ b/addons/godot-xr-tools/functions/function_pickup.gd.uid @@ -0,0 +1 @@ +uid://b18kkstg643yw diff --git a/addons/godot-xr-tools/functions/function_pickup.tscn b/addons/godot-xr-tools/functions/function_pickup.tscn index dad436d..b3fe55d 100644 --- a/addons/godot-xr-tools/functions/function_pickup.tscn +++ b/addons/godot-xr-tools/functions/function_pickup.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://b4ysuy43poobf"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/function_pickup.gd" id="1"] +[ext_resource type="Script" uid="uid://b18kkstg643yw" path="res://addons/godot-xr-tools/functions/function_pickup.gd" id="1"] [node name="FunctionPickup" type="Node3D"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/function_pointer.gd b/addons/godot-xr-tools/functions/function_pointer.gd index 536eb09..3d39892 100644 --- a/addons/godot-xr-tools/functions/function_pointer.gd +++ b/addons/godot-xr-tools/functions/function_pointer.gd @@ -1,7 +1,7 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/function.svg") class_name XRToolsFunctionPointer -extends Node3D +extends XRToolsHandAimOffset ## XR Tools Function Pointer Script @@ -116,20 +116,19 @@ var _controller_left_node : XRController3D # Right controller node var _controller_right_node : XRController3D -# Parent controller (if this pointer is childed to a specific controller) -var _controller : XRController3D - # The currently active controller var _active_controller : XRController3D ## Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFunctionPointer" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFunctionPointer" # Called when the node enters the scene tree for the first time. -func _ready(): +func _enter_tree(): + super._enter_tree() + # Do not initialise if in the editor if Engine.is_editor_hint(): return @@ -138,7 +137,6 @@ func _ready(): _world_scale = XRServer.world_scale # Check for a parent controller - _controller = XRHelpers.get_xr_controller(self) if _controller: # Set as active on the parent controller _active_controller = _controller @@ -147,6 +145,9 @@ func _ready(): _controller.button_pressed.connect(_on_button_pressed.bind(_controller)) _controller.button_released.connect(_on_button_released.bind(_controller)) else: + # Disable this if we don't have a controller + hand_offset_mode = 4 + # Get the left and right controllers _controller_left_node = XRHelpers.get_left_controller(self) _controller_right_node = XRHelpers.get_right_controller(self) @@ -176,9 +177,39 @@ func _ready(): _update_suppress_radius() _update_suppress_mask() +func _exit_tree(): + _active_controller = null + + if _controller and not Engine.is_editor_hint(): + _controller.button_pressed.disconnect(_on_button_pressed.bind(_controller)) + _controller.button_released.disconnect(_on_button_released.bind(_controller)) + + # This will be unset in our superclass method + + if _controller_left_node: + if not Engine.is_editor_hint(): + _controller_left_node.button_pressed.disconnect( + _on_button_pressed.bind(_controller_left_node)) + _controller_left_node.button_released.disconnect( + _on_button_released.bind(_controller_left_node)) + + _controller_left_node = null + + if _controller_right_node: + if not Engine.is_editor_hint(): + _controller_right_node.button_pressed.disconnect( + _on_button_pressed.bind(_controller_right_node)) + _controller_right_node.button_released.disconnect( + _on_button_released.bind(_controller_right_node)) + + _controller_right_node = null + + super._exit_tree() # Called on each frame to update the pickup -func _process(_delta): +func _process(delta): + super._process(delta) + # Do not process if in the editor if Engine.is_editor_hint() or !is_inside_tree(): return diff --git a/addons/godot-xr-tools/functions/function_pointer.gd.uid b/addons/godot-xr-tools/functions/function_pointer.gd.uid new file mode 100644 index 0000000..e1e0ec3 --- /dev/null +++ b/addons/godot-xr-tools/functions/function_pointer.gd.uid @@ -0,0 +1 @@ +uid://cvnagt08r6ul4 diff --git a/addons/godot-xr-tools/functions/function_pointer.tscn b/addons/godot-xr-tools/functions/function_pointer.tscn index 969da9b..4a26100 100644 --- a/addons/godot-xr-tools/functions/function_pointer.tscn +++ b/addons/godot-xr-tools/functions/function_pointer.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=6 format=3 uid="uid://cqhw276realc"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/pointer.tres" id="1"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/function_pointer.gd" id="2"] +[ext_resource type="Script" uid="uid://cvnagt08r6ul4" path="res://addons/godot-xr-tools/functions/function_pointer.gd" id="2"] [sub_resource type="BoxMesh" id="1"] resource_local_to_scene = true diff --git a/addons/godot-xr-tools/functions/function_pose_detector.gd b/addons/godot-xr-tools/functions/function_pose_detector.gd index e542f3a..83fd379 100644 --- a/addons/godot-xr-tools/functions/function_pose_detector.gd +++ b/addons/godot-xr-tools/functions/function_pose_detector.gd @@ -1,7 +1,7 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/hand.svg") class_name XRToolsFunctionPoseDetector -extends Node3D +extends XRToolsHandPalmOffset ## XR Tools Function Pose Area @@ -18,20 +18,21 @@ const DEFAULT_MASK := 0b0000_0000_0010_0000_0000_0000_0000_0000 @export_flags_3d_physics var collision_mask : int = DEFAULT_MASK: set = set_collision_mask -## Hand controller -@onready var _controller := XRHelpers.get_xr_controller(self) - ## Hand to control -@onready var _hand := XRToolsHand.find_instance(self) +var _hand : XRToolsHand # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFunctionPoseDetector" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFunctionPoseDetector" + +# Called when we enter our tree +func _enter_tree(): + super._enter_tree() + + _hand = XRToolsHand.find_instance(self) -# Called when the node enters the scene tree for the first time. -func _ready(): # Connect signals (if controller and hand are valid) if _controller and _hand: if $SenseArea.area_entered.connect(_on_area_entered): @@ -43,12 +44,19 @@ func _ready(): _update_collision_mask() +func _exit_tree(): + # Disconnect signals (if controller and hand are valid) + if _controller and _hand: + $SenseArea.area_entered.disconnect(_on_area_entered) + $SenseArea.area_exited.disconnect(_on_area_exited) + + _hand = null + super._exit_tree() + + # This method verifies the pose area has a valid configuration. func _get_configuration_warnings() -> PackedStringArray: - var warnings := PackedStringArray() - - if !XRHelpers.get_xr_controller(self): - warnings.append("Node must be within a branch of an XRController3D node") + var warnings : PackedStringArray = super._get_configuration_warnings() # Verify hand can be found if !XRToolsHand.find_instance(self): diff --git a/addons/godot-xr-tools/functions/function_pose_detector.gd.uid b/addons/godot-xr-tools/functions/function_pose_detector.gd.uid new file mode 100644 index 0000000..cf59a38 --- /dev/null +++ b/addons/godot-xr-tools/functions/function_pose_detector.gd.uid @@ -0,0 +1 @@ +uid://cupmjxb4tpq3p diff --git a/addons/godot-xr-tools/functions/function_pose_detector.tscn b/addons/godot-xr-tools/functions/function_pose_detector.tscn index 714db38..d81855e 100644 --- a/addons/godot-xr-tools/functions/function_pose_detector.tscn +++ b/addons/godot-xr-tools/functions/function_pose_detector.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://bft3xyxs31ci3"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/function_pose_detector.gd" id="1"] +[ext_resource type="Script" uid="uid://cupmjxb4tpq3p" path="res://addons/godot-xr-tools/functions/function_pose_detector.gd" id="1"] [sub_resource type="CapsuleShape3D" id="1"] radius = 0.08 @@ -15,5 +15,5 @@ collision_mask = 2097152 monitorable = false [node name="CollisionShape" type="CollisionShape3D" parent="SenseArea"] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, -0.04, 0.08) +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, -0.01) shape = SubResource("1") diff --git a/addons/godot-xr-tools/functions/function_teleport.gd b/addons/godot-xr-tools/functions/function_teleport.gd index 66591f1..01ce5dc 100644 --- a/addons/godot-xr-tools/functions/function_teleport.gd +++ b/addons/godot-xr-tools/functions/function_teleport.gd @@ -1,7 +1,7 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/function.svg") class_name XRToolsFunctionTeleport -extends Node3D +extends XRToolsHandPalmOffset ## XR Tools Function Teleport Script @@ -86,7 +86,7 @@ var player_material : StandardMaterial3D = _DefaultMaterial : set = set_player_ var is_on_floor : bool = true var is_teleporting : bool = false var can_teleport : bool = true -var teleport_rotation : float = 0.0; +var teleport_rotation : float = 0.0 var floor_normal : Vector3 = Vector3.UP var last_target_transform : Transform3D = Transform3D() var collision_shape : Shape3D @@ -106,14 +106,18 @@ var player : Node3D ## [XRToolsPlayerBody] node. @onready var player_body := XRToolsPlayerBody.find_instance(self) -## [XRController3D] node. -@onready var controller := XRHelpers.get_xr_controller(self) - # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFunctionTeleport" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFunctionTeleport" + +func _enter_tree(): + var bt:= Transform3D() + bt.origin = Vector3(0.0, 0.0, -0.1) + set_base_transform(bt) + + super._enter_tree() # Called when the node enters the scene tree for the first time. func _ready(): @@ -148,13 +152,13 @@ func _physics_process(delta): return # Skip if required nodes are missing - if !player_body or !controller: + if !player_body or !_controller: return # if we're not enabled no point in doing mode if !enabled: # reset these - is_teleporting = false; + is_teleporting = false $Teleport.visible = false $Target.visible = false @@ -170,8 +174,8 @@ func _physics_process(delta): $Target.mesh.size = Vector2(ws, ws) $Target/Player_figure.scale = Vector3(ws, ws, ws) - if controller and controller.get_is_active() and \ - controller.is_button_pressed(teleport_button_action): + if _controller and _controller.get_is_active() and \ + _controller.is_button_pressed(teleport_button_action): if !is_teleporting: is_teleporting = true $Teleport.visible = true @@ -300,7 +304,7 @@ func _physics_process(delta): color = cant_teleport_color # check our axis to see if we need to rotate - teleport_rotation += (delta * controller.get_vector2(rotation_action).x * -4.0) + teleport_rotation += (delta * _controller.get_vector2(rotation_action).x * -4.0) # update target and colour var target_basis := Basis() @@ -333,23 +337,19 @@ func _physics_process(delta): player_body.teleport(new_transform) # and disable - is_teleporting = false; + is_teleporting = false $Teleport.visible = false $Target.visible = false # This method verifies the teleport has a valid configuration. func _get_configuration_warnings() -> PackedStringArray: - var warnings := PackedStringArray() + var warnings : PackedStringArray = super._get_configuration_warnings() # Verify we can find the XRToolsPlayerBody if !XRToolsPlayerBody.find_instance(self): warnings.append("This node must be within a branch of an XRToolsPlayerBody node") - # Verify we can find the XRController3D - if !XRHelpers.get_xr_controller(self): - warnings.append("This node must be within a branch of an XRController3D node") - # Return warnings return warnings diff --git a/addons/godot-xr-tools/functions/function_teleport.gd.uid b/addons/godot-xr-tools/functions/function_teleport.gd.uid new file mode 100644 index 0000000..f7f74c7 --- /dev/null +++ b/addons/godot-xr-tools/functions/function_teleport.gd.uid @@ -0,0 +1 @@ +uid://blaa027erhjlp diff --git a/addons/godot-xr-tools/functions/function_teleport.tscn b/addons/godot-xr-tools/functions/function_teleport.tscn index db4c2eb..2efaeb3 100644 --- a/addons/godot-xr-tools/functions/function_teleport.tscn +++ b/addons/godot-xr-tools/functions/function_teleport.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=3 uid="uid://fiul51tsyoop"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/function_teleport.gd" id="1"] +[ext_resource type="Script" uid="uid://blaa027erhjlp" path="res://addons/godot-xr-tools/functions/function_teleport.gd" id="1"] [ext_resource type="Material" uid="uid://bk72wfw25ff0v" path="res://addons/godot-xr-tools/materials/teleport.tres" id="2"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/target.tres" id="3"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/capsule.tres" id="4"] diff --git a/addons/godot-xr-tools/functions/movement_climb.gd b/addons/godot-xr-tools/functions/movement_climb.gd index c4bc91f..cf7aac8 100644 --- a/addons/godot-xr-tools/functions/movement_climb.gd +++ b/addons/godot-xr-tools/functions/movement_climb.gd @@ -82,8 +82,8 @@ var _dominant : Node3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementClimb" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementClimb" or super(xr_name) ## Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/functions/movement_climb.gd.uid b/addons/godot-xr-tools/functions/movement_climb.gd.uid new file mode 100644 index 0000000..57a0ad1 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_climb.gd.uid @@ -0,0 +1 @@ +uid://dtl3uo5dnibof diff --git a/addons/godot-xr-tools/functions/movement_climb.tscn b/addons/godot-xr-tools/functions/movement_climb.tscn index e6d60ce..8d49818 100644 --- a/addons/godot-xr-tools/functions/movement_climb.tscn +++ b/addons/godot-xr-tools/functions/movement_climb.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bxm1ply47vaan"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_climb.gd" id="1"] +[ext_resource type="Script" uid="uid://dtl3uo5dnibof" path="res://addons/godot-xr-tools/functions/movement_climb.gd" id="1"] -[node name="MovementClimb" type="Node" groups=["movement_providers"]] +[node name="MovementClimb" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_crouch.gd b/addons/godot-xr-tools/functions/movement_crouch.gd index 0b4db5a..d3c3b04 100644 --- a/addons/godot-xr-tools/functions/movement_crouch.gd +++ b/addons/godot-xr-tools/functions/movement_crouch.gd @@ -40,18 +40,28 @@ var _crouch_button_down : bool = false # Controller node -@onready var _controller := XRHelpers.get_xr_controller(self) +var _controller : XRController3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementCrouch" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementCrouch" or super(xr_name) + + +# Called when our node is added to our scene tree +func _enter_tree(): + _controller = XRHelpers.get_xr_controller(self) + + +# Called when our node is removed from our scene tree +func _exit_tree(): + _controller = null # Perform jump movement func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: bool): # Skip if the controller isn't active - if !_controller.get_is_active(): + if not _controller or not _controller.get_is_active(): return # Detect crouch button down and pressed states @@ -85,7 +95,7 @@ func _get_configuration_warnings() -> PackedStringArray: var warnings := super() # Check the controller node - if !XRHelpers.get_xr_controller(self): + if not XRHelpers.get_xr_controller(self): warnings.append("This node must be within a branch of an XRController3D node") # Return warnings diff --git a/addons/godot-xr-tools/functions/movement_crouch.gd.uid b/addons/godot-xr-tools/functions/movement_crouch.gd.uid new file mode 100644 index 0000000..177ed44 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_crouch.gd.uid @@ -0,0 +1 @@ +uid://vuhhcx5m67gt diff --git a/addons/godot-xr-tools/functions/movement_crouch.tscn b/addons/godot-xr-tools/functions/movement_crouch.tscn index 824cfca..4b7dd7d 100644 --- a/addons/godot-xr-tools/functions/movement_crouch.tscn +++ b/addons/godot-xr-tools/functions/movement_crouch.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://clt88d5d1dje4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_crouch.gd" id="1"] +[ext_resource type="Script" uid="uid://vuhhcx5m67gt" path="res://addons/godot-xr-tools/functions/movement_crouch.gd" id="1"] -[node name="MovementCrouch" type="Node" groups=["movement_providers"]] +[node name="MovementCrouch" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_direct.gd b/addons/godot-xr-tools/functions/movement_direct.gd index c9d5352..c5aa091 100644 --- a/addons/godot-xr-tools/functions/movement_direct.gd +++ b/addons/godot-xr-tools/functions/movement_direct.gd @@ -26,18 +26,28 @@ extends XRToolsMovementProvider # Controller node -@onready var _controller := XRHelpers.get_xr_controller(self) +var _controller : XRController3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementDirect" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementDirect" or super(xr_name) + + +# Called when our node is added to our scene tree +func _enter_tree(): + _controller = XRHelpers.get_xr_controller(self) + + +# Called when our node is removed from our scene tree +func _exit_tree(): + _controller = null # Perform jump movement func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: bool): # Skip if the controller isn't active - if !_controller.get_is_active(): + if not _controller or not _controller.get_is_active(): return ## get input action with deadzone correction applied @@ -58,7 +68,7 @@ func _get_configuration_warnings() -> PackedStringArray: var warnings := super() # Check the controller node - if !XRHelpers.get_xr_controller(self): + if not XRHelpers.get_xr_controller(self): warnings.append("This node must be within a branch of an XRController3D node") # Return warnings diff --git a/addons/godot-xr-tools/functions/movement_direct.gd.uid b/addons/godot-xr-tools/functions/movement_direct.gd.uid new file mode 100644 index 0000000..25de20f --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_direct.gd.uid @@ -0,0 +1 @@ +uid://dc4hg8kq5ia5y diff --git a/addons/godot-xr-tools/functions/movement_direct.tscn b/addons/godot-xr-tools/functions/movement_direct.tscn index c58096b..6d9fab9 100644 --- a/addons/godot-xr-tools/functions/movement_direct.tscn +++ b/addons/godot-xr-tools/functions/movement_direct.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bl2nuu3qhlb5k"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_direct.gd" id="1"] +[ext_resource type="Script" uid="uid://dc4hg8kq5ia5y" path="res://addons/godot-xr-tools/functions/movement_direct.gd" id="1"] -[node name="MovementDirect" type="Node" groups=["movement_providers"]] +[node name="MovementDirect" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_flight.gd b/addons/godot-xr-tools/functions/movement_flight.gd index 49bc9e9..d7852e1 100644 --- a/addons/godot-xr-tools/functions/movement_flight.gd +++ b/addons/godot-xr-tools/functions/movement_flight.gd @@ -39,7 +39,7 @@ signal flight_finished() ## Enumeration of controller to use for flight enum FlightController { LEFT, ## Use left controller - RIGHT, ## Use right controler + RIGHT, ## Use right controller } ## Enumeration of pitch control input @@ -104,8 +104,8 @@ var _controller : XRController3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementFlight" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementFlight" or super(xr_name) func _ready(): diff --git a/addons/godot-xr-tools/functions/movement_flight.gd.uid b/addons/godot-xr-tools/functions/movement_flight.gd.uid new file mode 100644 index 0000000..a5be5de --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_flight.gd.uid @@ -0,0 +1 @@ +uid://vyag4h2e7n0p diff --git a/addons/godot-xr-tools/functions/movement_flight.tscn b/addons/godot-xr-tools/functions/movement_flight.tscn index deb568c..31f1130 100644 --- a/addons/godot-xr-tools/functions/movement_flight.tscn +++ b/addons/godot-xr-tools/functions/movement_flight.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://kyhaogt0a4q8"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_flight.gd" id="1"] +[ext_resource type="Script" uid="uid://vyag4h2e7n0p" path="res://addons/godot-xr-tools/functions/movement_flight.gd" id="1"] -[node name="MovementFlight" type="Node" groups=["movement_providers"]] +[node name="MovementFlight" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_footstep.gd b/addons/godot-xr-tools/functions/movement_footstep.gd index cc0f5a3..05177c0 100644 --- a/addons/godot-xr-tools/functions/movement_footstep.gd +++ b/addons/godot-xr-tools/functions/movement_footstep.gd @@ -55,8 +55,8 @@ var _ground_node_audio_type : XRToolsSurfaceAudioType # Add support for is_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementFootstep" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementFootstep" or super(xr_name) func _ready(): diff --git a/addons/godot-xr-tools/functions/movement_footstep.gd.uid b/addons/godot-xr-tools/functions/movement_footstep.gd.uid new file mode 100644 index 0000000..9c890e3 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_footstep.gd.uid @@ -0,0 +1 @@ +uid://clpt3lske02eh diff --git a/addons/godot-xr-tools/functions/movement_footstep.tscn b/addons/godot-xr-tools/functions/movement_footstep.tscn index f63cf54..652724d 100644 --- a/addons/godot-xr-tools/functions/movement_footstep.tscn +++ b/addons/godot-xr-tools/functions/movement_footstep.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=2 format=3 uid="uid://0xlsitpu17r1"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_footstep.gd" id="1"] +[ext_resource type="Script" uid="uid://clpt3lske02eh" path="res://addons/godot-xr-tools/functions/movement_footstep.gd" id="1"] -[node name="MovementFootstep" type="Node" groups=["movement_providers"]] +[node name="MovementFootstep" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") [node name="PlayerSettings" type="AudioStreamPlayer3D" parent="."] diff --git a/addons/godot-xr-tools/functions/movement_glide.gd b/addons/godot-xr-tools/functions/movement_glide.gd index bff2ba9..bde65ab 100644 --- a/addons/godot-xr-tools/functions/movement_glide.gd +++ b/addons/godot-xr-tools/functions/movement_glide.gd @@ -91,8 +91,8 @@ var _has_controller_positions : bool = false # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementGlide" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementGlide" or super(xr_name) func physics_movement(delta: float, player_body: XRToolsPlayerBody, disabled: bool): @@ -203,7 +203,7 @@ func _set_gliding(active: bool) -> void: return # Update the is_gliding flag - is_active = active; + is_active = active # Report transition if is_active: diff --git a/addons/godot-xr-tools/functions/movement_glide.gd.uid b/addons/godot-xr-tools/functions/movement_glide.gd.uid new file mode 100644 index 0000000..6c124c6 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_glide.gd.uid @@ -0,0 +1 @@ +uid://5pticrbivdx6 diff --git a/addons/godot-xr-tools/functions/movement_glide.tscn b/addons/godot-xr-tools/functions/movement_glide.tscn index 9aed0f3..17c11c0 100644 --- a/addons/godot-xr-tools/functions/movement_glide.tscn +++ b/addons/godot-xr-tools/functions/movement_glide.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://cvokcudrffkgc"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_glide.gd" id="1"] +[ext_resource type="Script" uid="uid://5pticrbivdx6" path="res://addons/godot-xr-tools/functions/movement_glide.gd" id="1"] -[node name="MovementGlide" type="Node" groups=["movement_providers"]] +[node name="MovementGlide" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_grapple.gd b/addons/godot-xr-tools/functions/movement_grapple.gd index 37e4773..8a413de 100644 --- a/addons/godot-xr-tools/functions/movement_grapple.gd +++ b/addons/godot-xr-tools/functions/movement_grapple.gd @@ -65,6 +65,16 @@ const DEFAULT_ENABLE_MASK := 0b0000_0000_0000_0000_0000_0000_0001_0000 ## conflict with other functions. @export var grapple_button_action : String = "trigger_click" +## Hand offset to apply based on our controller pose +## You can use auto if you're using the default aim_pose or grip_pose poses. +@export_enum("auto", "aim", "grip", "palm", "disable") var hand_offset_mode : int = 0: + set(value): + hand_offset_mode = value + notify_property_list_changed() + if is_inside_tree(): + _update_transform() + + # Hook related variables var hook_object : Node3D = null var hook_local := Vector3(0,0,0) @@ -73,14 +83,17 @@ var hook_point := Vector3(0,0,0) # Grapple button state var _grapple_button := false -# Get line creation nodes -@onready var _line_helper : Node3D = $LineHelper -@onready var _line : CSGCylinder3D = $LineHelper/Line - # Get Controller node - consider way to universalize this if user wanted to # attach this to a gun instead of player's hand. Could consider variable to # select controller instead. -@onready var _controller := XRHelpers.get_xr_controller(self) +var _controller : XRController3D + +# Keep track of our tracker and pose +var _controller_tracker_and_pose : String = "" + +# Get line creation nodes +@onready var _line_helper : Node3D = $LineHelper +@onready var _line : CSGCylinder3D = $LineHelper/Line # Get Raycast node @onready var _grapple_raycast : RayCast3D = $Grapple_RayCast @@ -90,8 +103,8 @@ var _grapple_button := false # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementGrapple" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementGrapple" or super(xr_name) # Function run when node is added to scene @@ -117,6 +130,40 @@ func _ready(): _line.hide() +func _enter_tree(): + _controller = XRHelpers.get_xr_controller(self) + + _update_transform() + + +func _exit_tree(): + _controller = null + + +# Check property config +func _validate_property(property): + if hand_offset_mode != 4 and (property.name == "position" or property.name == "rotation" or property.name == "scale" or property.name == "rotation_edit_mode" or property.name == "rotation_order"): + # We control these, don't let the user set them. + property.usage = PROPERTY_USAGE_NONE + + +# Update our transform so we are positioned on our palm +func _update_transform() -> void: + if hand_offset_mode != 4: + transform = XRTools.get_palm_offset(hand_offset_mode, _controller) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta): + # If we have a controller, make sure our hand transform is updated when needed. + if _controller: + var tracker_and_pose = _controller.tracker + "." + _controller.pose + if _controller_tracker_and_pose != tracker_and_pose: + _controller_tracker_and_pose = tracker_and_pose + if hand_offset_mode == 0: + _update_transform() + + # Update the grappling line and target func _physics_process(_delta : float): # Skip if running in the editor @@ -209,7 +256,7 @@ func _set_grappling(active: bool) -> void: return # Update the is_active flag - is_active = active; + is_active = active # Report transition if is_active: diff --git a/addons/godot-xr-tools/functions/movement_grapple.gd.uid b/addons/godot-xr-tools/functions/movement_grapple.gd.uid new file mode 100644 index 0000000..4b1a28f --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_grapple.gd.uid @@ -0,0 +1 @@ +uid://r8s1ep2dlajf diff --git a/addons/godot-xr-tools/functions/movement_grapple.tscn b/addons/godot-xr-tools/functions/movement_grapple.tscn index a812f11..a02f7b1 100644 --- a/addons/godot-xr-tools/functions/movement_grapple.tscn +++ b/addons/godot-xr-tools/functions/movement_grapple.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://c78tjrtiyqna8"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_grapple.gd" id="1"] +[ext_resource type="Script" uid="uid://r8s1ep2dlajf" path="res://addons/godot-xr-tools/functions/movement_grapple.gd" id="1"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/pointer.tres" id="2_n6olo"] [sub_resource type="BoxMesh" id="1"] diff --git a/addons/godot-xr-tools/functions/movement_jog.gd b/addons/godot-xr-tools/functions/movement_jog.gd index 58699d2..0c8abc9 100644 --- a/addons/godot-xr-tools/functions/movement_jog.gd +++ b/addons/godot-xr-tools/functions/movement_jog.gd @@ -9,7 +9,7 @@ extends XRToolsMovementProvider ## works with the [XRToolsPlayerBody] attached to the players [XROrigin3D]. ## ## The implementation uses filtering of the controller Y velocities to measure -## the approximate frequency of jog arm-swings; and uses that to +## the approximate frequency of jog arm-swings, and uses that to ## switch between stopped, slow, and fast movement speeds. @@ -59,8 +59,8 @@ var _speed_mode := SpeedMode.STOPPED # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementJog" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementJog" or super(xr_name) # Perform jump movement @@ -117,7 +117,7 @@ func _get_stroke_frequency(delta : float) -> float: # Update confidence-hat. The confidence-hat signal has a fast-rise and # slow-decay. Rising with each jog arm-swing "stroke" and then taking time # to decay. The magnitude of the "confidence-hat" can be used as a good - # indicator of when the user is jogging; and the difference between the + # indicator of when the user is jogging, and the difference between the # "confidence" and "confidence-hat" signals can be used to identify the # duration of a jog arm-swing "stroke". if valley: diff --git a/addons/godot-xr-tools/functions/movement_jog.gd.uid b/addons/godot-xr-tools/functions/movement_jog.gd.uid new file mode 100644 index 0000000..adca51a --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_jog.gd.uid @@ -0,0 +1 @@ +uid://f5tfo4ylkuhc diff --git a/addons/godot-xr-tools/functions/movement_jog.tscn b/addons/godot-xr-tools/functions/movement_jog.tscn index aebadf6..9424816 100644 --- a/addons/godot-xr-tools/functions/movement_jog.tscn +++ b/addons/godot-xr-tools/functions/movement_jog.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://chcuj3jysipk8"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_jog.gd" id="1_k4cao"] +[ext_resource type="Script" uid="uid://f5tfo4ylkuhc" path="res://addons/godot-xr-tools/functions/movement_jog.gd" id="1_k4cao"] -[node name="MovementJog" type="Node" groups=["movement_providers"]] +[node name="MovementJog" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_k4cao") diff --git a/addons/godot-xr-tools/functions/movement_jump.gd b/addons/godot-xr-tools/functions/movement_jump.gd index 2ef5d2a..0aaf1ea 100644 --- a/addons/godot-xr-tools/functions/movement_jump.gd +++ b/addons/godot-xr-tools/functions/movement_jump.gd @@ -21,18 +21,28 @@ extends XRToolsMovementProvider # Node references -@onready var _controller := XRHelpers.get_xr_controller(self) +var _controller : XRController3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementJump" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementJump" or super(xr_name) + + +# Called when our node is added to our scene tree +func _enter_tree(): + _controller = XRHelpers.get_xr_controller(self) + + +# Called when our node is removed from our scene tree +func _exit_tree(): + _controller = null # Perform jump movement func physics_movement(_delta: float, player_body: XRToolsPlayerBody, _disabled: bool): # Skip if the jump controller isn't active - if !_controller.get_is_active(): + if not _controller or not _controller.get_is_active(): return # Request jump if the button is pressed @@ -45,7 +55,7 @@ func _get_configuration_warnings() -> PackedStringArray: var warnings := super() # Check the controller node - if !XRHelpers.get_xr_controller(self): + if not XRHelpers.get_xr_controller(self): warnings.append("This node must be within a branch of an XRController3D node") # Return warnings diff --git a/addons/godot-xr-tools/functions/movement_jump.gd.uid b/addons/godot-xr-tools/functions/movement_jump.gd.uid new file mode 100644 index 0000000..21db6cd --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_jump.gd.uid @@ -0,0 +1 @@ +uid://dur4rs2uhr6cp diff --git a/addons/godot-xr-tools/functions/movement_jump.tscn b/addons/godot-xr-tools/functions/movement_jump.tscn index 187612e..8588ae9 100644 --- a/addons/godot-xr-tools/functions/movement_jump.tscn +++ b/addons/godot-xr-tools/functions/movement_jump.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://c2q5phg8w08o"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_jump.gd" id="1"] +[ext_resource type="Script" uid="uid://dur4rs2uhr6cp" path="res://addons/godot-xr-tools/functions/movement_jump.gd" id="1"] -[node name="MovementJump" type="Node" groups=["movement_providers"]] +[node name="MovementJump" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_physical_jump.gd b/addons/godot-xr-tools/functions/movement_physical_jump.gd index 7839afc..44511b0 100644 --- a/addons/godot-xr-tools/functions/movement_physical_jump.gd +++ b/addons/godot-xr-tools/functions/movement_physical_jump.gd @@ -84,7 +84,7 @@ class SlidingAverage: _sum -= _data[_pos] # Store the new entry in the array and circularly advance the index - _data[_pos] = entry; + _data[_pos] = entry _pos = (_pos + 1) % _size # Return the average @@ -92,8 +92,8 @@ class SlidingAverage: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementPhysicalJump" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementPhysicalJump" or super(xr_name) # Perform jump detection @@ -140,7 +140,7 @@ func _detect_body_jump(delta: float, player_body: XRToolsPlayerBody) -> void: # Ignore zero moves (either not tracking, or no update since last physics) if abs(camera_vel) < 0.001: - return; + return # Correct for world-scale (convert to player units) camera_vel /= XRServer.world_scale diff --git a/addons/godot-xr-tools/functions/movement_physical_jump.gd.uid b/addons/godot-xr-tools/functions/movement_physical_jump.gd.uid new file mode 100644 index 0000000..a59f041 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_physical_jump.gd.uid @@ -0,0 +1 @@ +uid://c0podasns5j2h diff --git a/addons/godot-xr-tools/functions/movement_physical_jump.tscn b/addons/godot-xr-tools/functions/movement_physical_jump.tscn index 6386085..f9b407c 100644 --- a/addons/godot-xr-tools/functions/movement_physical_jump.tscn +++ b/addons/godot-xr-tools/functions/movement_physical_jump.tscn @@ -1,7 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://ckt118vcpmr6q"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_physical_jump.gd" id="1"] +[ext_resource type="Script" uid="uid://c0podasns5j2h" path="res://addons/godot-xr-tools/functions/movement_physical_jump.gd" id="1"] -[node name="MovementPhysicalJump" type="Node" groups=["movement_providers"]] +[node name="MovementPhysicalJump" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") -arms_jump_enable = true diff --git a/addons/godot-xr-tools/functions/movement_provider.gd b/addons/godot-xr-tools/functions/movement_provider.gd index 5ccc1a7..fc64846 100644 --- a/addons/godot-xr-tools/functions/movement_provider.gd +++ b/addons/godot-xr-tools/functions/movement_provider.gd @@ -1,7 +1,7 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/movement_provider.svg") class_name XRToolsMovementProvider -extends Node +extends Node3D ## XR Tools Movement Provider base class @@ -45,8 +45,8 @@ func _create_player_body_node(): # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementProvider" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementProvider" # Function run when node is added to scene diff --git a/addons/godot-xr-tools/functions/movement_provider.gd.uid b/addons/godot-xr-tools/functions/movement_provider.gd.uid new file mode 100644 index 0000000..197b0a8 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_provider.gd.uid @@ -0,0 +1 @@ +uid://i2t7j1aj60s0 diff --git a/addons/godot-xr-tools/functions/movement_sprint.gd b/addons/godot-xr-tools/functions/movement_sprint.gd index 6cd96b3..504ef1d 100644 --- a/addons/godot-xr-tools/functions/movement_sprint.gd +++ b/addons/godot-xr-tools/functions/movement_sprint.gd @@ -24,7 +24,7 @@ signal sprinting_finished() ## developer to assign the sprint button to either controller. enum SprintController { LEFT, ## Use left controller - RIGHT, ## Use right controler + RIGHT, ## Use right controller } ## Enumeration of sprinting modes - toggle or hold button @@ -72,8 +72,8 @@ var _right_controller_original_max_speed : float = 0.0 # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementSprint" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementSprint" or super(xr_name) func _ready(): diff --git a/addons/godot-xr-tools/functions/movement_sprint.gd.uid b/addons/godot-xr-tools/functions/movement_sprint.gd.uid new file mode 100644 index 0000000..0212e45 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_sprint.gd.uid @@ -0,0 +1 @@ +uid://cm2m0igkq32wy diff --git a/addons/godot-xr-tools/functions/movement_sprint.tscn b/addons/godot-xr-tools/functions/movement_sprint.tscn index 1d71468..9e5c748 100644 --- a/addons/godot-xr-tools/functions/movement_sprint.tscn +++ b/addons/godot-xr-tools/functions/movement_sprint.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://drs4eeq721ojn"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_sprint.gd" id="1"] +[ext_resource type="Script" uid="uid://cm2m0igkq32wy" path="res://addons/godot-xr-tools/functions/movement_sprint.gd" id="1"] -[node name="MovementSprint" type="Node" groups=["movement_providers"]] +[node name="MovementSprint" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_turn.gd b/addons/godot-xr-tools/functions/movement_turn.gd index 551ad69..0d5e050 100644 --- a/addons/godot-xr-tools/functions/movement_turn.gd +++ b/addons/godot-xr-tools/functions/movement_turn.gd @@ -40,18 +40,28 @@ var _turn_step : float = 0.0 # Controller node -@onready var _controller := XRHelpers.get_xr_controller(self) +var _controller : XRController3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementTurn" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementTurn" or super(xr_name) + + +# Called when our node is added to our scene tree +func _enter_tree(): + _controller = XRHelpers.get_xr_controller(self) + + +# Called when our node is removed from our scene tree +func _exit_tree(): + _controller = null # Perform jump movement func physics_movement(delta: float, player_body: XRToolsPlayerBody, _disabled: bool): # Skip if the controller isn't active - if !_controller.get_is_active(): + if not _controller or not _controller.get_is_active(): return var deadzone = 0.1 @@ -92,7 +102,7 @@ func _get_configuration_warnings() -> PackedStringArray: var warnings := super() # Check the controller node - if !XRHelpers.get_xr_controller(self): + if not XRHelpers.get_xr_controller(self): warnings.append("Unable to find XRController3D node") # Return warnings diff --git a/addons/godot-xr-tools/functions/movement_turn.gd.uid b/addons/godot-xr-tools/functions/movement_turn.gd.uid new file mode 100644 index 0000000..8dfcc88 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_turn.gd.uid @@ -0,0 +1 @@ +uid://kuxqh057vr5y diff --git a/addons/godot-xr-tools/functions/movement_turn.tscn b/addons/godot-xr-tools/functions/movement_turn.tscn index 8ae0f7d..643c7ea 100644 --- a/addons/godot-xr-tools/functions/movement_turn.tscn +++ b/addons/godot-xr-tools/functions/movement_turn.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://b6bk2pj8vbj28"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_turn.gd" id="1"] +[ext_resource type="Script" uid="uid://kuxqh057vr5y" path="res://addons/godot-xr-tools/functions/movement_turn.gd" id="1"] -[node name="MovementTurn" type="Node" groups=["movement_providers"]] +[node name="MovementTurn" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_wall_walk.gd.uid b/addons/godot-xr-tools/functions/movement_wall_walk.gd.uid new file mode 100644 index 0000000..19a634b --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_wall_walk.gd.uid @@ -0,0 +1 @@ +uid://bv4jc67lcmo75 diff --git a/addons/godot-xr-tools/functions/movement_wall_walk.tscn b/addons/godot-xr-tools/functions/movement_wall_walk.tscn index 664f332..d2db7ac 100644 --- a/addons/godot-xr-tools/functions/movement_wall_walk.tscn +++ b/addons/godot-xr-tools/functions/movement_wall_walk.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bk6ban0hctyym"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_wall_walk.gd" id="1"] +[ext_resource type="Script" uid="uid://bv4jc67lcmo75" path="res://addons/godot-xr-tools/functions/movement_wall_walk.gd" id="1"] -[node name="MovementWallWalk" type="Node" groups=["movement_providers"]] +[node name="MovementWallWalk" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_wind.gd b/addons/godot-xr-tools/functions/movement_wind.gd index d24a345..f595840 100644 --- a/addons/godot-xr-tools/functions/movement_wind.gd +++ b/addons/godot-xr-tools/functions/movement_wind.gd @@ -41,8 +41,8 @@ var _active_wind_area : XRToolsWindArea # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementWind" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementWind" or super(xr_name) # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/functions/movement_wind.gd.uid b/addons/godot-xr-tools/functions/movement_wind.gd.uid new file mode 100644 index 0000000..9c2df76 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_wind.gd.uid @@ -0,0 +1 @@ +uid://oexcdd5m45l8 diff --git a/addons/godot-xr-tools/functions/movement_wind.tscn b/addons/godot-xr-tools/functions/movement_wind.tscn index 2461b1a..7c53bed 100644 --- a/addons/godot-xr-tools/functions/movement_wind.tscn +++ b/addons/godot-xr-tools/functions/movement_wind.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bgts3vpmjn6bb"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_wind.gd" id="1"] +[ext_resource type="Script" uid="uid://oexcdd5m45l8" path="res://addons/godot-xr-tools/functions/movement_wind.gd" id="1"] -[node name="MovementWind" type="Node" groups=["movement_providers"]] +[node name="MovementWind" type="Node3D" groups=["movement_providers"]] script = ExtResource("1") diff --git a/addons/godot-xr-tools/functions/movement_world_grab.gd b/addons/godot-xr-tools/functions/movement_world_grab.gd index ea6b144..43d1af7 100644 --- a/addons/godot-xr-tools/functions/movement_world_grab.gd +++ b/addons/godot-xr-tools/functions/movement_world_grab.gd @@ -52,8 +52,8 @@ var _right_handle : Node3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMovementGrabWorld" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMovementGrabWorld" or super(xr_name) # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/functions/movement_world_grab.gd.uid b/addons/godot-xr-tools/functions/movement_world_grab.gd.uid new file mode 100644 index 0000000..ce53e80 --- /dev/null +++ b/addons/godot-xr-tools/functions/movement_world_grab.gd.uid @@ -0,0 +1 @@ +uid://bgq1jyvtogcll diff --git a/addons/godot-xr-tools/functions/movement_world_grab.tscn b/addons/godot-xr-tools/functions/movement_world_grab.tscn index 987cc7e..62e3dc5 100644 --- a/addons/godot-xr-tools/functions/movement_world_grab.tscn +++ b/addons/godot-xr-tools/functions/movement_world_grab.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dg3gr6ofd8yx4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/functions/movement_world_grab.gd" id="1_0qp8q"] +[ext_resource type="Script" uid="uid://bgq1jyvtogcll" path="res://addons/godot-xr-tools/functions/movement_world_grab.gd" id="1_0qp8q"] -[node name="MovementWorldGrab" type="Node" groups=["movement_providers"]] +[node name="MovementWorldGrab" type="Node3D" groups=["movement_providers"]] script = ExtResource("1_0qp8q") diff --git a/addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn b/addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn index 3a4374c..771c351 100644 --- a/addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn +++ b/addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn @@ -38,41 +38,41 @@ [sub_resource type="AnimationLibrary" id="AnimationLibrary_kw48d"] _data = { -"Cup": ExtResource("1_7svyl"), -"Default pose": ExtResource("2_ykhfd"), -"Grip": ExtResource("9_811qe"), -"Grip 1": ExtResource("3_y80ds"), -"Grip 2": ExtResource("4_1nbr8"), -"Grip 3": ExtResource("5_28lp1"), -"Grip 4": ExtResource("6_uj648"), -"Grip 5": ExtResource("7_yxjeh"), -"Grip Shaft": ExtResource("8_i0ro5"), -"Hold": ExtResource("10_o5u3q"), -"Horns": ExtResource("11_i2b8g"), -"Metal": ExtResource("12_yoig6"), -"Middle": ExtResource("13_kvhwh"), -"OK": ExtResource("14_ofab3"), -"Peace": ExtResource("15_a4q3y"), -"Pinch Flat": ExtResource("16_ixe2d"), -"Pinch Large": ExtResource("17_oifug"), -"Pinch Middle": ExtResource("18_2ic2e"), -"Pinch Ring": ExtResource("19_4a8v4"), -"Pinch Tight": ExtResource("20_ugc01"), -"Pinch Up": ExtResource("21_l3kgg"), -"PingPong": ExtResource("22_j83er"), -"Pinky": ExtResource("23_sm4sd"), -"Pistol": ExtResource("24_r4kss"), -"Ring": ExtResource("25_2ncut"), -"Rounded": ExtResource("26_02lfv"), -"Sign 1": ExtResource("27_o5si3"), -"Sign 2": ExtResource("28_ble5k"), -"Sign 3": ExtResource("29_twq1x"), -"Sign 4": ExtResource("30_eyeuv"), -"Sign 5": ExtResource("31_50jrs"), -"Sign_Point": ExtResource("32_7v122"), -"Straight": ExtResource("33_m3lif"), -"Surfer": ExtResource("34_b3p10"), -"Thumb": ExtResource("35_huikq") +&"Cup": ExtResource("1_7svyl"), +&"Default pose": ExtResource("2_ykhfd"), +&"Grip": ExtResource("9_811qe"), +&"Grip 1": ExtResource("3_y80ds"), +&"Grip 2": ExtResource("4_1nbr8"), +&"Grip 3": ExtResource("5_28lp1"), +&"Grip 4": ExtResource("6_uj648"), +&"Grip 5": ExtResource("7_yxjeh"), +&"Grip Shaft": ExtResource("8_i0ro5"), +&"Hold": ExtResource("10_o5u3q"), +&"Horns": ExtResource("11_i2b8g"), +&"Metal": ExtResource("12_yoig6"), +&"Middle": ExtResource("13_kvhwh"), +&"OK": ExtResource("14_ofab3"), +&"Peace": ExtResource("15_a4q3y"), +&"Pinch Flat": ExtResource("16_ixe2d"), +&"Pinch Large": ExtResource("17_oifug"), +&"Pinch Middle": ExtResource("18_2ic2e"), +&"Pinch Ring": ExtResource("19_4a8v4"), +&"Pinch Tight": ExtResource("20_ugc01"), +&"Pinch Up": ExtResource("21_l3kgg"), +&"PingPong": ExtResource("22_j83er"), +&"Pinky": ExtResource("23_sm4sd"), +&"Pistol": ExtResource("24_r4kss"), +&"Ring": ExtResource("25_2ncut"), +&"Rounded": ExtResource("26_02lfv"), +&"Sign 1": ExtResource("27_o5si3"), +&"Sign 2": ExtResource("28_ble5k"), +&"Sign 3": ExtResource("29_twq1x"), +&"Sign 4": ExtResource("30_eyeuv"), +&"Sign 5": ExtResource("31_50jrs"), +&"Sign_Point": ExtResource("32_7v122"), +&"Straight": ExtResource("33_m3lif"), +&"Surfer": ExtResource("34_b3p10"), +&"Thumb": ExtResource("35_huikq") } [node name="AnimationPlayer" type="AnimationPlayer"] diff --git a/addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres b/addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres index 011abdb..8df1832 100644 --- a/addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres +++ b/addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres @@ -1,4 +1,4 @@ -[gd_resource type="AnimationNodeBlendTree" load_steps=6 format=3 uid="uid://dl8yf7ipqotd1"] +[gd_resource type="AnimationNodeBlendTree" format=3 uid="uid://dl8yf7ipqotd1"] [sub_resource type="AnimationNodeAnimation" id="1"] animation = &"Grip" @@ -29,4 +29,4 @@ nodes/OpenHand/node = SubResource("4") nodes/OpenHand/position = Vector2(-600, 100) nodes/Trigger/node = SubResource("5") nodes/Trigger/position = Vector2(-360, 20) -node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] +node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"] diff --git a/addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn b/addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn index a18d2d2..812f49f 100644 --- a/addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn +++ b/addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn @@ -38,41 +38,41 @@ [sub_resource type="AnimationLibrary" id="AnimationLibrary_reqae"] _data = { -"Cup": ExtResource("1_mq7eu"), -"Default pose": ExtResource("2_kxlaj"), -"Grip": ExtResource("9_y16mo"), -"Grip 1": ExtResource("3_5xubn"), -"Grip 2": ExtResource("4_y3ovo"), -"Grip 3": ExtResource("5_0d4pg"), -"Grip 4": ExtResource("6_nabm2"), -"Grip 5": ExtResource("7_gy2yb"), -"Grip Shaft": ExtResource("8_ffwxq"), -"Hold": ExtResource("10_g8e21"), -"Horns": ExtResource("11_b3lks"), -"Metal": ExtResource("12_p14fk"), -"Middle": ExtResource("13_4i278"), -"OK": ExtResource("14_qk7tg"), -"Peace": ExtResource("15_ejppt"), -"Pinch Flat": ExtResource("16_7cyln"), -"Pinch Large": ExtResource("17_amtgc"), -"Pinch Middle": ExtResource("18_pnqcq"), -"Pinch Ring": ExtResource("19_aeaff"), -"Pinch Tight": ExtResource("20_mghnf"), -"Pinch Up": ExtResource("21_1v6tw"), -"PingPong": ExtResource("22_ueac0"), -"Pinky": ExtResource("23_7vyi4"), -"Pistol": ExtResource("24_nc600"), -"Ring": ExtResource("25_20nj0"), -"Rounded": ExtResource("26_648rb"), -"Sign 1": ExtResource("27_liq3y"), -"Sign 2": ExtResource("28_vdv8x"), -"Sign 3": ExtResource("29_uairn"), -"Sign 4": ExtResource("30_351lm"), -"Sign 5": ExtResource("31_o4yst"), -"Sign_Point": ExtResource("32_02kj7"), -"Straight": ExtResource("33_gpxgh"), -"Surfer": ExtResource("34_ldn4j"), -"Thumb": ExtResource("35_xnxq3") +&"Cup": ExtResource("1_mq7eu"), +&"Default pose": ExtResource("2_kxlaj"), +&"Grip": ExtResource("9_y16mo"), +&"Grip 1": ExtResource("3_5xubn"), +&"Grip 2": ExtResource("4_y3ovo"), +&"Grip 3": ExtResource("5_0d4pg"), +&"Grip 4": ExtResource("6_nabm2"), +&"Grip 5": ExtResource("7_gy2yb"), +&"Grip Shaft": ExtResource("8_ffwxq"), +&"Hold": ExtResource("10_g8e21"), +&"Horns": ExtResource("11_b3lks"), +&"Metal": ExtResource("12_p14fk"), +&"Middle": ExtResource("13_4i278"), +&"OK": ExtResource("14_qk7tg"), +&"Peace": ExtResource("15_ejppt"), +&"Pinch Flat": ExtResource("16_7cyln"), +&"Pinch Large": ExtResource("17_amtgc"), +&"Pinch Middle": ExtResource("18_pnqcq"), +&"Pinch Ring": ExtResource("19_aeaff"), +&"Pinch Tight": ExtResource("20_mghnf"), +&"Pinch Up": ExtResource("21_1v6tw"), +&"PingPong": ExtResource("22_ueac0"), +&"Pinky": ExtResource("23_7vyi4"), +&"Pistol": ExtResource("24_nc600"), +&"Ring": ExtResource("25_20nj0"), +&"Rounded": ExtResource("26_648rb"), +&"Sign 1": ExtResource("27_liq3y"), +&"Sign 2": ExtResource("28_vdv8x"), +&"Sign 3": ExtResource("29_uairn"), +&"Sign 4": ExtResource("30_351lm"), +&"Sign 5": ExtResource("31_o4yst"), +&"Sign_Point": ExtResource("32_02kj7"), +&"Straight": ExtResource("33_gpxgh"), +&"Surfer": ExtResource("34_ldn4j"), +&"Thumb": ExtResource("35_xnxq3") } [node name="AnimationPlayer" type="AnimationPlayer"] diff --git a/addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres b/addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres index f1d41a1..c7016b7 100644 --- a/addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres +++ b/addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres @@ -1,4 +1,4 @@ -[gd_resource type="AnimationNodeBlendTree" load_steps=6 format=3 uid="uid://m85b1gogdums"] +[gd_resource type="AnimationNodeBlendTree" format=3 uid="uid://m85b1gogdums"] [sub_resource type="AnimationNodeAnimation" id="1"] animation = &"Grip" @@ -29,4 +29,4 @@ nodes/OpenHand/node = SubResource("3") nodes/OpenHand/position = Vector2(-600, 100) nodes/Trigger/node = SubResource("5") nodes/Trigger/position = Vector2(-360, 40) -node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] +node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"] diff --git a/addons/godot-xr-tools/hands/collision_hand.gd b/addons/godot-xr-tools/hands/collision_hand.gd index 223b8aa..626631c 100644 --- a/addons/godot-xr-tools/hands/collision_hand.gd +++ b/addons/godot-xr-tools/hands/collision_hand.gd @@ -117,8 +117,8 @@ func set_held_weight(new_weight): # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsCollisionHand" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsCollisionHand" # Return warnings related to this node @@ -268,7 +268,6 @@ func _move_to_target(delta): # Handle too far from target if global_position.distance_to(_target.global_position) > TELEPORT_DISTANCE: - print("max distance reached") max_distance_reached.emit() global_transform = _target.global_transform diff --git a/addons/godot-xr-tools/hands/collision_hand.gd.uid b/addons/godot-xr-tools/hands/collision_hand.gd.uid new file mode 100644 index 0000000..9e2c4a6 --- /dev/null +++ b/addons/godot-xr-tools/hands/collision_hand.gd.uid @@ -0,0 +1 @@ +uid://c8vnltn217quj diff --git a/addons/godot-xr-tools/hands/hand.gd b/addons/godot-xr-tools/hands/hand.gd index 339e5f1..f4db4fe 100644 --- a/addons/godot-xr-tools/hands/hand.gd +++ b/addons/godot-xr-tools/hands/hand.gd @@ -1,7 +1,7 @@ @tool @icon("res://addons/godot-xr-tools/editor/icons/hand.svg") class_name XRToolsHand -extends Node3D +extends XRToolsHandPalmOffset ## XR Tools Hand Script @@ -17,7 +17,6 @@ extends Node3D ## Signal emitted when the hand scale changes signal hand_scale_changed(scale) - ## Blend tree to use @export var hand_blend_tree : AnimationNodeBlendTree: set = set_hand_blend_tree @@ -33,13 +32,9 @@ signal hand_scale_changed(scale) ## Name of the Trigger action in the OpenXR Action Map. @export var trigger_action : String = "trigger" - ## Last world scale (for scaling hands) var _last_world_scale : float = 1.0 -## Controller used for input/tracking -var _controller : XRController3D - ## Initial hand transform (from controller) - used for scaling hands var _initial_transform : Transform3D @@ -107,8 +102,8 @@ class TargetOverride: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHand" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHand" ## Called when the node enters the scene tree for the first time. @@ -124,9 +119,6 @@ func _ready() -> void: top_level = true process_physics_priority = -70 - # Find our controller - _controller = XRTools.find_xr_ancestor(self, "*", "XRController3D") - # Find the relevant hand nodes _hand_mesh = _find_child(self, "MeshInstance3D") _animation_player = _find_child(self, "AnimationPlayer") @@ -139,11 +131,30 @@ func _ready() -> void: _update_target() +# Called when we get added to our tree +func _enter_tree(): + # Assume our first child is our hand subscene, we position this + var child = get_child(0) + if child: + set_apply_to(child) + + super._enter_tree() + + # Offset our hand + var base_transform = Transform3D() + if _controller and _controller.tracker == "left_hand": + base_transform.origin = Vector3(-0.01, 0.0, 0.05) + else: + base_transform.origin = Vector3(0.01, 0.0, 0.05) + + set_base_transform(base_transform) + + ## This method checks for world-scale changes and scales itself causing the ## hand mesh and skeleton to scale appropriately. It then reads the grip and ## trigger action values to animate the hand. func _physics_process(_delta: float) -> void: - # Do not run physics if in the editor + # Do not run the rest of physics if in the editor if Engine.is_editor_hint(): return @@ -166,13 +177,21 @@ func _physics_process(_delta: float) -> void: $AnimationTree.set("parameters/Trigger/blend_amount", trigger) # Move to target - global_transform = _target.global_transform * _transform + var target_transform : Transform3D + if _target is XRToolsGrabPointHand: + target_transform = _target.get_palm_transform(true) + if hand_offset_mode != 4: + target_transform = target_transform * XRTools.get_palm_offset(hand_offset_mode, _controller).inverse() + else: + target_transform = _target.global_transform + + global_transform = target_transform * _transform force_update_transform() # This method verifies the hand has a valid configuration. func _get_configuration_warnings() -> PackedStringArray: - var warnings := PackedStringArray() + var warnings : PackedStringArray = super._get_configuration_warnings() # Check hand for mesh instance if not _find_child(self, "MeshInstance3D"): @@ -222,6 +241,15 @@ static func find_right(node : Node) -> XRToolsHand: "XRToolsHand") as XRToolsHand +# Check property config +func _validate_property(property): + if property.name == "top_level": + # Hide it! + property.usage = PROPERTY_USAGE_NONE + else: + super._validate_property(property) + + ## Set the blend tree func set_hand_blend_tree(blend_tree : AnimationNodeBlendTree) -> void: hand_blend_tree = blend_tree diff --git a/addons/godot-xr-tools/hands/hand.gd.uid b/addons/godot-xr-tools/hands/hand.gd.uid new file mode 100644 index 0000000..5a9c2e8 --- /dev/null +++ b/addons/godot-xr-tools/hands/hand.gd.uid @@ -0,0 +1 @@ +uid://cnwtovj4mqc45 diff --git a/addons/godot-xr-tools/hands/hand_aim_offset.gd b/addons/godot-xr-tools/hands/hand_aim_offset.gd new file mode 100644 index 0000000..92b1089 --- /dev/null +++ b/addons/godot-xr-tools/hands/hand_aim_offset.gd @@ -0,0 +1,96 @@ +@tool +class_name XRToolsHandAimOffset +extends Node3D + +## XRToolsHandAimOffset will automatically adjust its position, +## to the aim position (within limits). + +## Hand offset to apply based on our controller pose +## You can use auto if you're using the default aim_pose or grip_pose poses. +@export_enum("auto", "aim", "grip", "palm", "disable") var hand_offset_mode : int = 0: + set(value): + hand_offset_mode = value + notify_property_list_changed() + if is_inside_tree(): + _update_transform() + +# Controller +var _controller : XRController3D + +# Keep track of our tracker and pose +var _controller_tracker_and_pose : String = "" + +# Which node are we applying our transform on? +var _apply_to : Node3D + +# Additional transform to apply +var _base_transform : Transform3D = Transform3D() + +## Add support for is_xr_class on XRTools classes +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHandAimOffset" + + +## Set the node we apply our transform to +## Must be set before _enter_tree is called for the first time. +func set_apply_to(node : Node3D) -> void: + _apply_to = node + + +## Set a base transform to apply +func set_base_transform(base_transform : Transform3D) -> void: + _base_transform = base_transform + if is_inside_tree(): + _update_transform() + + +# Called when we're added to the tree +func _enter_tree(): + if not _apply_to: + _apply_to = self + + _controller = XRHelpers.get_xr_controller(self) + + _update_transform() + + +# Called when we exit the tree +func _exit_tree(): + if _controller: + _controller = null + + +# Check property config +func _validate_property(property): + if hand_offset_mode != 4 and (property.name == "position" or property.name == "rotation" or property.name == "scale" or property.name == "rotation_edit_mode" or property.name == "rotation_order"): + # We control these, don't let the user set them. + property.usage = PROPERTY_USAGE_NONE + + +# This method verifies the hand has a valid configuration. +func _get_configuration_warnings() -> PackedStringArray: + var warnings := PackedStringArray() + + # Check for XR Controller + var controller = XRHelpers.get_xr_controller(self) + if not controller: + warnings.append("Hand should descent from an XRController3D node") + + return warnings + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta): + # If we have a controller, make sure our hand transform is updated when needed. + if _controller: + var tracker_and_pose = _controller.tracker + "." + _controller.pose + if _controller_tracker_and_pose != tracker_and_pose: + _controller_tracker_and_pose = tracker_and_pose + if hand_offset_mode == 0: + _update_transform() + + +# Update our transform so we are positioned on our aim pose +func _update_transform() -> void: + if _apply_to and hand_offset_mode != 4: + _apply_to.transform = XRTools.get_aim_offset(hand_offset_mode, _controller) * _base_transform diff --git a/addons/godot-xr-tools/hands/hand_aim_offset.gd.uid b/addons/godot-xr-tools/hands/hand_aim_offset.gd.uid new file mode 100644 index 0000000..c7659cd --- /dev/null +++ b/addons/godot-xr-tools/hands/hand_aim_offset.gd.uid @@ -0,0 +1 @@ +uid://bhjb6f4bslawl diff --git a/addons/godot-xr-tools/hands/hand_palm_offset.gd b/addons/godot-xr-tools/hands/hand_palm_offset.gd new file mode 100644 index 0000000..8854094 --- /dev/null +++ b/addons/godot-xr-tools/hands/hand_palm_offset.gd @@ -0,0 +1,100 @@ +@tool +class_name XRToolsHandPalmOffset +extends Node3D + +## XRToolsHandPalmOffset will automatically adjust its position, +## to locate the palm of a hand (within limits). + +## Hand offset to apply based on our controller pose +## You can use auto if you're using the default aim_pose or grip_pose poses. +@export_enum("auto", "aim", "grip", "palm", "disable") var hand_offset_mode : int = 0: + set(value): + hand_offset_mode = value + notify_property_list_changed() + if is_inside_tree(): + _update_transform() + +# Controller +var _controller : XRController3D + +# Keep track of our tracker and pose +var _controller_tracker_and_pose : String = "" + +# Which node are we applying our transform on? +var _apply_to : Node3D + +# Additional transform to apply +var _base_transform : Transform3D = Transform3D() + +## Add support for is_xr_class on XRTools classes +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHandAimOffset" + + +## Set the node we apply our transform to +## Must be set before _enter_tree is called for the first time. +func set_apply_to(node : Node3D) -> void: + _apply_to = node + + +## Set a base transform to apply +func set_base_transform(base_transform : Transform3D) -> void: + _base_transform = base_transform + if is_inside_tree(): + _update_transform() + + +# Called when we're added to the tree +func _enter_tree(): + if not _apply_to: + _apply_to = self + + _controller = XRHelpers.get_xr_controller(self) + + _update_transform() + + +# Called when we exit the tree +func _exit_tree(): + if _controller: + _controller = null + + +# Check property config +func _validate_property(property): + if hand_offset_mode != 4 and (property.name == "position" or property.name == "rotation" or property.name == "scale" or property.name == "rotation_edit_mode" or property.name == "rotation_order"): + # We control these, don't let the user set them. + property.usage = PROPERTY_USAGE_NONE + + +# This method verifies the hand has a valid configuration. +func _get_configuration_warnings() -> PackedStringArray: + var warnings := PackedStringArray() + + # Check for XR Controller + var controller = XRHelpers.get_xr_controller(self) + if not controller: + warnings.append("Hand should descent from an XRController3D node") + elif controller.pose == "aim": + # FIXME we don't get a refresh when the pose changes, + # so this doesn't clear until a scene is reloaded... + warnings.append("The aim pose is no longer suitable for hand position, consider using the grip pose instead") + + return warnings + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta): + # If we have a controller, make sure our hand transform is updated when needed. + if _controller: + var tracker_and_pose = _controller.tracker + "." + _controller.pose + if _controller_tracker_and_pose != tracker_and_pose: + _controller_tracker_and_pose = tracker_and_pose + if hand_offset_mode == 0: + _update_transform() + + +# Update our transform so we are positioned on our palm +func _update_transform() -> void: + if _apply_to and hand_offset_mode != 4: + _apply_to.transform = XRTools.get_palm_offset(hand_offset_mode, _controller) * _base_transform diff --git a/addons/godot-xr-tools/hands/hand_palm_offset.gd.uid b/addons/godot-xr-tools/hands/hand_palm_offset.gd.uid new file mode 100644 index 0000000..8c46b4d --- /dev/null +++ b/addons/godot-xr-tools/hands/hand_palm_offset.gd.uid @@ -0,0 +1 @@ +uid://drbnpanwky1vo diff --git a/addons/godot-xr-tools/hands/hand_physics_bone.gd b/addons/godot-xr-tools/hands/hand_physics_bone.gd index 36b4f95..c8f789d 100644 --- a/addons/godot-xr-tools/hands/hand_physics_bone.gd +++ b/addons/godot-xr-tools/hands/hand_physics_bone.gd @@ -48,8 +48,8 @@ var _skeletal_bone : Node3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHandPhysicsBone" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHandPhysicsBone" # Called when the node enters the scene tree. This constructs the physics-bone diff --git a/addons/godot-xr-tools/hands/hand_physics_bone.gd.uid b/addons/godot-xr-tools/hands/hand_physics_bone.gd.uid new file mode 100644 index 0000000..19c3c27 --- /dev/null +++ b/addons/godot-xr-tools/hands/hand_physics_bone.gd.uid @@ -0,0 +1 @@ +uid://bfo7c10rq6xuu diff --git a/addons/godot-xr-tools/hands/model/Hand_Glove_L.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Glove_L.gltf.import index 5fd6897..f126020 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Glove_L.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Glove_L.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Glove_R.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Glove_R.gltf.import index a8b395c..e145897 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Glove_R.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Glove_R.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Glove_low_L.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Glove_low_L.gltf.import index b438f66..256ce05 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Glove_low_L.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Glove_low_L.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Glove_low_R.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Glove_low_R.gltf.import index f88c858..b9074be 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Glove_low_R.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Glove_low_R.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Nails_L.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Nails_L.gltf.import index 4d5f754..6722d1d 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Nails_L.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Nails_L.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Nails_R.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Nails_R.gltf.import index 6bc8bc8..9f5072c 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Nails_R.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Nails_R.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Nails_low_L.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Nails_low_L.gltf.import index 0b5812e..032fa8f 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Nails_low_L.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Nails_low_L.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_Nails_low_R.gltf.import b/addons/godot-xr-tools/hands/model/Hand_Nails_low_R.gltf.import index 83abdf3..e9658e0 100644 --- a/addons/godot-xr-tools/hands/model/Hand_Nails_low_R.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_Nails_low_R.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_low_L.gltf.import b/addons/godot-xr-tools/hands/model/Hand_low_L.gltf.import index f971d53..fad6640 100644 --- a/addons/godot-xr-tools/hands/model/Hand_low_L.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_low_L.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/Hand_low_R.gltf.import b/addons/godot-xr-tools/hands/model/Hand_low_R.gltf.import index c04a6fd..78a383c 100644 --- a/addons/godot-xr-tools/hands/model/Hand_low_R.gltf.import +++ b/addons/godot-xr-tools/hands/model/Hand_low_R.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/hand_l.gltf.import b/addons/godot-xr-tools/hands/model/hand_l.gltf.import index c2b75c5..83639a9 100644 --- a/addons/godot-xr-tools/hands/model/hand_l.gltf.import +++ b/addons/godot-xr-tools/hands/model/hand_l.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/model/hand_r.gltf.import b/addons/godot-xr-tools/hands/model/hand_r.gltf.import index 487b748..3d9cdc1 100644 --- a/addons/godot-xr-tools/hands/model/hand_r.gltf.import +++ b/addons/godot-xr-tools/hands/model/hand_r.gltf.import @@ -18,6 +18,7 @@ nodes/root_name="Scene Root" nodes/apply_root_scale=true nodes/root_scale=1.0 nodes/import_as_skeleton_bones=false +nodes/use_node_type_suffixes=true meshes/ensure_tangents=true meshes/generate_lods=true meshes/create_shadow_meshes=true diff --git a/addons/godot-xr-tools/hands/physics_hand.gd b/addons/godot-xr-tools/hands/physics_hand.gd index 5934817..ce8c743 100644 --- a/addons/godot-xr-tools/hands/physics_hand.gd +++ b/addons/godot-xr-tools/hands/physics_hand.gd @@ -36,5 +36,5 @@ const DEFAULT_LAYER := 0b0000_0000_0000_0010_0000_0000_0000_0000 # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsPhysicsHand" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsPhysicsHand" or super(xr_name) diff --git a/addons/godot-xr-tools/hands/physics_hand.gd.uid b/addons/godot-xr-tools/hands/physics_hand.gd.uid new file mode 100644 index 0000000..8ec435d --- /dev/null +++ b/addons/godot-xr-tools/hands/physics_hand.gd.uid @@ -0,0 +1 @@ +uid://2vypvkq7n27l diff --git a/addons/godot-xr-tools/hands/poses/hand_pose_settings.gd.uid b/addons/godot-xr-tools/hands/poses/hand_pose_settings.gd.uid new file mode 100644 index 0000000..1a32cb9 --- /dev/null +++ b/addons/godot-xr-tools/hands/poses/hand_pose_settings.gd.uid @@ -0,0 +1 @@ +uid://dvobm6vcfnqe8 diff --git a/addons/godot-xr-tools/hands/poses/pose_default_left.tres b/addons/godot-xr-tools/hands/poses/pose_default_left.tres index 26ba106..deeb9dd 100644 --- a/addons/godot-xr-tools/hands/poses/pose_default_left.tres +++ b/addons/godot-xr-tools/hands/poses/pose_default_left.tres @@ -1,6 +1,6 @@ -[gd_resource type="Resource" load_steps=4 format=3 uid="uid://dertgu7k8alls"] +[gd_resource type="Resource" script_class="XRToolsHandPoseSettings" load_steps=4 format=3 uid="uid://dertgu7k8alls"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1"] +[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1"] [ext_resource type="Animation" uid="uid://plad1r85f7ws" path="res://addons/godot-xr-tools/hands/animations/left/Grip.res" id="1_oobiv"] [ext_resource type="Animation" uid="uid://bediglpx0rj7i" path="res://addons/godot-xr-tools/hands/animations/left/Grip 5.res" id="2_tar64"] diff --git a/addons/godot-xr-tools/hands/poses/pose_default_right.tres b/addons/godot-xr-tools/hands/poses/pose_default_right.tres index dc2430b..2f0ccc1 100644 --- a/addons/godot-xr-tools/hands/poses/pose_default_right.tres +++ b/addons/godot-xr-tools/hands/poses/pose_default_right.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=4 format=3 uid="uid://dmpjtk0l8vh6v"] +[gd_resource type="Resource" script_class="XRToolsHandPoseSettings" load_steps=4 format=3 uid="uid://dmpjtk0l8vh6v"] [ext_resource type="Animation" uid="uid://ccds2u22gbxn7" path="res://addons/godot-xr-tools/hands/animations/right/Grip.res" id="1_o7bqr"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1_ytvcl"] +[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1_ytvcl"] [ext_resource type="Animation" uid="uid://s1vqcxyqcvea" path="res://addons/godot-xr-tools/hands/animations/right/Grip 5.res" id="2_u3fe0"] [resource] diff --git a/addons/godot-xr-tools/hands/poses/pose_point_left.tres b/addons/godot-xr-tools/hands/poses/pose_point_left.tres index 267151a..af6d675 100644 --- a/addons/godot-xr-tools/hands/poses/pose_point_left.tres +++ b/addons/godot-xr-tools/hands/poses/pose_point_left.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=3 format=3 uid="uid://ciw0f7mg4ai0k"] +[gd_resource type="Resource" script_class="XRToolsHandPoseSettings" load_steps=3 format=3 uid="uid://ciw0f7mg4ai0k"] [ext_resource type="Animation" uid="uid://cevirj0eagdrq" path="res://addons/godot-xr-tools/hands/animations/left/Sign 1.res" id="1_idx1j"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1_oxfi3"] +[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1_oxfi3"] [resource] script = ExtResource("1_oxfi3") diff --git a/addons/godot-xr-tools/hands/poses/pose_point_right.tres b/addons/godot-xr-tools/hands/poses/pose_point_right.tres index b3bc9f2..032b8dc 100644 --- a/addons/godot-xr-tools/hands/poses/pose_point_right.tres +++ b/addons/godot-xr-tools/hands/poses/pose_point_right.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=3 format=3 uid="uid://bhvrpfo4ecbub"] +[gd_resource type="Resource" script_class="XRToolsHandPoseSettings" load_steps=3 format=3 uid="uid://bhvrpfo4ecbub"] [ext_resource type="Animation" uid="uid://bcwx6a6mhsoj2" path="res://addons/godot-xr-tools/hands/animations/right/Sign 1.res" id="1_jc8b4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1_pkv6s"] +[ext_resource type="Script" uid="uid://dvobm6vcfnqe8" path="res://addons/godot-xr-tools/hands/poses/hand_pose_settings.gd" id="1_pkv6s"] [resource] script = ExtResource("1_pkv6s") diff --git a/addons/godot-xr-tools/hands/scenes/collision/collision_hand.tscn b/addons/godot-xr-tools/hands/scenes/collision/collision_hand.tscn index b884f80..e76dc2d 100644 --- a/addons/godot-xr-tools/hands/scenes/collision/collision_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/collision/collision_hand.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://yrg5yt0yvc1q"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="1_vdcct"] +[ext_resource type="Script" uid="uid://c8vnltn217quj" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="1_vdcct"] [node name="XRToolsCollisionHand" type="AnimatableBody3D"] collision_layer = 131072 diff --git a/addons/godot-xr-tools/hands/scenes/collision/collision_hand_left.tscn b/addons/godot-xr-tools/hands/scenes/collision/collision_hand_left.tscn index 6175900..664d2a9 100644 --- a/addons/godot-xr-tools/hands/scenes/collision/collision_hand_left.tscn +++ b/addons/godot-xr-tools/hands/scenes/collision/collision_hand_left.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://bkv43ec6chcf3"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="1_t5acd"] +[ext_resource type="Script" uid="uid://c8vnltn217quj" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="1_t5acd"] [ext_resource type="Shape3D" uid="uid://uc7owi5j7ib0" path="res://addons/godot-xr-tools/hands/scenes/collision/hand_palm.shape" id="2_5wm8j"] [node name="CollisionHandLeft" type="AnimatableBody3D"] diff --git a/addons/godot-xr-tools/hands/scenes/collision/collision_hand_right.tscn b/addons/godot-xr-tools/hands/scenes/collision/collision_hand_right.tscn index 64ddfbd..6b6703b 100644 --- a/addons/godot-xr-tools/hands/scenes/collision/collision_hand_right.tscn +++ b/addons/godot-xr-tools/hands/scenes/collision/collision_hand_right.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://c3uoohvnshach"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="1_so3hf"] +[ext_resource type="Script" uid="uid://c8vnltn217quj" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="1_so3hf"] [ext_resource type="Shape3D" uid="uid://uc7owi5j7ib0" path="res://addons/godot-xr-tools/hands/scenes/collision/hand_palm.shape" id="2_vvxfo"] [node name="CollisionHandRight" type="AnimatableBody3D"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn index ade0cc3..2ac1e57 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_hand.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://dhaqth6q5yw4n" path="res://addons/godot-xr-tools/hands/model/hand_l.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_x4lr3"] [ext_resource type="Material" uid="uid://cdb40djkihelq" path="res://addons/godot-xr-tools/hands/materials/cleaning_glove.tres" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="6"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn index 029fb56..e80f1a5 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_fullglove_physics_hand.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://dhaqth6q5yw4n" path="res://addons/godot-xr-tools/hands/model/hand_l.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_0aa1r"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://ds2dpvbpht0ea" path="res://addons/godot-xr-tools/hands/materials/labglove.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="9"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn index 340955a..4e25300 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_hand.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://q1l3fknstir2" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_L.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_k56uy"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="5"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="6"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn index 2cbb6b7..2df9143 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_hand.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://q1l3fknstir2" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_L.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_fye1l"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="9"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn index 3560444..06b3aec 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_physics_tac_glove.tscn @@ -5,8 +5,8 @@ [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_rnhp7"] [ext_resource type="Material" uid="uid://dogla70w8hvo8" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_dark_camo.tres" id="4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_mq2ds"] animation = &"Grip" diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn index c40a020..64b0907 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/left_tac_glove.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://bu07alt6vkbaq" path="res://addons/godot-xr-tools/hands/model/Hand_Glove_L.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_s33di"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="4"] [ext_resource type="Material" uid="uid://f2uhcqq8s2jx" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_green_camo.tres" id="5"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn index 9b03b4c..fa43658 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_hand.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://ds1t8vc0kxoeo" path="res://addons/godot-xr-tools/hands/model/hand_r.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_xmpie"] [ext_resource type="Material" uid="uid://cdb40djkihelq" path="res://addons/godot-xr-tools/hands/materials/cleaning_glove.tres" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="6"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn index 268eb05..cf9faa7 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_fullglove_physics_hand.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://ds1t8vc0kxoeo" path="res://addons/godot-xr-tools/hands/model/hand_r.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_23oai"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://ds2dpvbpht0ea" path="res://addons/godot-xr-tools/hands/materials/labglove.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="7"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn index a9f5f85..818105c 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_hand.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://c6s5nvekg0isa" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_R.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_lydk3"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="6"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn index 811efc4..ba93ca8 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_hand.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://c6s5nvekg0isa" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_R.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_gqplw"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="7"] diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn index 6a9c789..41657be 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_physics_tac_glove.tscn @@ -5,8 +5,8 @@ [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_h0fv3"] [ext_resource type="Material" uid="uid://dogla70w8hvo8" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_dark_camo.tres" id="4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_eynss"] animation = &"Grip" diff --git a/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn b/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn index 6e3b7c7..a63304d 100644 --- a/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn +++ b/addons/godot-xr-tools/hands/scenes/highpoly/right_tac_glove.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://w7th3d2hl7b5" path="res://addons/godot-xr-tools/hands/model/Hand_Glove_R.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_3ih8a"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="4"] [ext_resource type="Material" uid="uid://f2uhcqq8s2jx" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_green_camo.tres" id="5"] diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn index d19d923..7fb9e0d 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_fullglove_low.tscn @@ -2,39 +2,39 @@ [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://16colgxrw27d" path="res://addons/godot-xr-tools/hands/model/Hand_low_L.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_wyae6"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="5"] [ext_resource type="Material" uid="uid://cdb40djkihelq" path="res://addons/godot-xr-tools/hands/materials/cleaning_glove.tres" id="6"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_qtto3"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_cbo75"] animation = &"Grip" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_4i0yd"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_4obwe"] animation = &"Grip" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_fahbc"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_y7qwp"] filter_enabled = true filters = ["Armature/Skeleton3D:Little_Distal_L", "Armature/Skeleton3D:Little_Intermediate_L", "Armature/Skeleton3D:Little_Metacarpal_L", "Armature/Skeleton3D:Little_Proximal_L", "Armature/Skeleton3D:Middle_Distal_L", "Armature/Skeleton3D:Middle_Intermediate_L", "Armature/Skeleton3D:Middle_Metacarpal_L", "Armature/Skeleton3D:Middle_Proximal_L", "Armature/Skeleton3D:Ring_Distal_L", "Armature/Skeleton3D:Ring_Intermediate_L", "Armature/Skeleton3D:Ring_Metacarpal_L", "Armature/Skeleton3D:Ring_Proximal_L", "Armature/Skeleton3D:Thumb_Distal_L", "Armature/Skeleton3D:Thumb_Metacarpal_L", "Armature/Skeleton3D:Thumb_Proximal_L", "Armature/Skeleton:Little_Distal_L", "Armature/Skeleton:Little_Intermediate_L", "Armature/Skeleton:Little_Proximal_L", "Armature/Skeleton:Middle_Distal_L", "Armature/Skeleton:Middle_Intermediate_L", "Armature/Skeleton:Middle_Proximal_L", "Armature/Skeleton:Ring_Distal_L", "Armature/Skeleton:Ring_Intermediate_L", "Armature/Skeleton:Ring_Proximal_L", "Armature/Skeleton:Thumb_Distal_L", "Armature/Skeleton:Thumb_Proximal_L"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_470u2"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_0qsn2"] animation = &"Grip 5" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_fhgyt"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_hwtfy"] filter_enabled = true filters = ["Armature/Skeleton3D:Index_Distal_L", "Armature/Skeleton3D:Index_Intermediate_L", "Armature/Skeleton3D:Index_Metacarpal_L", "Armature/Skeleton3D:Index_Proximal_L", "Armature/Skeleton:Index_Distal_L", "Armature/Skeleton:Index_Intermediate_L", "Armature/Skeleton:Index_Proximal_L"] -[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_d6sxb"] +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_ppujx"] graph_offset = Vector2(-536, 11) -nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_qtto3") +nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_cbo75") nodes/ClosedHand1/position = Vector2(-600, 300) -nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_4i0yd") +nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_4obwe") nodes/ClosedHand2/position = Vector2(-360, 300) -nodes/Grip/node = SubResource("AnimationNodeBlend2_fahbc") +nodes/Grip/node = SubResource("AnimationNodeBlend2_y7qwp") nodes/Grip/position = Vector2(0, 20) -nodes/OpenHand/node = SubResource("AnimationNodeAnimation_470u2") +nodes/OpenHand/node = SubResource("AnimationNodeAnimation_0qsn2") nodes/OpenHand/position = Vector2(-600, 100) -nodes/Trigger/node = SubResource("AnimationNodeBlend2_fhgyt") +nodes/Trigger/node = SubResource("AnimationNodeBlend2_hwtfy") nodes/Trigger/position = Vector2(-360, 20) node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] @@ -44,10 +44,10 @@ hand_blend_tree = ExtResource("5") default_pose = ExtResource("3_wyae6") [node name="Hand_low_L" parent="." instance=ExtResource("2")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.03, -0.05, 0.15) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.01, 0, 0.05) [node name="Skeleton3D" parent="Hand_low_L/Armature" index="0"] -bones/1/rotation = Quaternion(0.323537, -2.56577e-05, -0.0272204, 0.945824) +bones/1/rotation = Quaternion(0.323537, -2.56581e-05, -0.0272204, 0.945824) bones/2/rotation = Quaternion(-0.0904441, -0.0415175, -0.166293, 0.981042) bones/3/rotation = Quaternion(-0.0466199, 0.020971, 0.0103276, 0.998639) bones/5/rotation = Quaternion(-0.00128455, -0.0116081, -0.0168259, 0.99979) @@ -73,9 +73,9 @@ surface_material_override/0 = ExtResource("6") [node name="AnimationPlayer" parent="Hand_low_L" instance=ExtResource("1")] [node name="AnimationTree" type="AnimationTree" parent="."] -tree_root = SubResource("AnimationNodeBlendTree_d6sxb") +root_node = NodePath("../Hand_low_L") +tree_root = SubResource("AnimationNodeBlendTree_ppujx") anim_player = NodePath("../Hand_low_L/AnimationPlayer") -active = true parameters/Grip/blend_amount = 0.0 parameters/Trigger/blend_amount = 0.0 diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn index 4510d19..e58a716 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://c4nba0qpi0uls" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_low_L.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_ry7qg"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="6"] diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn index 8a3e16d..4bd615a 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_fullglove_low.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://16colgxrw27d" path="res://addons/godot-xr-tools/hands/model/Hand_low_L.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_4017m"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://ds2dpvbpht0ea" path="res://addons/godot-xr-tools/hands/materials/labglove.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="7"] diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn index c9c958f..a0a3b78 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_hand_low.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://c4nba0qpi0uls" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_low_L.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_t17lq"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="7"] diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn index f0c46f4..7d489a4 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_physics_tac_glove_low.tscn @@ -5,8 +5,8 @@ [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_oehre"] [ext_resource type="Material" uid="uid://dogla70w8hvo8" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_dark_camo.tres" id="4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_80h26"] animation = &"Grip" diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn index bf6b70d..0d67d49 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/left_tac_glove_low.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://bnx4hithcij6y" path="res://addons/godot-xr-tools/hands/model/Hand_Glove_low_L.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://the6y7swe6j0" path="res://addons/godot-xr-tools/hands/animations/left/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dertgu7k8alls" path="res://addons/godot-xr-tools/hands/poses/pose_default_left.tres" id="3_iq5xt"] [ext_resource type="AnimationNodeBlendTree" uid="uid://dl8yf7ipqotd1" path="res://addons/godot-xr-tools/hands/animations/left/hand_blend_tree.tres" id="4"] [ext_resource type="Material" uid="uid://f2uhcqq8s2jx" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_green_camo.tres" id="5"] diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn index fda3c77..cde32a7 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_fullglove_low.tscn @@ -4,37 +4,37 @@ [ext_resource type="PackedScene" uid="uid://cjrac51wst3tu" path="res://addons/godot-xr-tools/hands/model/Hand_low_R.gltf" id="2"] [ext_resource type="Material" uid="uid://cdb40djkihelq" path="res://addons/godot-xr-tools/hands/materials/cleaning_glove.tres" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_r4xyu"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="4"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="6"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_sjc0m"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_q2uyk"] animation = &"Grip" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_bf0db"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_swmod"] animation = &"Grip" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_kdora"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_vq0yy"] filter_enabled = true filters = ["Armature/Skeleton3D:Little_Distal_R", "Armature/Skeleton3D:Little_Intermediate_R", "Armature/Skeleton3D:Little_Metacarpal_R", "Armature/Skeleton3D:Little_Proximal_R", "Armature/Skeleton3D:Middle_Distal_R", "Armature/Skeleton3D:Middle_Intermediate_R", "Armature/Skeleton3D:Middle_Metacarpal_R", "Armature/Skeleton3D:Middle_Proximal_R", "Armature/Skeleton3D:Ring_Distal_R", "Armature/Skeleton3D:Ring_Intermediate_R", "Armature/Skeleton3D:Ring_Metacarpal_R", "Armature/Skeleton3D:Ring_Proximal_R", "Armature/Skeleton3D:Thumb_Distal_R", "Armature/Skeleton3D:Thumb_Metacarpal_R", "Armature/Skeleton3D:Thumb_Proximal_R", "Armature/Skeleton:Little_Distal_R", "Armature/Skeleton:Little_Intermediate_R", "Armature/Skeleton:Little_Proximal_R", "Armature/Skeleton:Middle_Distal_R", "Armature/Skeleton:Middle_Intermediate_R", "Armature/Skeleton:Middle_Proximal_R", "Armature/Skeleton:Ring_Distal_R", "Armature/Skeleton:Ring_Intermediate_R", "Armature/Skeleton:Ring_Proximal_R", "Armature/Skeleton:Thumb_Distal_R", "Armature/Skeleton:Thumb_Proximal_R"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_l50hj"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_65tsc"] animation = &"Grip 5" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_vrc3g"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_t1cog"] filter_enabled = true filters = ["Armature/Skeleton3D:Index_Distal_R", "Armature/Skeleton3D:Index_Intermediate_R", "Armature/Skeleton3D:Index_Metacarpal_R", "Armature/Skeleton3D:Index_Proximal_R", "Armature/Skeleton:Index_Distal_R", "Armature/Skeleton:Index_Intermediate_R", "Armature/Skeleton:Index_Proximal_R"] -[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_ayvqt"] +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_xdmiy"] graph_offset = Vector2(-552.664, 107.301) -nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_sjc0m") +nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_q2uyk") nodes/ClosedHand1/position = Vector2(-600, 300) -nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_bf0db") +nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_swmod") nodes/ClosedHand2/position = Vector2(-360, 300) -nodes/Grip/node = SubResource("AnimationNodeBlend2_kdora") +nodes/Grip/node = SubResource("AnimationNodeBlend2_vq0yy") nodes/Grip/position = Vector2(0, 40) -nodes/OpenHand/node = SubResource("AnimationNodeAnimation_l50hj") +nodes/OpenHand/node = SubResource("AnimationNodeAnimation_65tsc") nodes/OpenHand/position = Vector2(-600, 100) -nodes/Trigger/node = SubResource("AnimationNodeBlend2_vrc3g") +nodes/Trigger/node = SubResource("AnimationNodeBlend2_t1cog") nodes/Trigger/position = Vector2(-360, 40) node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] @@ -44,10 +44,9 @@ hand_blend_tree = ExtResource("6") default_pose = ExtResource("3_r4xyu") [node name="Hand_low_R" parent="." instance=ExtResource("2")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.03, -0.05, 0.15) [node name="Skeleton3D" parent="Hand_low_R/Armature" index="0"] -bones/1/rotation = Quaternion(0.323537, 2.56577e-05, 0.0272204, 0.945824) +bones/1/rotation = Quaternion(0.323537, 2.56581e-05, 0.0272204, 0.945824) bones/2/rotation = Quaternion(-0.0904441, 0.0415175, 0.166293, 0.981042) bones/3/rotation = Quaternion(-0.0466199, -0.020971, -0.0103276, 0.998639) bones/5/rotation = Quaternion(-0.00128455, 0.0116081, 0.0168259, 0.99979) @@ -73,9 +72,9 @@ surface_material_override/0 = ExtResource("3") [node name="AnimationPlayer" parent="Hand_low_R" instance=ExtResource("1")] [node name="AnimationTree" type="AnimationTree" parent="."] -tree_root = SubResource("AnimationNodeBlendTree_ayvqt") +root_node = NodePath("../Hand_low_R") +tree_root = SubResource("AnimationNodeBlendTree_xdmiy") anim_player = NodePath("../Hand_low_R/AnimationPlayer") -active = true parameters/Grip/blend_amount = 0.0 parameters/Trigger/blend_amount = 0.0 diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn index 31e8321..90d6e63 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn @@ -2,39 +2,39 @@ [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://dunu03tc5vdbh" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_low_R.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_f67ka"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="6"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_mbwcx"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1ao0x"] animation = &"Grip" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_dyc5q"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_8pdeq"] animation = &"Grip" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_dknar"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_ed6h4"] filter_enabled = true filters = ["Armature/Skeleton3D:Little_Distal_R", "Armature/Skeleton3D:Little_Intermediate_R", "Armature/Skeleton3D:Little_Metacarpal_R", "Armature/Skeleton3D:Little_Proximal_R", "Armature/Skeleton3D:Middle_Distal_R", "Armature/Skeleton3D:Middle_Intermediate_R", "Armature/Skeleton3D:Middle_Metacarpal_R", "Armature/Skeleton3D:Middle_Proximal_R", "Armature/Skeleton3D:Ring_Distal_R", "Armature/Skeleton3D:Ring_Intermediate_R", "Armature/Skeleton3D:Ring_Metacarpal_R", "Armature/Skeleton3D:Ring_Proximal_R", "Armature/Skeleton3D:Thumb_Distal_R", "Armature/Skeleton3D:Thumb_Metacarpal_R", "Armature/Skeleton3D:Thumb_Proximal_R", "Armature/Skeleton:Little_Distal_R", "Armature/Skeleton:Little_Intermediate_R", "Armature/Skeleton:Little_Proximal_R", "Armature/Skeleton:Middle_Distal_R", "Armature/Skeleton:Middle_Intermediate_R", "Armature/Skeleton:Middle_Proximal_R", "Armature/Skeleton:Ring_Distal_R", "Armature/Skeleton:Ring_Intermediate_R", "Armature/Skeleton:Ring_Proximal_R", "Armature/Skeleton:Thumb_Distal_R", "Armature/Skeleton:Thumb_Proximal_R"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_covtt"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1ja5n"] animation = &"Grip 5" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_h5uio"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_hspyh"] filter_enabled = true filters = ["Armature/Skeleton3D:Index_Distal_R", "Armature/Skeleton3D:Index_Intermediate_R", "Armature/Skeleton3D:Index_Metacarpal_R", "Armature/Skeleton3D:Index_Proximal_R", "Armature/Skeleton:Index_Distal_R", "Armature/Skeleton:Index_Intermediate_R", "Armature/Skeleton:Index_Proximal_R"] -[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_7kqgu"] +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_sse2s"] graph_offset = Vector2(-552.664, 107.301) -nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_mbwcx") +nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_1ao0x") nodes/ClosedHand1/position = Vector2(-600, 300) -nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_dyc5q") +nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_8pdeq") nodes/ClosedHand2/position = Vector2(-360, 300) -nodes/Grip/node = SubResource("AnimationNodeBlend2_dknar") +nodes/Grip/node = SubResource("AnimationNodeBlend2_ed6h4") nodes/Grip/position = Vector2(0, 40) -nodes/OpenHand/node = SubResource("AnimationNodeAnimation_covtt") +nodes/OpenHand/node = SubResource("AnimationNodeAnimation_1ja5n") nodes/OpenHand/position = Vector2(-600, 100) -nodes/Trigger/node = SubResource("AnimationNodeBlend2_h5uio") +nodes/Trigger/node = SubResource("AnimationNodeBlend2_hspyh") nodes/Trigger/position = Vector2(-360, 40) node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] @@ -44,10 +44,10 @@ hand_blend_tree = ExtResource("6") default_pose = ExtResource("3_f67ka") [node name="Hand_Nails_low_R" parent="." instance=ExtResource("2")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.03, -0.05, 0.15) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.01, 0, 0.05) [node name="Skeleton3D" parent="Hand_Nails_low_R/Armature" index="0"] -bones/1/rotation = Quaternion(0.323537, 2.56577e-05, 0.0272204, 0.945824) +bones/1/rotation = Quaternion(0.323537, 2.56581e-05, 0.0272204, 0.945824) bones/2/rotation = Quaternion(-0.0904441, 0.0415175, 0.166293, 0.981042) bones/3/rotation = Quaternion(-0.0466199, -0.020971, -0.0103276, 0.998639) bones/5/rotation = Quaternion(-0.00128455, 0.0116081, 0.0168259, 0.99979) @@ -73,9 +73,9 @@ surface_material_override/0 = ExtResource("4") [node name="AnimationPlayer" parent="Hand_Nails_low_R" instance=ExtResource("1")] [node name="AnimationTree" type="AnimationTree" parent="."] -tree_root = SubResource("AnimationNodeBlendTree_7kqgu") +root_node = NodePath("../Hand_Nails_low_R") +tree_root = SubResource("AnimationNodeBlendTree_sse2s") anim_player = NodePath("../Hand_Nails_low_R/AnimationPlayer") -active = true parameters/Grip/blend_amount = 0.0 parameters/Trigger/blend_amount = 0.0 diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn index 6f570bd..f3d90ce 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_fullglove_low.tscn @@ -4,9 +4,9 @@ [ext_resource type="PackedScene" uid="uid://cjrac51wst3tu" path="res://addons/godot-xr-tools/hands/model/Hand_low_R.gltf" id="2"] [ext_resource type="Material" uid="uid://ds2dpvbpht0ea" path="res://addons/godot-xr-tools/hands/materials/labglove.tres" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_e8slj"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="4"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="4"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="6"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="8"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="8"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_koc4o"] animation = &"Grip" diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn index 5aef399..886361d 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_hand_low.tscn @@ -2,9 +2,9 @@ [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="1"] [ext_resource type="PackedScene" uid="uid://dunu03tc5vdbh" path="res://addons/godot-xr-tools/hands/model/Hand_Nails_low_R.gltf" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_b86a5"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="4"] [ext_resource type="Material" uid="uid://dy6nhifvvmm73" path="res://addons/godot-xr-tools/hands/materials/caucasian_hand.tres" id="5"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="7"] diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn index 9f20a8b..275b8c1 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_physics_tac_glove_low.tscn @@ -5,8 +5,8 @@ [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_xodao"] [ext_resource type="Material" uid="uid://dogla70w8hvo8" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_dark_camo.tres" id="4"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] +[ext_resource type="Script" uid="uid://bfo7c10rq6xuu" path="res://addons/godot-xr-tools/hands/hand_physics_bone.gd" id="5"] +[ext_resource type="Script" uid="uid://2vypvkq7n27l" path="res://addons/godot-xr-tools/hands/physics_hand.gd" id="6"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_d3g7m"] animation = &"Grip" diff --git a/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn b/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn index 73ca91c..e64600b 100644 --- a/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn +++ b/addons/godot-xr-tools/hands/scenes/lowpoly/right_tac_glove_low.tscn @@ -2,7 +2,7 @@ [ext_resource type="PackedScene" uid="uid://csgsp0wuw8ucy" path="res://addons/godot-xr-tools/hands/model/Hand_Glove_low_R.gltf" id="1"] [ext_resource type="PackedScene" uid="uid://bxipj7hyjwy6f" path="res://addons/godot-xr-tools/hands/animations/right/AnimationPlayer.tscn" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] +[ext_resource type="Script" uid="uid://cnwtovj4mqc45" path="res://addons/godot-xr-tools/hands/hand.gd" id="3"] [ext_resource type="Resource" uid="uid://dmpjtk0l8vh6v" path="res://addons/godot-xr-tools/hands/poses/pose_default_right.tres" id="3_2wryo"] [ext_resource type="AnimationNodeBlendTree" uid="uid://m85b1gogdums" path="res://addons/godot-xr-tools/hands/animations/right/hand_blend_tree.tres" id="4"] [ext_resource type="Material" uid="uid://f2uhcqq8s2jx" path="res://addons/godot-xr-tools/hands/materials/glove_caucasian_green_camo.tres" id="5"] diff --git a/addons/godot-xr-tools/interactables/interactable_area_button.gd b/addons/godot-xr-tools/interactables/interactable_area_button.gd index d3ceebd..e511ad9 100644 --- a/addons/godot-xr-tools/interactables/interactable_area_button.gd +++ b/addons/godot-xr-tools/interactables/interactable_area_button.gd @@ -46,8 +46,8 @@ var _tween: Tween # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableAreaButton" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableAreaButton" # Called when the node enters the scene tree for the first time. @@ -78,7 +78,7 @@ func _on_button_entered(item: Node3D) -> void: _tween.kill() # Construct the button animation tween - _tween = get_tree().create_tween() + _tween = create_tween() _tween.set_trans(Tween.TRANS_LINEAR) _tween.set_ease(Tween.EASE_IN_OUT) _tween.tween_property(_button, "position", _button_down, duration) @@ -102,7 +102,7 @@ func _on_button_exited(item: Node3D) -> void: _tween.kill() # Construct the button animation tween - _tween = get_tree().create_tween() + _tween = create_tween() _tween.set_trans(Tween.TRANS_LINEAR) _tween.set_ease(Tween.EASE_IN_OUT) _tween.tween_property(_button, "position", _button_up, duration) diff --git a/addons/godot-xr-tools/interactables/interactable_area_button.gd.uid b/addons/godot-xr-tools/interactables/interactable_area_button.gd.uid new file mode 100644 index 0000000..3c6450c --- /dev/null +++ b/addons/godot-xr-tools/interactables/interactable_area_button.gd.uid @@ -0,0 +1 @@ +uid://dq042kibpfryy diff --git a/addons/godot-xr-tools/interactables/interactable_area_button.tscn b/addons/godot-xr-tools/interactables/interactable_area_button.tscn index 0163708..ec7b91a 100644 --- a/addons/godot-xr-tools/interactables/interactable_area_button.tscn +++ b/addons/godot-xr-tools/interactables/interactable_area_button.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://cme66uldrjl2i"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_area_button.gd" id="1"] +[ext_resource type="Script" uid="uid://dq042kibpfryy" path="res://addons/godot-xr-tools/interactables/interactable_area_button.gd" id="1"] [node name="InteractableAreaButton" type="Area3D"] collision_layer = 0 diff --git a/addons/godot-xr-tools/interactables/interactable_handle.gd b/addons/godot-xr-tools/interactables/interactable_handle.gd index 91c6617..8f66551 100644 --- a/addons/godot-xr-tools/interactables/interactable_handle.gd +++ b/addons/godot-xr-tools/interactables/interactable_handle.gd @@ -28,8 +28,8 @@ extends XRToolsPickable # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableHandle" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableHandle" or super(xr_name) # Called when this handle is added to the scene diff --git a/addons/godot-xr-tools/interactables/interactable_handle.gd.uid b/addons/godot-xr-tools/interactables/interactable_handle.gd.uid new file mode 100644 index 0000000..193ef87 --- /dev/null +++ b/addons/godot-xr-tools/interactables/interactable_handle.gd.uid @@ -0,0 +1 @@ +uid://dlojnwxo25bky diff --git a/addons/godot-xr-tools/interactables/interactable_handle.tscn b/addons/godot-xr-tools/interactables/interactable_handle.tscn index 35ad8e1..6bd055d 100644 --- a/addons/godot-xr-tools/interactables/interactable_handle.tscn +++ b/addons/godot-xr-tools/interactables/interactable_handle.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bddj5m7ull6g0"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_handle.gd" id="1"] +[ext_resource type="Script" uid="uid://dlojnwxo25bky" path="res://addons/godot-xr-tools/interactables/interactable_handle.gd" id="1"] [node name="InteractableHandle" type="RigidBody3D"] collision_layer = 262144 diff --git a/addons/godot-xr-tools/interactables/interactable_handle_driven.gd b/addons/godot-xr-tools/interactables/interactable_handle_driven.gd index f9f5358..5c312d5 100644 --- a/addons/godot-xr-tools/interactables/interactable_handle_driven.gd +++ b/addons/godot-xr-tools/interactables/interactable_handle_driven.gd @@ -25,8 +25,8 @@ var grabbed_handles := Array() # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableHandleDriven" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableHandleDriven" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/interactables/interactable_handle_driven.gd.uid b/addons/godot-xr-tools/interactables/interactable_handle_driven.gd.uid new file mode 100644 index 0000000..50f39c1 --- /dev/null +++ b/addons/godot-xr-tools/interactables/interactable_handle_driven.gd.uid @@ -0,0 +1 @@ +uid://jeeqtkcsy7ou diff --git a/addons/godot-xr-tools/interactables/interactable_hinge.gd b/addons/godot-xr-tools/interactables/interactable_hinge.gd index ce774a5..2e33680 100644 --- a/addons/godot-xr-tools/interactables/interactable_hinge.gd +++ b/addons/godot-xr-tools/interactables/interactable_hinge.gd @@ -47,8 +47,8 @@ signal hinge_moved(angle) # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableHinge" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableHinge" or super(xr_name) # Called when the node enters the scene tree for the first time. @@ -87,15 +87,15 @@ func _process(_delta: float) -> void: # Move the hinge to the specified position -func move_hinge(position: float) -> void: +func move_hinge(pos: float) -> void: # Do the hinge move - position = _do_move_hinge(position) - if position == _hinge_position_rad: + pos = _do_move_hinge(pos) + if pos == _hinge_position_rad: return # Update the current positon - _hinge_position_rad = position - hinge_position = rad_to_deg(position) + _hinge_position_rad = pos + hinge_position = rad_to_deg(pos) # Emit the moved signal emit_signal("hinge_moved", hinge_position) @@ -127,10 +127,9 @@ func _set_hinge_steps(value: float) -> void: # Called when hinge_position is set externally func _set_hinge_position(value: float) -> void: - var position := deg_to_rad(value) - position = _do_move_hinge(position) - hinge_position = rad_to_deg(position) - _hinge_position_rad = position + var pos = _do_move_hinge(deg_to_rad(value)) + hinge_position = rad_to_deg(pos) + _hinge_position_rad = pos # Called when default_position is set externally @@ -140,17 +139,17 @@ func _set_default_position(value: float) -> void: # Do the hinge move -func _do_move_hinge(position: float) -> float: +func _do_move_hinge(pos: float) -> float: # Apply hinge step-quantization if _hinge_steps_rad: - position = round(position / _hinge_steps_rad) * _hinge_steps_rad + pos = round(pos / _hinge_steps_rad) * _hinge_steps_rad # Apply hinge limits - position = clamp(position, _hinge_limit_min_rad, _hinge_limit_max_rad) + pos = clamp(pos, _hinge_limit_min_rad, _hinge_limit_max_rad) # Move if necessary - if position != _hinge_position_rad: - transform.basis = Basis.from_euler(Vector3(position, 0.0, 0.0)) + if pos != _hinge_position_rad: + transform.basis = Basis.from_euler(Vector3(pos, 0.0, 0.0)) # Return the updated position - return position + return pos diff --git a/addons/godot-xr-tools/interactables/interactable_hinge.gd.uid b/addons/godot-xr-tools/interactables/interactable_hinge.gd.uid new file mode 100644 index 0000000..9064622 --- /dev/null +++ b/addons/godot-xr-tools/interactables/interactable_hinge.gd.uid @@ -0,0 +1 @@ +uid://c8gx2wc7hsxf5 diff --git a/addons/godot-xr-tools/interactables/interactable_hinge.tscn b/addons/godot-xr-tools/interactables/interactable_hinge.tscn index 17b380b..f19a948 100644 --- a/addons/godot-xr-tools/interactables/interactable_hinge.tscn +++ b/addons/godot-xr-tools/interactables/interactable_hinge.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://bnvxqb33lltmj"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_hinge.gd" id="1"] +[ext_resource type="Script" uid="uid://c8gx2wc7hsxf5" path="res://addons/godot-xr-tools/interactables/interactable_hinge.gd" id="1"] [node name="InteractableHinge" type="Spatial"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/interactables/interactable_joystick.gd b/addons/godot-xr-tools/interactables/interactable_joystick.gd index c33047f..7f8fb7b 100644 --- a/addons/godot-xr-tools/interactables/interactable_joystick.gd +++ b/addons/godot-xr-tools/interactables/interactable_joystick.gd @@ -74,8 +74,8 @@ const VECTOR_YZ := Vector3(0.0, 1.0, 1.0) # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableJoystick" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableJoystick" or super(xr_name) # Called when the node enters the scene tree for the first time. @@ -132,15 +132,15 @@ func _process(_delta: float) -> void: # Move the joystick to the specified position func move_joystick(position_x: float, position_y: float) -> void: # Do the move - var position := _do_move_joystick(Vector2(position_x, position_y)) - if position.x == _joystick_x_position_rad and position.y == _joystick_y_position_rad: + var pos := _do_move_joystick(Vector2(position_x, position_y)) + if pos.x == _joystick_x_position_rad and pos.y == _joystick_y_position_rad: return # Update the current positon - _joystick_x_position_rad = position.x - _joystick_y_position_rad = position.y - joystick_x_position = rad_to_deg(position.x) - joystick_y_position = rad_to_deg(position.y) + _joystick_x_position_rad = pos.x + _joystick_y_position_rad = pos.y + joystick_x_position = rad_to_deg(pos.x) + joystick_y_position = rad_to_deg(pos.y) # Emit the joystick signal emit_signal("joystick_moved", joystick_x_position, joystick_y_position) @@ -190,18 +190,18 @@ func _set_joystick_y_steps(value: float) -> void: # Called when joystick_x_position is set externally func _set_joystick_x_position(value: float) -> void: - var position := Vector2(deg_to_rad(value), _joystick_y_position_rad) - position = _do_move_joystick(position) - joystick_x_position = rad_to_deg(position.x) - _joystick_x_position_rad = position.x + var pos := Vector2(deg_to_rad(value), _joystick_y_position_rad) + pos = _do_move_joystick(pos) + joystick_x_position = rad_to_deg(pos.x) + _joystick_x_position_rad = pos.x # Called when joystick_y_position is set externally func _set_joystick_y_position(value: float) -> void: - var position := Vector2(_joystick_x_position_rad, deg_to_rad(value)) - position = _do_move_joystick(position) - joystick_y_position = rad_to_deg(position.y) - _joystick_y_position_rad = position.y + var pos := Vector2(_joystick_x_position_rad, deg_to_rad(value)) + pos = _do_move_joystick(pos) + joystick_y_position = rad_to_deg(pos.y) + _joystick_y_position_rad = pos.y # Called when default_x_position is set externally @@ -217,20 +217,20 @@ func _set_default_y_position(value: float) -> void: # Do the joystick move -func _do_move_joystick(position: Vector2) -> Vector2: +func _do_move_joystick(pos: Vector2) -> Vector2: # Apply joystick step-quantization if _joystick_x_steps_rad: - position.x = round(position.x / _joystick_x_steps_rad) * _joystick_x_steps_rad + pos.x = round(pos.x / _joystick_x_steps_rad) * _joystick_x_steps_rad if _joystick_y_steps_rad: - position.y = round(position.y / _joystick_y_steps_rad) * _joystick_y_steps_rad + pos.y = round(pos.y / _joystick_y_steps_rad) * _joystick_y_steps_rad # Apply joystick limits - position.x = clamp(position.x, _joystick_x_limit_min_rad, _joystick_x_limit_max_rad) - position.y = clamp(position.y, _joystick_y_limit_min_rad, _joystick_y_limit_max_rad) + pos.x = clamp(pos.x, _joystick_x_limit_min_rad, _joystick_x_limit_max_rad) + pos.y = clamp(pos.y, _joystick_y_limit_min_rad, _joystick_y_limit_max_rad) # Move if necessary - if position.x != _joystick_x_position_rad or position.y != _joystick_y_position_rad: - transform.basis = Basis.from_euler(Vector3(position.y, position.x, 0.0)) + if pos.x != _joystick_x_position_rad or pos.y != _joystick_y_position_rad: + transform.basis = Basis.from_euler(Vector3(pos.y, pos.x, 0.0)) # Return the updated position - return position + return pos diff --git a/addons/godot-xr-tools/interactables/interactable_joystick.gd.uid b/addons/godot-xr-tools/interactables/interactable_joystick.gd.uid new file mode 100644 index 0000000..498f981 --- /dev/null +++ b/addons/godot-xr-tools/interactables/interactable_joystick.gd.uid @@ -0,0 +1 @@ +uid://c0j857ar3agno diff --git a/addons/godot-xr-tools/interactables/interactable_joystick.tscn b/addons/godot-xr-tools/interactables/interactable_joystick.tscn index 2d017c9..ca3dc0e 100644 --- a/addons/godot-xr-tools/interactables/interactable_joystick.tscn +++ b/addons/godot-xr-tools/interactables/interactable_joystick.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://du32t1mb2kd7x"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_joystick.gd" id="1"] +[ext_resource type="Script" uid="uid://c0j857ar3agno" path="res://addons/godot-xr-tools/interactables/interactable_joystick.gd" id="1"] [node name="InteractableJoystick" type="Spatial"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/interactables/interactable_slider.gd b/addons/godot-xr-tools/interactables/interactable_slider.gd index 5faf517..af61245 100644 --- a/addons/godot-xr-tools/interactables/interactable_slider.gd +++ b/addons/godot-xr-tools/interactables/interactable_slider.gd @@ -39,8 +39,8 @@ signal slider_moved(position) # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableSlider" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableSlider" or super(xr_name) # Called when the node enters the scene tree for the first time. @@ -78,17 +78,17 @@ func _process(_delta: float) -> void: # Move the slider to the specified position -func move_slider(position: float) -> void: +func move_slider(pos: float) -> void: # Do the slider move - position = _do_move_slider(position) - if position == slider_position: + pos = _do_move_slider(pos) + if pos == slider_position: return # Update the current position - slider_position = position + slider_position = pos # Emit the moved signal - emit_signal("slider_moved", position) + emit_signal("slider_moved", pos) # Handle release of slider @@ -98,23 +98,23 @@ func _on_slider_released(_interactable: XRToolsInteractableSlider): # Called when the slider position is set externally -func _set_slider_position(position: float) -> void: - position = _do_move_slider(position) - slider_position = position +func _set_slider_position(pos: float) -> void: + pos = _do_move_slider(pos) + slider_position = pos # Do the slider move -func _do_move_slider(position: float) -> float: +func _do_move_slider(pos: float) -> float: # Apply slider step-quantization if slider_steps: - position = round(position / slider_steps) * slider_steps + pos = round(pos / slider_steps) * slider_steps # Apply slider limits - position = clamp(position, slider_limit_min, slider_limit_max) + pos = clamp(pos, slider_limit_min, slider_limit_max) # Move if necessary - if position != slider_position: - transform.origin.x = position + if pos != slider_position: + transform.origin.x = pos # Return the updated position - return position + return pos diff --git a/addons/godot-xr-tools/interactables/interactable_slider.gd.uid b/addons/godot-xr-tools/interactables/interactable_slider.gd.uid new file mode 100644 index 0000000..22f743f --- /dev/null +++ b/addons/godot-xr-tools/interactables/interactable_slider.gd.uid @@ -0,0 +1 @@ +uid://cloxfr8r3b00u diff --git a/addons/godot-xr-tools/interactables/interactable_slider.tscn b/addons/godot-xr-tools/interactables/interactable_slider.tscn index f864adc..4ea06cf 100644 --- a/addons/godot-xr-tools/interactables/interactable_slider.tscn +++ b/addons/godot-xr-tools/interactables/interactable_slider.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://b0r6edl74ddo7"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/interactables/interactable_slider.gd" id="1"] +[ext_resource type="Script" uid="uid://cloxfr8r3b00u" path="res://addons/godot-xr-tools/interactables/interactable_slider.gd" id="1"] [node name="InteractableSlider" type="Node3D"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/materials/highlight.tres b/addons/godot-xr-tools/materials/highlight.tres index 0480f11..6213abb 100644 --- a/addons/godot-xr-tools/materials/highlight.tres +++ b/addons/godot-xr-tools/materials/highlight.tres @@ -1,4 +1,4 @@ -[gd_resource type="ShaderMaterial" load_steps=7 format=3 uid="uid://dyuaw57o8y3i"] +[gd_resource type="ShaderMaterial" format=3 uid="uid://dyuaw57o8y3i"] [sub_resource type="VisualShaderNodeColorParameter" id="VisualShaderNodeColorParameter_nl6jr"] parameter_name = "Color" @@ -16,42 +16,6 @@ constant = 0.1 operator = 2 [sub_resource type="VisualShader" id="VisualShader_wb0u4"] -code = "shader_type spatial; -render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx; - -uniform vec4 Color : source_color; - - - -void fragment() { -// ColorParameter:2 - vec4 n_out2p0 = Color; - - -// FloatConstant:4 - float n_out4p0 = 0.100000; - - -// VectorOp:3 - vec3 n_out3p0 = vec3(n_out2p0.xyz) * vec3(n_out4p0); - - -// Fresnel:5 - float n_in5p3 = 1.00000; - float n_out5p0 = pow(1.0 - clamp(dot(NORMAL, VIEW), 0.0, 1.0), n_in5p3); - - -// VectorOp:6 - vec3 n_out6p0 = vec3(n_out2p0.xyz) * vec3(n_out5p0); - - -// Output:0 - ALBEDO = n_out3p0; - EMISSION = n_out6p0; - - -} -" nodes/fragment/0/position = Vector2(660, 60) nodes/fragment/2/node = SubResource("VisualShaderNodeColorParameter_nl6jr") nodes/fragment/2/position = Vector2(40, 40) diff --git a/addons/godot-xr-tools/materials/teleport.gdshader.uid b/addons/godot-xr-tools/materials/teleport.gdshader.uid new file mode 100644 index 0000000..60469fe --- /dev/null +++ b/addons/godot-xr-tools/materials/teleport.gdshader.uid @@ -0,0 +1 @@ +uid://bhwt8yevy8je6 diff --git a/addons/godot-xr-tools/misc/hold_button.gd b/addons/godot-xr-tools/misc/hold_button.gd index 391d05d..149168c 100644 --- a/addons/godot-xr-tools/misc/hold_button.gd +++ b/addons/godot-xr-tools/misc/hold_button.gd @@ -28,8 +28,8 @@ var xr_start_node : XRToolsStartXR # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHoldButton" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHoldButton" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/misc/hold_button.gd.uid b/addons/godot-xr-tools/misc/hold_button.gd.uid new file mode 100644 index 0000000..9a6531c --- /dev/null +++ b/addons/godot-xr-tools/misc/hold_button.gd.uid @@ -0,0 +1 @@ +uid://cwvolliuv8nuy diff --git a/addons/godot-xr-tools/misc/hold_button.tscn b/addons/godot-xr-tools/misc/hold_button.tscn index 84f9aaa..a1e0bc8 100644 --- a/addons/godot-xr-tools/misc/hold_button.tscn +++ b/addons/godot-xr-tools/misc/hold_button.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=5 format=3 uid="uid://cymteydkxagpp"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/misc/hold_button.gd" id="1"] +[ext_resource type="Script" uid="uid://cwvolliuv8nuy" path="res://addons/godot-xr-tools/misc/hold_button.gd" id="1"] [ext_resource type="Shader" uid="uid://c6okm2ay0fkjf" path="res://addons/godot-xr-tools/misc/hold_button_visualshader.tres" id="2"] [sub_resource type="QuadMesh" id="1"] diff --git a/addons/godot-xr-tools/misc/hold_button_visualshader.tres b/addons/godot-xr-tools/misc/hold_button_visualshader.tres index 084664c..244c5b7 100644 --- a/addons/godot-xr-tools/misc/hold_button_visualshader.tres +++ b/addons/godot-xr-tools/misc/hold_button_visualshader.tres @@ -1,4 +1,4 @@ -[gd_resource type="VisualShader" load_steps=28 format=3 uid="uid://c6okm2ay0fkjf"] +[gd_resource type="VisualShader" format=3 uid="uid://c6okm2ay0fkjf"] [sub_resource type="VisualShaderNodeFloatOp" id="1"] output_port_for_preview = 0 @@ -101,159 +101,6 @@ output_port_for_preview = 0 function = 12 [resource] -code = "shader_type spatial; -render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx, unshaded; - -uniform vec4 albedo : source_color; -uniform float value; -uniform float fade; -uniform float radius; -uniform float width; - - - -void fragment() { -// ColorParameter:2 - vec4 n_out2p0 = albedo; - - -// Input:3 - vec2 n_out3p0 = UV; - - -// VectorOp:4 - vec3 n_in4p1 = vec3(2.00000, 2.00000, 0.00000); - vec3 n_out4p0 = vec3(n_out3p0, 0.0) * n_in4p1; - - -// VectorOp:5 - vec3 n_in5p1 = vec3(-1.00000, -1.00000, 0.00000); - vec3 n_out5p0 = n_out4p0 + n_in5p1; - - -// VectorFunc:17 - vec3 n_out17p0 = normalize(n_out5p0); - - -// VectorOp:19 - vec3 n_in19p1 = vec3(0.00000, -1.00000, 0.00000); - vec3 n_out19p0 = cross(n_out17p0, n_in19p1); - - -// VectorDecompose:20 - float n_out20p0 = n_out19p0.x; - float n_out20p1 = n_out19p0.y; - float n_out20p2 = n_out19p0.z; - - -// DotProduct:18 - vec3 n_in18p1 = vec3(0.00000, -1.00000, 0.00000); - float n_out18p0 = dot(n_out17p0, n_in18p1); - - -// FloatFunc:24 - float n_out24p0 = acos(n_out18p0); - - -// FloatOp:23 - float n_in23p0 = 6.28319; - float n_out23p0 = n_in23p0 - n_out24p0; - - - vec3 n_out22p0; -// If:22 - float n_in22p1 = 0.00000; - float n_in22p2 = 0.00001; - if(abs(n_out20p2 - n_in22p1) < n_in22p2) - { - n_out22p0 = vec3(n_out24p0); - } - else if(n_out20p2 < n_in22p1) - { - n_out22p0 = vec3(n_out24p0); - } - else - { - n_out22p0 = vec3(n_out23p0); - } - - -// FloatOp:25 - float n_in25p1 = 6.28319; - float n_out25p0 = n_out22p0.x / n_in25p1; - - -// FloatParameter:26 - float n_out26p0 = value; - - -// FloatOp:27 - float n_out27p0 = n_out25p0 - n_out26p0; - - -// FloatParameter:14 - float n_out14p0 = fade; - - -// FloatOp:30 - float n_in30p1 = 6.28319; - float n_out30p0 = n_out14p0 / n_in30p1; - - -// FloatOp:28 - float n_out28p0 = n_out27p0 / n_out30p0; - - -// VectorLen:6 - float n_out6p0 = length(n_out5p0); - - -// FloatParameter:8 - float n_out8p0 = radius; - - -// FloatOp:7 - float n_out7p0 = n_out6p0 - n_out8p0; - - -// FloatFunc:9 - float n_out9p0 = abs(n_out7p0); - - -// FloatParameter:11 - float n_out11p0 = width; - - -// FloatOp:15 - float n_in15p1 = 2.00000; - float n_out15p0 = n_out11p0 / n_in15p1; - - -// FloatOp:13 - float n_out13p0 = n_out9p0 - n_out15p0; - - -// FloatOp:10 - float n_out10p0 = n_out13p0 / n_out14p0; - - -// FloatOp:29 - float n_out29p0 = max(n_out28p0, n_out10p0); - - -// FloatOp:12 - float n_in12p0 = 1.00000; - float n_out12p0 = n_in12p0 - n_out29p0; - - -// Output:0 - ALBEDO = vec3(n_out2p0.xyz); - ALPHA = n_out12p0; - - -} -" -graph_offset = Vector2(652.664, 119.317) flags/unshaded = true nodes/fragment/0/position = Vector2(1800, -40) nodes/fragment/2/node = SubResource("3") diff --git a/addons/godot-xr-tools/misc/move_to.gd b/addons/godot-xr-tools/misc/move_to.gd index 2b90702..8c7e2c1 100644 --- a/addons/godot-xr-tools/misc/move_to.gd +++ b/addons/godot-xr-tools/misc/move_to.gd @@ -32,8 +32,8 @@ var _time: float = 0.0 # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsMoveTo" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsMoveTo" ## Initialize the XRToolsMoveTo diff --git a/addons/godot-xr-tools/misc/move_to.gd.uid b/addons/godot-xr-tools/misc/move_to.gd.uid new file mode 100644 index 0000000..76de040 --- /dev/null +++ b/addons/godot-xr-tools/misc/move_to.gd.uid @@ -0,0 +1 @@ +uid://dxe230iiqbkwe diff --git a/addons/godot-xr-tools/misc/velocity_averager.gd.uid b/addons/godot-xr-tools/misc/velocity_averager.gd.uid new file mode 100644 index 0000000..14cc145 --- /dev/null +++ b/addons/godot-xr-tools/misc/velocity_averager.gd.uid @@ -0,0 +1 @@ +uid://7m8n6u54iq2f diff --git a/addons/godot-xr-tools/misc/velocity_averager_linear.gd.uid b/addons/godot-xr-tools/misc/velocity_averager_linear.gd.uid new file mode 100644 index 0000000..fb59161 --- /dev/null +++ b/addons/godot-xr-tools/misc/velocity_averager_linear.gd.uid @@ -0,0 +1 @@ +uid://cv4gbwersefaf diff --git a/addons/godot-xr-tools/misc/vr_common_shader_cache.gd.uid b/addons/godot-xr-tools/misc/vr_common_shader_cache.gd.uid new file mode 100644 index 0000000..2ce3940 --- /dev/null +++ b/addons/godot-xr-tools/misc/vr_common_shader_cache.gd.uid @@ -0,0 +1 @@ +uid://cd5c70rxux4kg diff --git a/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn b/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn index ae1e672..725565c 100644 --- a/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn +++ b/addons/godot-xr-tools/misc/vr_common_shader_cache.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=8 format=3 uid="uid://btknduttnmoxf"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/misc/vr_common_shader_cache.gd" id="1"] +[ext_resource type="Script" uid="uid://cd5c70rxux4kg" path="res://addons/godot-xr-tools/misc/vr_common_shader_cache.gd" id="1"] [ext_resource type="Material" uid="uid://bk72wfw25ff0v" path="res://addons/godot-xr-tools/materials/teleport.tres" id="2_6822k"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/target.tres" id="3_agvdv"] [ext_resource type="Material" path="res://addons/godot-xr-tools/materials/capsule.tres" id="4_gxjsg"] diff --git a/addons/godot-xr-tools/misc/xr_helpers.gd b/addons/godot-xr-tools/misc/xr_helpers.gd index 603f7c3..72fce3b 100644 --- a/addons/godot-xr-tools/misc/xr_helpers.gd +++ b/addons/godot-xr-tools/misc/xr_helpers.gd @@ -134,4 +134,3 @@ static func _get_controller( # Could not find the controller return null - diff --git a/addons/godot-xr-tools/misc/xr_helpers.gd.uid b/addons/godot-xr-tools/misc/xr_helpers.gd.uid new file mode 100644 index 0000000..2eb05d5 --- /dev/null +++ b/addons/godot-xr-tools/misc/xr_helpers.gd.uid @@ -0,0 +1 @@ +uid://cprfiap0fogt0 diff --git a/addons/godot-xr-tools/objects/climbable.gd b/addons/godot-xr-tools/objects/climbable.gd index 1cea381..6df486a 100644 --- a/addons/godot-xr-tools/objects/climbable.gd +++ b/addons/godot-xr-tools/objects/climbable.gd @@ -27,8 +27,8 @@ var _grabs : Dictionary = {} # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsClimbable" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsClimbable" # Called when the node becomes "ready" @@ -81,7 +81,7 @@ func pick_up(by: Node3D) -> void: # Called by XRToolsFunctionPickup when this is let go by a controller func let_go(by: Node3D, _p_linear_velocity: Vector3, _p_angular_velocity: Vector3) -> void: - _grabs.erase(by); + _grabs.erase(by) # Get the grab handle diff --git a/addons/godot-xr-tools/objects/climbable.gd.uid b/addons/godot-xr-tools/objects/climbable.gd.uid new file mode 100644 index 0000000..55fc387 --- /dev/null +++ b/addons/godot-xr-tools/objects/climbable.gd.uid @@ -0,0 +1 @@ +uid://bqb3cy0ekk685 diff --git a/addons/godot-xr-tools/objects/climbable.tscn b/addons/godot-xr-tools/objects/climbable.tscn index 6cb2599..1d82a71 100644 --- a/addons/godot-xr-tools/objects/climbable.tscn +++ b/addons/godot-xr-tools/objects/climbable.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://cjyilbm4ucc7s"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/climbable.gd" id="1"] +[ext_resource type="Script" uid="uid://bqb3cy0ekk685" path="res://addons/godot-xr-tools/objects/climbable.gd" id="1"] [node name="Climbable" type="StaticBody3D"] collision_layer = 262145 diff --git a/addons/godot-xr-tools/objects/force_body/force_body.gd b/addons/godot-xr-tools/objects/force_body/force_body.gd index 49a1007..2636e4f 100644 --- a/addons/godot-xr-tools/objects/force_body/force_body.gd +++ b/addons/godot-xr-tools/objects/force_body/force_body.gd @@ -35,8 +35,8 @@ class ForceBodyCollision: ## Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsForceBody" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsForceBody" ## This function moves and slides along the [param move] vector. It returns @@ -122,7 +122,12 @@ func rotate_and_collide( \ # Convert collision exceptions to a RID array var exception_rids : Array[RID] for collision_exception in get_collision_exceptions(): - exception_rids.push_back(collision_exception.get_rid()) + # It is our responsibility to remove exceptions before freeing the object, but sometimes + # that is hard. + if is_instance_valid(collision_exception): + exception_rids.push_back(collision_exception.get_rid()) + else: + push_warning("freed object still exists in a collision exception") # Prevent collisions with ourselves exception_rids.push_back(get_rid()) diff --git a/addons/godot-xr-tools/objects/force_body/force_body.gd.uid b/addons/godot-xr-tools/objects/force_body/force_body.gd.uid new file mode 100644 index 0000000..125f050 --- /dev/null +++ b/addons/godot-xr-tools/objects/force_body/force_body.gd.uid @@ -0,0 +1 @@ +uid://d1148cmpripqt diff --git a/addons/godot-xr-tools/objects/grab_points/grab.gd b/addons/godot-xr-tools/objects/grab_points/grab.gd index 4b9aaff..4401e02 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab.gd +++ b/addons/godot-xr-tools/objects/grab_points/grab.gd @@ -40,7 +40,7 @@ var drive_aim : float = 0.0 var _arrived : bool = false ## Collision exceptions we manage -var _collision_exceptions : Array[PhysicsBody3D] +var _collision_exceptions : Array[RID] ## Initialize the grab @@ -63,10 +63,13 @@ func _init( hand_point = p_point as XRToolsGrabPointHand # Calculate the grab transform - if p_point: - transform = p_point.transform + if hand_point: + # Get our adjusted grab point (palm position) + transform = hand_point.get_palm_transform() + elif point: + transform = point.transform elif p_precise: - transform = p_what.global_transform.inverse() * by.global_transform + transform = p_what.global_transform.affine_inverse() * by.global_transform else: transform = Transform3D.IDENTITY @@ -113,7 +116,8 @@ func set_grab_point(p_point : XRToolsGrabPoint) -> void: # Update the transform if point: - transform = point.transform + # Get our adjusted grab point (palm position) + transform = p_point.get_palm_transform() # Apply the new hand grab-point settings if hand_point: @@ -138,17 +142,16 @@ func release() -> void: # Remove collision exceptions with a small delay if is_instance_valid(collision_hand) and not _collision_exceptions.is_empty(): - # We need to make a copy of our array else it will be passed by reference. - var copy : Array[PhysicsBody3D] - for exc in _collision_exceptions: - copy.push_back(exc) + # Use RIDs instead of the objects directly in case they get freed while + # we are waiting for the object to fall away + var copy : Array[RID] = _collision_exceptions.duplicate() _collision_exceptions.clear() # Delay removing our exceptions to give the object time to fall away collision_hand.get_tree().create_timer(0.5).timeout \ .connect(_remove_collision_exceptions \ .bind(copy) \ - .bind(collision_hand)) + .bind(collision_hand.get_rid())) # Report the release print_verbose("%s> released by %s", [what.name, by.name]) @@ -199,9 +202,9 @@ func _add_collision_exceptions(from : Node): # If this is a physics body, add an exception if from is PhysicsBody3D: # Make sure we don't collide with what we're holding - _collision_exceptions.push_back(from) - collision_hand.add_collision_exception_with(from) - from.add_collision_exception_with(collision_hand) + _collision_exceptions.push_back(from.get_rid()) + PhysicsServer3D.body_add_collision_exception(collision_hand.get_rid(), from.get_rid()) + PhysicsServer3D.body_add_collision_exception(from.get_rid(), collision_hand.get_rid()) # Check all children for child in from.get_children(): @@ -217,10 +220,8 @@ func _add_collision_exceptions(from : Node): # # Note, this is static because our grab object gets destroyed before this code gets run. static func _remove_collision_exceptions( \ - on_collision_hand : XRToolsCollisionHand, \ - exceptions : Array[PhysicsBody3D]): - if not is_instance_valid(on_collision_hand): - return + on_collision_hand : RID, \ + exceptions : Array[RID]): # This can be improved by checking if we're still colliding and only # removing those objects from our exception list that are not. @@ -229,7 +230,6 @@ static func _remove_collision_exceptions( \ # For now we'll remove all. - for body : PhysicsBody3D in exceptions: - if is_instance_valid(body): - on_collision_hand.remove_collision_exception_with(body) - body.remove_collision_exception_with(on_collision_hand) + for body : RID in exceptions: + PhysicsServer3D.body_remove_collision_exception(on_collision_hand, body) + PhysicsServer3D.body_remove_collision_exception(body, on_collision_hand) diff --git a/addons/godot-xr-tools/objects/grab_points/grab.gd.uid b/addons/godot-xr-tools/objects/grab_points/grab.gd.uid new file mode 100644 index 0000000..0f5a937 --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grab.gd.uid @@ -0,0 +1 @@ +uid://c6pkfifsm2fy1 diff --git a/addons/godot-xr-tools/objects/grab_points/grab_driver.gd b/addons/godot-xr-tools/objects/grab_points/grab_driver.gd index a579622..b403e4d 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab_driver.gd +++ b/addons/godot-xr-tools/objects/grab_points/grab_driver.gd @@ -37,7 +37,7 @@ func _physics_process(delta : float) -> void: return # Set destination from primary grab - var destination := primary.by.global_transform * primary.transform.inverse() + var destination := primary.by.global_transform * primary.transform.affine_inverse() # If present, apply secondary-node contributions if is_instance_valid(secondary): @@ -47,7 +47,7 @@ func _physics_process(delta : float) -> void: # Calculate the transform from secondary grab var x1 := destination - var x2 := secondary.by.global_transform * secondary.transform.inverse() + var x2 := secondary.by.global_transform * secondary.transform.affine_inverse() # Independently lerp the angle and position destination = Transform3D( @@ -57,7 +57,7 @@ func _physics_process(delta : float) -> void: # Test if we need to apply aiming if secondary.drive_aim > 0.0: # Convert destination from global to primary-local - destination = primary.by.global_transform.inverse() * destination + destination = primary.by.global_transform.affine_inverse() * destination # Calculate the from and to vectors in primary-local space var secondary_from := destination * secondary.transform.origin @@ -92,6 +92,9 @@ func _physics_process(delta : float) -> void: if primary: primary.set_arrived() if secondary: secondary.set_arrived() + if global_transform.is_equal_approx(destination): + return + # Apply the destination transform global_transform = destination force_update_transform() @@ -198,7 +201,7 @@ static func create_snap( driver.state = GrabState.SNAP driver.target = p_target driver.primary = p_grab - driver.global_transform = p_grab.by.global_transform * p_grab.transform.inverse() + driver.global_transform = p_grab.by.global_transform * p_grab.transform.affine_inverse() # Snapped to grab-point so report arrived p_grab.set_arrived() diff --git a/addons/godot-xr-tools/objects/grab_points/grab_driver.gd.uid b/addons/godot-xr-tools/objects/grab_points/grab_driver.gd.uid new file mode 100644 index 0000000..1918936 --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grab_driver.gd.uid @@ -0,0 +1 @@ +uid://blacqnxi11y3x diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point.gd.uid b/addons/godot-xr-tools/objects/grab_points/grab_point.gd.uid new file mode 100644 index 0000000..b47e370 --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grab_point.gd.uid @@ -0,0 +1 @@ +uid://b8uwrf51jd5xm diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd b/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd index 310684a..19ee2e8 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd @@ -64,10 +64,21 @@ const RIGHT_HAND_PATH := "res://addons/godot-xr-tools/hands/scenes/lowpoly/right ## How much this grab-point drives the aim @export var drive_aim : float = 0.0 - ## Hand to use for editor preview var _editor_preview_hand : XRToolsHand +# Adjust the grab point from our old aim positioning, to our palm positioning. +func get_palm_transform(global : bool = false) -> Transform3D: + var adj_transform : Transform3D = global_transform if global else transform + + # Historically our hands have always been positioned based on our aim, + # So we apply our old hardcoded offset, but adjusted for our palm center. + var aim_offset := Transform3D() + aim_offset.origin = Vector3(-0.02 if hand == Hand.LEFT else 0.02, -0.05, 0.10) + adj_transform = adj_transform * aim_offset + + return adj_transform + ## Called when the node enters the scene tree for the first time. func _ready(): @@ -141,6 +152,7 @@ func _update_editor_preview() -> void: # Construct the model _editor_preview_hand = hand_scene.instantiate() + _editor_preview_hand.hand_offset_mode = 4 # Disabled # Set the pose if hand_pose: @@ -153,7 +165,15 @@ func _update_editor_preview() -> void: _editor_preview_hand.force_grip_trigger(0.0, 0.0) # Add the editor-preview hand as a child - add_child(_editor_preview_hand) + add_child(_editor_preview_hand, false, Node.INTERNAL_MODE_BACK) + + # Keep this backwards compatible, + # position the hand according to the original aim logic + var hand_node : Node3D = _editor_preview_hand.get_child(0) + if hand_node: + var custom_offset := Transform3D() + custom_offset.origin = Vector3(-0.03 if hand == Hand.LEFT else 0.03, -0.05, 0.15) + hand_node.transform = custom_offset # Is the grabber for the correct hand diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd.uid b/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd.uid new file mode 100644 index 0000000..57679fd --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd.uid @@ -0,0 +1 @@ +uid://dx3swqg2owe4p diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn b/addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn index 875f686..1642820 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_hand_left.tscn @@ -1,7 +1,8 @@ [gd_scene load_steps=2 format=3 uid="uid://c25yxb0vt53vc"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd" id="1"] +[ext_resource type="Script" uid="uid://dx3swqg2owe4p" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd" id="1"] [node name="GrabPointHandLeft" type="Marker3D"] visible = false script = ExtResource("1") +hand_offset_mode = null diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn b/addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn index 08957a5..4cebd12 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_hand_right.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://ctw7nbntd5pcj"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd" id="1"] +[ext_resource type="Script" uid="uid://dx3swqg2owe4p" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_hand.gd" id="1"] [node name="GrabPointHandRight" type="Marker3D"] visible = false diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.gd.uid b/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.gd.uid new file mode 100644 index 0000000..c48e585 --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.gd.uid @@ -0,0 +1 @@ +uid://cdrjykm7xjl0n diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.tscn b/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.tscn index 353bf58..52de22a 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.tscn +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_redirect.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://ca3daqmpo0tua"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_redirect.gd" id="1_vyuch"] +[ext_resource type="Script" uid="uid://cdrjykm7xjl0n" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_redirect.gd" id="1_vyuch"] [node name="GrabPointRedirect" type="Marker3D"] script = ExtResource("1_vyuch") diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_snap.gd.uid b/addons/godot-xr-tools/objects/grab_points/grab_point_snap.gd.uid new file mode 100644 index 0000000..6cc9ade --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_snap.gd.uid @@ -0,0 +1 @@ +uid://dn7grmvmgjiqv diff --git a/addons/godot-xr-tools/objects/grab_points/grab_point_snap.tscn b/addons/godot-xr-tools/objects/grab_points/grab_point_snap.tscn index 0ce9979..a8b9bb0 100644 --- a/addons/godot-xr-tools/objects/grab_points/grab_point_snap.tscn +++ b/addons/godot-xr-tools/objects/grab_points/grab_point_snap.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dh8grd7s3n8kg"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_snap.gd" id="1"] +[ext_resource type="Script" uid="uid://dn7grmvmgjiqv" path="res://addons/godot-xr-tools/objects/grab_points/grab_point_snap.gd" id="1"] [node name="GrabPointSnap" type="Marker3D"] visible = false diff --git a/addons/godot-xr-tools/objects/grab_points/grabber.gd.uid b/addons/godot-xr-tools/objects/grab_points/grabber.gd.uid new file mode 100644 index 0000000..b000c94 --- /dev/null +++ b/addons/godot-xr-tools/objects/grab_points/grabber.gd.uid @@ -0,0 +1 @@ +uid://bu86qn5rnylas diff --git a/addons/godot-xr-tools/objects/hand_pose_area.gd b/addons/godot-xr-tools/objects/hand_pose_area.gd index 43b0082..237e405 100644 --- a/addons/godot-xr-tools/objects/hand_pose_area.gd +++ b/addons/godot-xr-tools/objects/hand_pose_area.gd @@ -23,8 +23,8 @@ extends Area3D @export var grabpoints : Array[XRToolsGrabPointHand] # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHandPoseArea" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHandPoseArea" # Disables grabpoints func disable_grab_points(): diff --git a/addons/godot-xr-tools/objects/hand_pose_area.gd.uid b/addons/godot-xr-tools/objects/hand_pose_area.gd.uid new file mode 100644 index 0000000..377df43 --- /dev/null +++ b/addons/godot-xr-tools/objects/hand_pose_area.gd.uid @@ -0,0 +1 @@ +uid://colsb5moktl1e diff --git a/addons/godot-xr-tools/objects/hand_pose_area.tscn b/addons/godot-xr-tools/objects/hand_pose_area.tscn index e72ed0d..80b6b82 100644 --- a/addons/godot-xr-tools/objects/hand_pose_area.tscn +++ b/addons/godot-xr-tools/objects/hand_pose_area.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dc5t2qgmhb2nf"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/hand_pose_area.gd" id="1"] +[ext_resource type="Script" uid="uid://colsb5moktl1e" path="res://addons/godot-xr-tools/objects/hand_pose_area.gd" id="1"] [node name="HandPoseArea" type="Area3D"] collision_layer = 2097152 diff --git a/addons/godot-xr-tools/objects/highlight/highlight_material.gd b/addons/godot-xr-tools/objects/highlight/highlight_material.gd index d5b8eb2..d5ee8a2 100644 --- a/addons/godot-xr-tools/objects/highlight/highlight_material.gd +++ b/addons/godot-xr-tools/objects/highlight/highlight_material.gd @@ -15,8 +15,8 @@ var _highlight_mesh_instance: MeshInstance3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHighlightMaterial" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHighlightMaterial" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/objects/highlight/highlight_material.gd.uid b/addons/godot-xr-tools/objects/highlight/highlight_material.gd.uid new file mode 100644 index 0000000..7249ada --- /dev/null +++ b/addons/godot-xr-tools/objects/highlight/highlight_material.gd.uid @@ -0,0 +1 @@ +uid://cdl5kcr2wvnav diff --git a/addons/godot-xr-tools/objects/highlight/highlight_ring.gd b/addons/godot-xr-tools/objects/highlight/highlight_ring.gd index cabd79c..46c6d6f 100644 --- a/addons/godot-xr-tools/objects/highlight/highlight_ring.gd +++ b/addons/godot-xr-tools/objects/highlight/highlight_ring.gd @@ -4,8 +4,8 @@ extends MeshInstance3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHighlightRing" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHighlightRing" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/objects/highlight/highlight_ring.gd.uid b/addons/godot-xr-tools/objects/highlight/highlight_ring.gd.uid new file mode 100644 index 0000000..cb1c1f8 --- /dev/null +++ b/addons/godot-xr-tools/objects/highlight/highlight_ring.gd.uid @@ -0,0 +1 @@ +uid://b8waaso7b6bsr diff --git a/addons/godot-xr-tools/objects/highlight/highlight_ring.tscn b/addons/godot-xr-tools/objects/highlight/highlight_ring.tscn index 5f5b9e3..915e89b 100644 --- a/addons/godot-xr-tools/objects/highlight/highlight_ring.tscn +++ b/addons/godot-xr-tools/objects/highlight/highlight_ring.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://da2qgxxwwitl6"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/highlight/highlight_ring.gd" id="1"] +[ext_resource type="Script" uid="uid://b8waaso7b6bsr" path="res://addons/godot-xr-tools/objects/highlight/highlight_ring.gd" id="1"] [ext_resource type="Material" path="res://addons/godot-xr-tools/objects/highlight/highlight_ring.tres" id="2"] [sub_resource type="QuadMesh" id="1"] diff --git a/addons/godot-xr-tools/objects/highlight/highlight_visible.gd b/addons/godot-xr-tools/objects/highlight/highlight_visible.gd index b3f2755..4549f1b 100644 --- a/addons/godot-xr-tools/objects/highlight/highlight_visible.gd +++ b/addons/godot-xr-tools/objects/highlight/highlight_visible.gd @@ -4,8 +4,8 @@ extends Node3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsHighlightVisible" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsHighlightVisible" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/objects/highlight/highlight_visible.gd.uid b/addons/godot-xr-tools/objects/highlight/highlight_visible.gd.uid new file mode 100644 index 0000000..24e2581 --- /dev/null +++ b/addons/godot-xr-tools/objects/highlight/highlight_visible.gd.uid @@ -0,0 +1 @@ +uid://0b7wkxi4vymb diff --git a/addons/godot-xr-tools/objects/interactable_area.gd b/addons/godot-xr-tools/objects/interactable_area.gd index 167cf22..9f190f4 100644 --- a/addons/godot-xr-tools/objects/interactable_area.gd +++ b/addons/godot-xr-tools/objects/interactable_area.gd @@ -8,5 +8,5 @@ signal pointer_event(event) # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsInteractableArea" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsInteractableArea" diff --git a/addons/godot-xr-tools/objects/interactable_area.gd.uid b/addons/godot-xr-tools/objects/interactable_area.gd.uid new file mode 100644 index 0000000..95fd51f --- /dev/null +++ b/addons/godot-xr-tools/objects/interactable_area.gd.uid @@ -0,0 +1 @@ +uid://e7gdpxabj45k diff --git a/addons/godot-xr-tools/objects/interactable_body.gd.uid b/addons/godot-xr-tools/objects/interactable_body.gd.uid new file mode 100644 index 0000000..c11f343 --- /dev/null +++ b/addons/godot-xr-tools/objects/interactable_body.gd.uid @@ -0,0 +1 @@ +uid://bcxvnq76xbncx diff --git a/addons/godot-xr-tools/objects/keyboard/virtual_key.gd.uid b/addons/godot-xr-tools/objects/keyboard/virtual_key.gd.uid new file mode 100644 index 0000000..599dc9d --- /dev/null +++ b/addons/godot-xr-tools/objects/keyboard/virtual_key.gd.uid @@ -0,0 +1 @@ +uid://bk7d6s38ejigt diff --git a/addons/godot-xr-tools/objects/keyboard/virtual_key_char.gd.uid b/addons/godot-xr-tools/objects/keyboard/virtual_key_char.gd.uid new file mode 100644 index 0000000..10e41b7 --- /dev/null +++ b/addons/godot-xr-tools/objects/keyboard/virtual_key_char.gd.uid @@ -0,0 +1 @@ +uid://tae1jc8su0i6 diff --git a/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd b/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd index a1d22fd..1d8a0c1 100644 --- a/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd +++ b/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd @@ -25,8 +25,8 @@ var _mode: int = KeyboardMode.LOWER_CASE # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsVirtualKeyboard2D" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsVirtualKeyboard2D" # Handle key pressed from VirtualKey diff --git a/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd.uid b/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd.uid new file mode 100644 index 0000000..f13ec98 --- /dev/null +++ b/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd.uid @@ -0,0 +1 @@ +uid://phmvrwkudp7u diff --git a/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.tscn b/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.tscn index 5e478ba..4ff166a 100644 --- a/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.tscn +++ b/addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=4 format=3 uid="uid://lauwp8okd1vh"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd" id="1"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/keyboard/virtual_key_char.gd" id="2_n0nlg"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/keyboard/virtual_key.gd" id="3_h05ve"] +[ext_resource type="Script" uid="uid://phmvrwkudp7u" path="res://addons/godot-xr-tools/objects/keyboard/virtual_keyboard_2d.gd" id="1"] +[ext_resource type="Script" uid="uid://tae1jc8su0i6" path="res://addons/godot-xr-tools/objects/keyboard/virtual_key_char.gd" id="2_n0nlg"] +[ext_resource type="Script" uid="uid://bk7d6s38ejigt" path="res://addons/godot-xr-tools/objects/keyboard/virtual_key.gd" id="3_h05ve"] [node name="VirtualKeyboard2D" type="CanvasLayer"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/objects/pickable.gd b/addons/godot-xr-tools/objects/pickable.gd index a9f9648..a9ccdb6 100644 --- a/addons/godot-xr-tools/objects/pickable.gd +++ b/addons/godot-xr-tools/objects/pickable.gd @@ -117,8 +117,8 @@ var _highlighted : bool = false # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsPickable" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsPickable" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/objects/pickable.gd.uid b/addons/godot-xr-tools/objects/pickable.gd.uid new file mode 100644 index 0000000..fb4a0f5 --- /dev/null +++ b/addons/godot-xr-tools/objects/pickable.gd.uid @@ -0,0 +1 @@ +uid://bfrlpbsqg5lqr diff --git a/addons/godot-xr-tools/objects/pickable.tscn b/addons/godot-xr-tools/objects/pickable.tscn index 6f34320..94b96c6 100644 --- a/addons/godot-xr-tools/objects/pickable.tscn +++ b/addons/godot-xr-tools/objects/pickable.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://c8l60rnugru40"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/pickable.gd" id="1"] +[ext_resource type="Script" uid="uid://bfrlpbsqg5lqr" path="res://addons/godot-xr-tools/objects/pickable.gd" id="1"] [node name="PickableObject" type="RigidBody3D"] collision_layer = 4 diff --git a/addons/godot-xr-tools/objects/return_to_snap_zone.gd b/addons/godot-xr-tools/objects/return_to_snap_zone.gd index b708d55..a19ac11 100644 --- a/addons/godot-xr-tools/objects/return_to_snap_zone.gd +++ b/addons/godot-xr-tools/objects/return_to_snap_zone.gd @@ -31,8 +31,8 @@ var _held := false # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsReturnToSnapZone" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsReturnToSnapZone" # Called when the node enters the scene tree for the first time. @@ -51,6 +51,9 @@ func _ready() -> void: # Handle the return counter func _process(delta : float) -> void: + if Engine.is_editor_hint(): + return + # Update return time and skip if still waiting _return_counter += delta if _return_counter < return_delay: diff --git a/addons/godot-xr-tools/objects/return_to_snap_zone.gd.uid b/addons/godot-xr-tools/objects/return_to_snap_zone.gd.uid new file mode 100644 index 0000000..b81605e --- /dev/null +++ b/addons/godot-xr-tools/objects/return_to_snap_zone.gd.uid @@ -0,0 +1 @@ +uid://bvnrc8puaxqel diff --git a/addons/godot-xr-tools/objects/snap_path.gd b/addons/godot-xr-tools/objects/snap_path.gd index 3108875..457d899 100644 --- a/addons/godot-xr-tools/objects/snap_path.gd +++ b/addons/godot-xr-tools/objects/snap_path.gd @@ -90,10 +90,10 @@ func _make_temp_zone(): # connect lambda to play stash sounds when temp zone picks up if has_node("AudioStreamPlayer3D"): - zone.has_picked_up.connect(\ - func(object):\ - $AudioStreamPlayer3D.stream = stash_sound;\ - $AudioStreamPlayer3D.play()\ + zone.has_picked_up.connect( + func(object): + $AudioStreamPlayer3D.stream = stash_sound + $AudioStreamPlayer3D.play() ) # XRToolsSnapZone manaul copy diff --git a/addons/godot-xr-tools/objects/snap_path.gd.uid b/addons/godot-xr-tools/objects/snap_path.gd.uid new file mode 100644 index 0000000..6f4da1e --- /dev/null +++ b/addons/godot-xr-tools/objects/snap_path.gd.uid @@ -0,0 +1 @@ +uid://bk0xen1ol7xb2 diff --git a/addons/godot-xr-tools/objects/snap_path.tscn b/addons/godot-xr-tools/objects/snap_path.tscn index 1dbd323..a3fab18 100644 --- a/addons/godot-xr-tools/objects/snap_path.tscn +++ b/addons/godot-xr-tools/objects/snap_path.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=4 format=3 uid="uid://dsstvanwd58r0"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/snap_path.gd" id="1_m211o"] +[ext_resource type="Script" uid="uid://bk0xen1ol7xb2" path="res://addons/godot-xr-tools/objects/snap_path.gd" id="1_m211o"] [sub_resource type="BoxShape3D" id="BoxShape3D_pik8g"] size = Vector3(0.1, 0.1, 1) diff --git a/addons/godot-xr-tools/objects/snap_path_guide.gd.uid b/addons/godot-xr-tools/objects/snap_path_guide.gd.uid new file mode 100644 index 0000000..852f7f9 --- /dev/null +++ b/addons/godot-xr-tools/objects/snap_path_guide.gd.uid @@ -0,0 +1 @@ +uid://dmdr4j8plvntu diff --git a/addons/godot-xr-tools/objects/snap_zone.gd b/addons/godot-xr-tools/objects/snap_zone.gd index 603999d..3616175 100644 --- a/addons/godot-xr-tools/objects/snap_zone.gd +++ b/addons/godot-xr-tools/objects/snap_zone.gd @@ -62,8 +62,8 @@ var _object_in_grab_area = Array() # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsSnapZone" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsSnapZone" func _ready(): @@ -73,7 +73,7 @@ func _ready(): # Add important connections if not body_entered.is_connected(_on_snap_zone_body_entered): - body_entered.connect(_on_snap_zone_body_exited) + body_entered.connect(_on_snap_zone_body_entered) if not body_exited.is_connected(_on_snap_zone_body_exited): body_exited.connect(_on_snap_zone_body_exited) @@ -180,6 +180,13 @@ func _initial_object_check() -> void: # Show highlight when empty and enabled highlight_updated.emit(self, enabled) + # Stop any audio from initial pickup + var audio := get_node("AudioStreamPlayer3D") if has_node("AudioStreamPlayer3D") else null + + # Only stop if the user doesn't intend to auto-play + if audio is AudioStreamPlayer3D and !audio.autoplay: + audio.stop() + # Called when a body enters the snap zone func _on_snap_zone_body_entered(target: Node3D) -> void: diff --git a/addons/godot-xr-tools/objects/snap_zone.gd.uid b/addons/godot-xr-tools/objects/snap_zone.gd.uid new file mode 100644 index 0000000..7fbad28 --- /dev/null +++ b/addons/godot-xr-tools/objects/snap_zone.gd.uid @@ -0,0 +1 @@ +uid://cquqe4f1m1sw6 diff --git a/addons/godot-xr-tools/objects/snap_zone.tscn b/addons/godot-xr-tools/objects/snap_zone.tscn index 1348462..5c8ea23 100644 --- a/addons/godot-xr-tools/objects/snap_zone.tscn +++ b/addons/godot-xr-tools/objects/snap_zone.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=3 format=3 uid="uid://ce7vysyvondf8"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/snap_zone.gd" id="1"] +[ext_resource type="Script" uid="uid://cquqe4f1m1sw6" path="res://addons/godot-xr-tools/objects/snap_zone.gd" id="1"] [sub_resource type="SphereShape3D" id="1"] resource_local_to_scene = true diff --git a/addons/godot-xr-tools/objects/teleport_area.gd b/addons/godot-xr-tools/objects/teleport_area.gd index 8932f9d..7180d94 100644 --- a/addons/godot-xr-tools/objects/teleport_area.gd +++ b/addons/godot-xr-tools/objects/teleport_area.gd @@ -8,8 +8,8 @@ extends Area3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsTeleportArea" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsTeleportArea" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/objects/teleport_area.gd.uid b/addons/godot-xr-tools/objects/teleport_area.gd.uid new file mode 100644 index 0000000..d8475a9 --- /dev/null +++ b/addons/godot-xr-tools/objects/teleport_area.gd.uid @@ -0,0 +1 @@ +uid://153oneb2r3uq diff --git a/addons/godot-xr-tools/objects/teleport_area.tscn b/addons/godot-xr-tools/objects/teleport_area.tscn index 4297c4d..659039d 100644 --- a/addons/godot-xr-tools/objects/teleport_area.tscn +++ b/addons/godot-xr-tools/objects/teleport_area.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://dpy1eg3i331se"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/teleport_area.gd" id="1_0awk1"] +[ext_resource type="Script" uid="uid://153oneb2r3uq" path="res://addons/godot-xr-tools/objects/teleport_area.gd" id="1_0awk1"] [node name="TeleportArea" type="Area3D"] collision_layer = 0 diff --git a/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd b/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd index 6260193..e9a40a9 100644 --- a/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd +++ b/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd @@ -97,7 +97,7 @@ const DEFAULT_LAYER := 0b0000_0000_0101_0000_0000_0000_0000_0001 @export var material : StandardMaterial3D = null: set = set_material ## Transparent property -@export var transparent : TransparancyMode = TransparancyMode.TRANSPARENT: set = set_transparent +var transparent : TransparancyMode = TransparancyMode.TRANSPARENT: set = set_transparent ## Alpha Scissor Threshold property (ignored when custom material provided) var alpha_scissor_threshold : float = 0.25: set = set_alpha_scissor_threshold @@ -123,8 +123,8 @@ var _dirty := _DIRTY_ALL # Add support for is_xr_class on XRTools classes -func is_xr_class(p_name : String) -> bool: - return p_name == "XRToolsViewport2DIn3D" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsViewport2DIn3D" # Called when the node enters the scene tree for the first time. @@ -149,6 +149,7 @@ func _ready(): # Provide custom property information func _get_property_list() -> Array[Dictionary]: # Select visibility of properties + var show_transparency := not material var show_alpha_scissor := not material and transparent == TransparancyMode.SCISSOR var show_unshaded := not material var show_filter := not material @@ -159,6 +160,11 @@ func _get_property_list() -> Array[Dictionary]: type = TYPE_NIL, usage = PROPERTY_USAGE_GROUP }, + { + name = "transparent", + type = TYPE_BOOL, + usage = PROPERTY_USAGE_DEFAULT if show_transparency else PROPERTY_USAGE_NO_EDITOR + }, { name = "alpha_scissor_threshold", type = TYPE_FLOAT, @@ -405,6 +411,10 @@ func set_update_mode(new_update_mode: UpdateMode) -> void: func set_material(new_material: StandardMaterial3D) -> void: material = new_material notify_property_list_changed() + + # Discard our screen material, _update_render will create a new one. + _screen_material = null + _dirty |= _DIRTY_MATERIAL if is_ready: _update_render() @@ -473,11 +483,23 @@ func _update_render() -> void: if _dirty & _DIRTY_MATERIAL: _dirty &= ~_DIRTY_MATERIAL - # Construct the new screen material if material: - # Copy custom material - _screen_material = material.duplicate() - else: + # We can't use our material directly because each instance uses + # it's own ViewportTexture. So we duplicate our material. + if not _screen_material: + _screen_material = material.duplicate() + else: + # We should only get here if we're in our editor. + # We can't detect when our material changes, + # so we need to check for changed properties. + for property in ClassDB.class_get_property_list("BaseMaterial3D", true): + # If any of the material properties we do not manage changed, update them. + if property.name != "albedo_texture": + var was_value = _screen_material.get(property.name) + var new_value = material.get(property.name) + if was_value != new_value: + _screen_material.set(property.name, new_value) + elif not _screen_material: # Create new local material _screen_material = StandardMaterial3D.new() @@ -538,8 +560,8 @@ func _update_render() -> void: $Viewport.size = viewport_size $StaticBody3D.viewport_size = viewport_size - # Update our viewport texture, it will have changed - _dirty |= _DIRTY_ALBEDO + # Perform redraw to let viewport texture update correctly after changing the viewport's size + _dirty |= _DIRTY_REDRAW # Handle albedo change: if _dirty & _DIRTY_ALBEDO: diff --git a/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd.uid b/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd.uid new file mode 100644 index 0000000..1fe9e3c --- /dev/null +++ b/addons/godot-xr-tools/objects/viewport_2d_in_3d.gd.uid @@ -0,0 +1 @@ +uid://eavk7267igp7 diff --git a/addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn b/addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn index cf0531c..71e2269 100644 --- a/addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn +++ b/addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=7 format=3 uid="uid://clujaf3u776a3"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.gd" id="1"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd" id="2"] +[ext_resource type="Script" uid="uid://eavk7267igp7" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.gd" id="1"] +[ext_resource type="Script" uid="uid://cpl5yiyf1ypft" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd" id="2"] [sub_resource type="QuadMesh" id="1"] resource_local_to_scene = true diff --git a/addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd.uid b/addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd.uid new file mode 100644 index 0000000..2631c4c --- /dev/null +++ b/addons/godot-xr-tools/objects/viewport_2d_in_3d_body.gd.uid @@ -0,0 +1 @@ +uid://cpl5yiyf1ypft diff --git a/addons/godot-xr-tools/objects/wind_area.gd b/addons/godot-xr-tools/objects/wind_area.gd index 536ac70..bac23a8 100644 --- a/addons/godot-xr-tools/objects/wind_area.gd +++ b/addons/godot-xr-tools/objects/wind_area.gd @@ -10,5 +10,5 @@ extends Area3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsWindArea" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsWindArea" diff --git a/addons/godot-xr-tools/objects/wind_area.gd.uid b/addons/godot-xr-tools/objects/wind_area.gd.uid new file mode 100644 index 0000000..55a2831 --- /dev/null +++ b/addons/godot-xr-tools/objects/wind_area.gd.uid @@ -0,0 +1 @@ +uid://c7l0klrkdolyw diff --git a/addons/godot-xr-tools/objects/wind_area.tscn b/addons/godot-xr-tools/objects/wind_area.tscn index 0e8d911..e883dd0 100644 --- a/addons/godot-xr-tools/objects/wind_area.tscn +++ b/addons/godot-xr-tools/objects/wind_area.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://nack1qite6lx"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/wind_area.gd" id="1"] +[ext_resource type="Script" uid="uid://c7l0klrkdolyw" path="res://addons/godot-xr-tools/objects/wind_area.gd" id="1"] [node name="WindArea" type="Area3D"] collision_layer = 524288 diff --git a/addons/godot-xr-tools/objects/world_grab_area.gd b/addons/godot-xr-tools/objects/world_grab_area.gd index 4a68aeb..b559a1a 100644 --- a/addons/godot-xr-tools/objects/world_grab_area.gd +++ b/addons/godot-xr-tools/objects/world_grab_area.gd @@ -20,8 +20,8 @@ var grab_locations := {} # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsWorldGrabArea" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsWorldGrabArea" # Called by XRToolsFunctionPickup diff --git a/addons/godot-xr-tools/objects/world_grab_area.gd.uid b/addons/godot-xr-tools/objects/world_grab_area.gd.uid new file mode 100644 index 0000000..4aa7d17 --- /dev/null +++ b/addons/godot-xr-tools/objects/world_grab_area.gd.uid @@ -0,0 +1 @@ +uid://curcpmtyhxa1b diff --git a/addons/godot-xr-tools/objects/world_grab_area.tscn b/addons/godot-xr-tools/objects/world_grab_area.tscn index 341346f..e5f7ebf 100644 --- a/addons/godot-xr-tools/objects/world_grab_area.tscn +++ b/addons/godot-xr-tools/objects/world_grab_area.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://57q7hhomocdh"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/objects/world_grab_area.gd" id="1_uxhq5"] +[ext_resource type="Script" uid="uid://curcpmtyhxa1b" path="res://addons/godot-xr-tools/objects/world_grab_area.gd" id="1_uxhq5"] [node name="WorldGrabArea" type="Area3D"] collision_layer = 262144 diff --git a/addons/godot-xr-tools/overrides/ground_physics.gd b/addons/godot-xr-tools/overrides/ground_physics.gd index 55b0308..5c1b121 100644 --- a/addons/godot-xr-tools/overrides/ground_physics.gd +++ b/addons/godot-xr-tools/overrides/ground_physics.gd @@ -18,8 +18,8 @@ extends Node # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsGroundPhysics" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsGroundPhysics" # This method verifies the ground physics has a valid configuration. diff --git a/addons/godot-xr-tools/overrides/ground_physics.gd.uid b/addons/godot-xr-tools/overrides/ground_physics.gd.uid new file mode 100644 index 0000000..17db069 --- /dev/null +++ b/addons/godot-xr-tools/overrides/ground_physics.gd.uid @@ -0,0 +1 @@ +uid://bp048k3fcdvo3 diff --git a/addons/godot-xr-tools/overrides/ground_physics.tscn b/addons/godot-xr-tools/overrides/ground_physics.tscn index 53439a5..d832579 100644 --- a/addons/godot-xr-tools/overrides/ground_physics.tscn +++ b/addons/godot-xr-tools/overrides/ground_physics.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://ohmfk2ly8312"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/overrides/ground_physics.gd" id="1"] +[ext_resource type="Script" uid="uid://bp048k3fcdvo3" path="res://addons/godot-xr-tools/overrides/ground_physics.gd" id="1"] [node name="GroundPhysics" type="Node"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/overrides/ground_physics_settings.gd.uid b/addons/godot-xr-tools/overrides/ground_physics_settings.gd.uid new file mode 100644 index 0000000..f0541f9 --- /dev/null +++ b/addons/godot-xr-tools/overrides/ground_physics_settings.gd.uid @@ -0,0 +1 @@ +uid://cjfu28jmrajlo diff --git a/addons/godot-xr-tools/player/fade/fade_collision.gd b/addons/godot-xr-tools/player/fade/fade_collision.gd index 746fdd7..16a9622 100644 --- a/addons/godot-xr-tools/player/fade/fade_collision.gd +++ b/addons/godot-xr-tools/player/fade/fade_collision.gd @@ -27,8 +27,8 @@ var _space : PhysicsDirectSpaceState3D # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsFadeCollision" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsFadeCollision" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/player/fade/fade_collision.gd.uid b/addons/godot-xr-tools/player/fade/fade_collision.gd.uid new file mode 100644 index 0000000..2123161 --- /dev/null +++ b/addons/godot-xr-tools/player/fade/fade_collision.gd.uid @@ -0,0 +1 @@ +uid://qk8ofik5trvx diff --git a/addons/godot-xr-tools/player/fade/fade_collision.tscn b/addons/godot-xr-tools/player/fade/fade_collision.tscn index 72af0c5..17d3f47 100644 --- a/addons/godot-xr-tools/player/fade/fade_collision.tscn +++ b/addons/godot-xr-tools/player/fade/fade_collision.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://b228p8k6sonve"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/player/fade/fade_collision.gd" id="1_xrp2u"] +[ext_resource type="Script" uid="uid://qk8ofik5trvx" path="res://addons/godot-xr-tools/player/fade/fade_collision.gd" id="1_xrp2u"] [node name="FadeCollision" type="Node3D"] script = ExtResource("1_xrp2u") diff --git a/addons/godot-xr-tools/player/player_body.gd b/addons/godot-xr-tools/player/player_body.gd index 8674cf6..584b7ee 100644 --- a/addons/godot-xr-tools/player/player_body.gd +++ b/addons/godot-xr-tools/player/player_body.gd @@ -77,6 +77,14 @@ const NEAR_GROUND_DISTANCE := 1.0 ## Mix factor for body orientation @export_range(0.0, 1.0) var body_forward_mix : float = 0.75 +## Maximum distance the head may move away from the player body +@export_range(0.0, 2.0, 0.01) var max_head_distance = 1.0 + +## Behaviour mode when players head collides, or moves beyond [member max_head_distance]. +## Push away, pushes the player body away. +## Fade, fades view to black. +@export_enum("Push away", "Fade", "Disabled") var head_behavior_mode = 1 + @export_group("Collisions") ## Lets the player push rigid bodies @@ -169,6 +177,11 @@ var _head_shape_cast : ShapeCast3D # True while we're handling physics var _in_physics_movement : bool = false +# Fade object +var _fade : XRToolsFade + +# Fade value +var _fade_value : float = 0.0 ## XROrigin3D node @onready var origin_node : XROrigin3D = XRHelpers.get_xr_origin(self) @@ -192,15 +205,23 @@ func sort_by_order(a, b) -> bool: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsPlayerBody" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsPlayerBody" # Called when the node enters the scene tree for the first time. func _ready(): - # Set as toplevel means our PlayerBody is positioned in global space. - # It is not moved when its parent moves. - set_as_top_level(true) + if Engine.is_editor_hint(): + # In editing, keep player body linked to our origin + set_as_top_level(false) + transform = Transform3D() + else: + # Set as toplevel means our PlayerBody is positioned in global space. + # It is not moved when its parent moves. + set_as_top_level(true) + if get_parent(): + # Make sure we're positioned correctly at the start. + global_transform = get_parent().global_transform # Create our collision shape, height will be updated later var capsule = CapsuleShape3D.new() @@ -214,6 +235,7 @@ func _ready(): # Create the shape-cast for head collisions _head_shape_cast = ShapeCast3D.new() _head_shape_cast.enabled = false + _head_shape_cast.exclude_parent = true _head_shape_cast.margin = 0.01 _head_shape_cast.collision_mask = collision_mask _head_shape_cast.max_results = 1 @@ -244,20 +266,24 @@ func _update_enabled() -> void: if enabled: set_physics_process(true) + func set_player_radius(new_value: float) -> void: player_radius = new_value if is_inside_tree(): _update_player_radius() + func _update_player_radius() -> void: if _collision_node and _collision_node.shape: _collision_node.shape.radius = player_radius + func set_physics(new_value: XRToolsGroundPhysicsSettings) -> void: # Save the property physics = new_value default_physics = _guaranteed_physics() + func _physics_process(delta: float): # Do not run physics if in the editor if Engine.is_editor_hint(): @@ -345,6 +371,7 @@ func _physics_process(delta: float): # And we're done! _in_physics_movement = false + ## Teleport the player body. ## This moves the player without checking for collisions. func teleport(target : Transform3D) -> void: @@ -399,7 +426,7 @@ func request_jump(skip_jump_velocity := false): func move_player(p_velocity: Vector3) -> Vector3: velocity = p_velocity max_slides = 4 - up_direction = ground_vector + up_direction = up_gravity # Get the player body location before we apply our movement. var transform_before_movement : Transform3D = global_transform @@ -486,6 +513,7 @@ func slew_up(up: Vector3, slew: float) -> void: # Update the origin origin_node.global_transform = new_origin + ## This method calibrates the players height on the assumption ## the player is in rest position func calibrate_player_height(): @@ -493,6 +521,7 @@ func calibrate_player_height(): var player_height = XRToolsUserSettings.player_height * XRServer.world_scale player_height_offset = (player_height - base_height) / XRServer.world_scale + ## This method sets or clears a named height override func override_player_height(key, value: float = -1.0): # Clear or set the override @@ -511,11 +540,12 @@ func override_player_height(key, value: float = -1.0): # Disable height override _player_height_override_enabled = false + # Estimate body forward direction func _estimate_body_forward_dir() -> Vector3: var forward = Vector3() var camera_basis : Basis = camera_node.global_transform.basis - var camera_forward : Vector3 = -camera_basis.z; + var camera_forward : Vector3 = -camera_basis.z var camera_elevation := camera_forward.dot(up_player) if camera_elevation > 0.75: @@ -545,6 +575,7 @@ func _estimate_body_forward_dir() -> Vector3: return forward + # This method updates the player body to match the player position func _update_body_under_camera(delta : float): # Initially calibration of player height @@ -552,10 +583,13 @@ func _update_body_under_camera(delta : float): calibrate_player_height() player_calibrate_height = false + var adj_player_radius = player_radius * XRServer.world_scale + var adj_player_head_height = player_head_height * XRServer.world_scale + # Calculate the player height based on the camera position in the origin and the calibration var player_height: float = clamp( camera_node.transform.origin.y - + (player_head_height * XRServer.world_scale) + + adj_player_head_height + (player_height_offset * XRServer.world_scale), player_height_min * XRServer.world_scale, player_height_max * XRServer.world_scale) @@ -596,7 +630,7 @@ func _update_body_under_camera(delta : float): _player_height_override_lerp) # Ensure player height makes mathematical sense - player_height = max(player_height, player_radius) + player_height = max(player_height, adj_player_radius) # Test if the player is trying to get taller var current_height : float = _collision_node.shape.height @@ -611,15 +645,15 @@ func _update_body_under_camera(delta : float): # ceiling. var reduced_height : float = max( current_height - 0.1, - player_radius) + adj_player_radius) # Calculate how much we want to grow to hit the target height var grow := target_height - reduced_height # Cast the virtual head up from the reduced-height position up to the # target height to check for ceiling collisions. - _head_shape_cast.shape.radius = player_radius - _head_shape_cast.transform.origin.y = reduced_height - player_radius + _head_shape_cast.shape.radius = adj_player_radius + _head_shape_cast.transform.origin.y = reduced_height - adj_player_radius _head_shape_cast.collision_mask = collision_mask _head_shape_cast.target_position = Vector3.UP * grow _head_shape_cast.force_shapecast_update() @@ -632,25 +666,98 @@ func _update_body_under_camera(delta : float): current_height) # Adjust the collision shape to match the player geometry - _collision_node.shape.radius = player_radius + _collision_node.shape.radius = adj_player_radius _collision_node.shape.height = player_height _collision_node.transform.origin.y = (player_height / 2.0) # Center the kinematic body on the ground under the camera - var curr_transform := global_transform + var target_transform := global_transform var camera_transform := camera_node.global_transform - curr_transform.basis = origin_node.global_transform.basis - curr_transform.origin = camera_transform.origin - curr_transform.origin += up_player * (player_head_height - player_height) + target_transform.basis = origin_node.global_transform.basis + target_transform.origin = camera_transform.origin + target_transform.origin += up_player * (adj_player_head_height - player_height) # The camera/eyes are towards the front of the body, so move the body back slightly var forward_dir := _estimate_body_forward_dir() if forward_dir.length() > 0.01: - curr_transform = curr_transform.looking_at(curr_transform.origin + forward_dir, up_player) - curr_transform.origin -= forward_dir.normalized() * eye_forward_offset * player_radius + target_transform = target_transform.looking_at(target_transform.origin + forward_dir, up_player) + target_transform.origin -= forward_dir.normalized() * eye_forward_offset * adj_player_radius + + # If head behavior is disabled, just move + if head_behavior_mode == 2: + global_transform = target_transform + return + + # Apply rotation + global_basis = target_transform.basis + + # Always apply height + global_position += (target_transform.origin - global_position).project(global_basis.y) + + # But do lateral movement with move and collide + var body_movement = target_transform.origin - global_position + + var collision : KinematicCollision3D = move_and_collide(body_movement) + var fade : bool = false + if collision and collision.get_collision_count() > 0: + var camera_local_transform = global_transform.inverse() * camera_node.global_transform + var camera_local_position = camera_local_transform.origin + + # Move it to our head center + camera_local_position += camera_local_transform.basis.z * eye_forward_offset * adj_player_radius + + # If we can't move here, check if our head can move + _head_shape_cast.shape.radius = adj_player_head_height + _head_shape_cast.transform.origin.y = player_height - adj_player_head_height + _head_shape_cast.collision_mask = collision_mask + _head_shape_cast.target_position = (camera_local_position - _head_shape_cast.transform.origin) * Vector3(1.0, 0.0, 1.0) + + var target_move_distance = _head_shape_cast.target_position.length() + + # Cast shape + _head_shape_cast.force_shapecast_update() + + # See how far we can move + var safe := min(_head_shape_cast.get_closest_collision_safe_fraction(), max_head_distance / target_move_distance) + if safe < 1.0: + # print("Attempted to move head from ", _head_shape_cast.transform.origin, " to ", camera_local_position, " => ", _head_shape_cast.target_position, ", safe: ", safe) + + if head_behavior_mode == 0: + # Push body back, we actually move our player body into the collision, + # by the amount of movement left after the collision. + # Then in our actual move and slide we'll get pushed out. + # Do note that safe isn't super accurate. + var push_back_by = body_movement * (1.0 - safe) + global_position += push_back_by + else: + # Fade to black + fade = true + + if fade: + if not _fade: + # Use global fade if we have one + _fade = XRToolsFade.get_fade_node() + if not _fade: + # Else create a local instance + var fade_scene : PackedScene = load("res://addons/godot-xr-tools/effects/fade.tscn") + _fade = fade_scene.instantiate() + add_child(_fade, false, Node.INTERNAL_MODE_BACK) + + _fade_value = max(_fade_value + delta * 3.0, 0.0) + + _fade.set_fade_level(self, Color(0, 0, 0, _fade_value)) + elif _fade and _fade_value > 0.0: + _fade_value = max(_fade_value - delta * 3.0, 0.0) + + _fade.set_fade_level(self, Color(0, 0, 0, _fade_value)) + + +# Called when we're removed from the scene tree +func _exit_tree(): + if _fade: + # Just in case our fade was global, make sure we clean up. + _fade.set_fade_level(self, Color(0 ,0 ,0 ,0 )) - # Set the body position - global_transform = curr_transform # This method updates the information about the ground under the players feet func _update_ground_information(delta: float): @@ -789,6 +896,7 @@ func _apply_velocity_and_control(delta: float): #if abs(velocity.y) < 0.001: # velocity.y = ground_velocity.y + # Test if the player can apply ground control given the settings and the ground state. func _can_apply_ground_control() -> bool: match ground_control: @@ -804,6 +912,7 @@ func _can_apply_ground_control() -> bool: _: return false + # Get a guaranteed-valid physics func _guaranteed_physics(): # Ensure we have a guaranteed-valid XRToolsGroundPhysicsSettings value @@ -815,6 +924,7 @@ func _guaranteed_physics(): # Return the guaranteed-valid physics return valid_physics + # This method verifies the XRToolsPlayerBody has a valid configuration. Specifically it # checks the following: # - XROrigin3D can be identified @@ -846,6 +956,9 @@ func _get_configuration_warnings() -> PackedStringArray: if player_height_max < player_height_min: warnings.append("Player height maximum cannot be smaller than minimum") + if head_behavior_mode == 1 and player_radius <= player_head_height: + warnings.append("When using fade mode, player radius should be larger than head height") + # Verify eye-forward does not allow near-clip-plane look through var eyes_to_collider = (1.0 - eye_forward_offset) * player_radius if test_camera_node and eyes_to_collider < test_camera_node.near: @@ -859,6 +972,16 @@ func _get_configuration_warnings() -> PackedStringArray: # Return warnings return warnings + +# Check property config +func _validate_property(property): + if property.name == "position" or property.name == "rotation" or property.name == "scale" \ + or property.name == "rotation_edit_mode" or property.name == "rotation_order" \ + or property.name == "top_level": + # We control these, don't let the user set them. + property.usage = PROPERTY_USAGE_NONE + + ## Find an [XRToolsPlayerBody] node. ## ## This function searches from the specified node for an [XRToolsPlayerBody] diff --git a/addons/godot-xr-tools/player/player_body.gd.uid b/addons/godot-xr-tools/player/player_body.gd.uid new file mode 100644 index 0000000..42978cc --- /dev/null +++ b/addons/godot-xr-tools/player/player_body.gd.uid @@ -0,0 +1 @@ +uid://ck4yn3hxuobj7 diff --git a/addons/godot-xr-tools/player/player_body.tscn b/addons/godot-xr-tools/player/player_body.tscn index dbddb9d..606affd 100644 --- a/addons/godot-xr-tools/player/player_body.tscn +++ b/addons/godot-xr-tools/player/player_body.tscn @@ -1,11 +1,10 @@ [gd_scene load_steps=2 format=3 uid="uid://diyu06cw06syv"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/player/player_body.gd" id="1"] +[ext_resource type="Script" uid="uid://ck4yn3hxuobj7" path="res://addons/godot-xr-tools/player/player_body.gd" id="1"] [node name="PlayerBody" type="CharacterBody3D" groups=["player_body"]] process_priority = -100 process_physics_priority = -100 -top_level = true collision_layer = 524288 collision_mask = 1023 script = ExtResource("1") diff --git a/addons/godot-xr-tools/player/poke/poke.gd b/addons/godot-xr-tools/player/poke/poke.gd index e005e34..dd23aff 100644 --- a/addons/godot-xr-tools/player/poke/poke.gd +++ b/addons/godot-xr-tools/player/poke/poke.gd @@ -146,8 +146,8 @@ func _update_color() -> void: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsPoke" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsPoke" # Called when the node enters the scene tree for the first time. diff --git a/addons/godot-xr-tools/player/poke/poke.gd.uid b/addons/godot-xr-tools/player/poke/poke.gd.uid new file mode 100644 index 0000000..a427b76 --- /dev/null +++ b/addons/godot-xr-tools/player/poke/poke.gd.uid @@ -0,0 +1 @@ +uid://dbxa71yertw7v diff --git a/addons/godot-xr-tools/player/poke/poke.tscn b/addons/godot-xr-tools/player/poke/poke.tscn index c946c52..248a3d0 100644 --- a/addons/godot-xr-tools/player/poke/poke.tscn +++ b/addons/godot-xr-tools/player/poke/poke.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=8 format=3 uid="uid://bjcxf427un2wp"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/player/poke/poke.gd" id="1"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/player/poke/poke_body.gd" id="2"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/rumble/rumbler.gd" id="3_41fwo"] +[ext_resource type="Script" uid="uid://dbxa71yertw7v" path="res://addons/godot-xr-tools/player/poke/poke.gd" id="1"] +[ext_resource type="Script" uid="uid://bsrl2m5idli7k" path="res://addons/godot-xr-tools/player/poke/poke_body.gd" id="2"] +[ext_resource type="Script" uid="uid://dff408qq7s26e" path="res://addons/godot-xr-tools/rumble/rumbler.gd" id="3_41fwo"] [ext_resource type="Resource" uid="uid://brci6umrcd157" path="res://addons/godot-xr-tools/rumble/tap_rumble.tres" id="4_mskmk"] [sub_resource type="SphereShape3D" id="1"] @@ -16,7 +16,7 @@ height = 0.01 radial_segments = 32 rings = 16 -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_hgik7"] +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_uvdwq"] transparency = 1 shading_mode = 0 albedo_color = Color(0.8, 0.8, 1, 0.5) @@ -36,7 +36,7 @@ shape = SubResource("1") [node name="MeshInstance" type="MeshInstance3D" parent="PokeBody"] mesh = SubResource("2") -surface_material_override/0 = SubResource("StandardMaterial3D_hgik7") +surface_material_override/0 = SubResource("StandardMaterial3D_uvdwq") [node name="Rumbler" type="Node" parent="."] script = ExtResource("3_41fwo") diff --git a/addons/godot-xr-tools/player/poke/poke_body.gd b/addons/godot-xr-tools/player/poke/poke_body.gd index 13c24de..6a31d66 100644 --- a/addons/godot-xr-tools/player/poke/poke_body.gd +++ b/addons/godot-xr-tools/player/poke/poke_body.gd @@ -21,15 +21,26 @@ var _contact : Node3D = null # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsPokeBody" or super(name) +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsPokeBody" or super(xr_name) + + +func _validate_property(property): + if property.name == "top_level": + property.usage = PROPERTY_USAGE_NONE func _ready(): # Do not initialise if in the editor if Engine.is_editor_hint(): + # In editor, show it at its start location + top_level = false + transform = Transform3D() return + # In runtime, we control the position + top_level = true + # Connect to player body signals (if applicable) var player_body = XRToolsPlayerBody.find_instance(self) if player_body: diff --git a/addons/godot-xr-tools/player/poke/poke_body.gd.uid b/addons/godot-xr-tools/player/poke/poke_body.gd.uid new file mode 100644 index 0000000..47b95f0 --- /dev/null +++ b/addons/godot-xr-tools/player/poke/poke_body.gd.uid @@ -0,0 +1 @@ +uid://bsrl2m5idli7k diff --git a/addons/godot-xr-tools/plugin.cfg b/addons/godot-xr-tools/plugin.cfg index 78962cd..ca0310f 100644 --- a/addons/godot-xr-tools/plugin.cfg +++ b/addons/godot-xr-tools/plugin.cfg @@ -3,5 +3,5 @@ name="Godot XR Tools" description="Godot XR Tools plugin" author="Bastiaan Olij and Contributors" -version="4.4.0" +version="4.5.1" script="plugin.gd" diff --git a/addons/godot-xr-tools/plugin.gd.uid b/addons/godot-xr-tools/plugin.gd.uid new file mode 100644 index 0000000..d7a8712 --- /dev/null +++ b/addons/godot-xr-tools/plugin.gd.uid @@ -0,0 +1 @@ +uid://0gwjn8u4mamc diff --git a/addons/godot-xr-tools/rumble/rumble_event.gd.uid b/addons/godot-xr-tools/rumble/rumble_event.gd.uid new file mode 100644 index 0000000..e966a22 --- /dev/null +++ b/addons/godot-xr-tools/rumble/rumble_event.gd.uid @@ -0,0 +1 @@ +uid://b15qba0ch13uw diff --git a/addons/godot-xr-tools/rumble/rumble_manager.gd b/addons/godot-xr-tools/rumble/rumble_manager.gd index a9a3a5a..51a80a0 100644 --- a/addons/godot-xr-tools/rumble/rumble_manager.gd +++ b/addons/godot-xr-tools/rumble/rumble_manager.gd @@ -23,8 +23,8 @@ var _queues: Dictionary = {} ## Add support for is_xr_class -func is_xr_class(p_name: String) -> bool: - return p_name == "XRToolsRumbleManager" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsRumbleManager" ## Get the default Haptics Scale value @@ -100,7 +100,7 @@ func _process(delta: float) -> void: magnitude *= XRToolsUserSettings.haptics_scale # Make that tracker rumble - if magnitude > 0: + if magnitude > 0 and XRServer.primary_interface: XRServer.primary_interface.trigger_haptic_pulse( HAPTIC_ACTION, tracker_name, # if the tracker name isn't valid, it will error but continue diff --git a/addons/godot-xr-tools/rumble/rumble_manager.gd.uid b/addons/godot-xr-tools/rumble/rumble_manager.gd.uid new file mode 100644 index 0000000..d0bdd08 --- /dev/null +++ b/addons/godot-xr-tools/rumble/rumble_manager.gd.uid @@ -0,0 +1 @@ +uid://by853dk86g1qw diff --git a/addons/godot-xr-tools/rumble/rumble_manager_queue.gd.uid b/addons/godot-xr-tools/rumble/rumble_manager_queue.gd.uid new file mode 100644 index 0000000..057cdee --- /dev/null +++ b/addons/godot-xr-tools/rumble/rumble_manager_queue.gd.uid @@ -0,0 +1 @@ +uid://ddpbyiiknangp diff --git a/addons/godot-xr-tools/rumble/rumbler.gd.uid b/addons/godot-xr-tools/rumble/rumbler.gd.uid new file mode 100644 index 0000000..b6e8a65 --- /dev/null +++ b/addons/godot-xr-tools/rumble/rumbler.gd.uid @@ -0,0 +1 @@ +uid://dff408qq7s26e diff --git a/addons/godot-xr-tools/rumble/tap_rumble.tres b/addons/godot-xr-tools/rumble/tap_rumble.tres index eccee84..a273faa 100644 --- a/addons/godot-xr-tools/rumble/tap_rumble.tres +++ b/addons/godot-xr-tools/rumble/tap_rumble.tres @@ -1,6 +1,6 @@ [gd_resource type="Resource" script_class="XRToolsRumbleEvent" load_steps=2 format=3 uid="uid://brci6umrcd157"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/rumble/rumble_event.gd" id="1_r2qd4"] +[ext_resource type="Script" uid="uid://b15qba0ch13uw" path="res://addons/godot-xr-tools/rumble/rumble_event.gd" id="1_r2qd4"] [resource] script = ExtResource("1_r2qd4") diff --git a/addons/godot-xr-tools/staging/loading_screen.gd.uid b/addons/godot-xr-tools/staging/loading_screen.gd.uid new file mode 100644 index 0000000..3188d40 --- /dev/null +++ b/addons/godot-xr-tools/staging/loading_screen.gd.uid @@ -0,0 +1 @@ +uid://bhi5ee6eerov0 diff --git a/addons/godot-xr-tools/staging/loading_screen.tscn b/addons/godot-xr-tools/staging/loading_screen.tscn index 305c89f..600f77f 100644 --- a/addons/godot-xr-tools/staging/loading_screen.tscn +++ b/addons/godot-xr-tools/staging/loading_screen.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=13 format=3 uid="uid://bqumugyvkct4r"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/staging/loading_screen.gd" id="2"] +[ext_resource type="Script" uid="uid://bhi5ee6eerov0" path="res://addons/godot-xr-tools/staging/loading_screen.gd" id="2"] [ext_resource type="Shader" uid="uid://4i0pwdtfmtsv" path="res://addons/godot-xr-tools/staging/loading_screen/loading_screen_shader.tres" id="3"] [ext_resource type="Texture2D" uid="uid://clbtsf0ahb3fm" path="res://addons/godot-xr-tools/assets/misc/progress_bar.png" id="4"] [ext_resource type="Texture2D" uid="uid://ocyj01x5mtt7" path="res://addons/godot-xr-tools/assets/misc/Hold trigger to continue.png" id="5"] [ext_resource type="PackedScene" uid="uid://cymteydkxagpp" path="res://addons/godot-xr-tools/misc/hold_button.tscn" id="6"] [sub_resource type="Curve" id="21"] -max_value = 3.14 +_limits = [0.0, 3.14, 0.0, 1.0] _data = [Vector2(0.00207039, 0), 0.0, 1.00884, 0, 0, Vector2(1, 3.14), 0.313348, 0.0, 0, 0] point_count = 2 @@ -22,9 +22,9 @@ shading_mode = 0 render_priority = 0 shader = ExtResource("3") shader_parameter/bar_color = Color(1, 1, 1, 1) +shader_parameter/bar_texture = ExtResource("4") shader_parameter/cutout = Vector3(4.85, 0.33, 0) shader_parameter/progress = 0.5 -shader_parameter/bar_texture = ExtResource("4") [sub_resource type="PlaneMesh" id="3"] material = SubResource("18") diff --git a/addons/godot-xr-tools/staging/loading_screen/loading_screen_shader.tres b/addons/godot-xr-tools/staging/loading_screen/loading_screen_shader.tres index 2d83f5f..4c40ec3 100644 --- a/addons/godot-xr-tools/staging/loading_screen/loading_screen_shader.tres +++ b/addons/godot-xr-tools/staging/loading_screen/loading_screen_shader.tres @@ -1,4 +1,4 @@ -[gd_resource type="VisualShader" load_steps=16 format=3 uid="uid://4i0pwdtfmtsv"] +[gd_resource type="VisualShader" format=3 uid="uid://4i0pwdtfmtsv"] [sub_resource type="VisualShaderNodeCompare" id="5"] output_port_for_preview = 0 @@ -62,95 +62,6 @@ function = 2 condition = 1 [resource] -code = "shader_type spatial; -render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_lambert, specular_schlick_ggx, unshaded; - -uniform vec4 bar_color : source_color; -uniform sampler2D bar_texture : source_color; -uniform vec3 cutout = vec3(4.850000, 0.330000, 0.000000); -uniform float progress; - - - -void fragment() { -// ColorParameter:15 - vec4 n_out15p0 = bar_color; - - - vec4 n_out19p0; -// Texture2D:19 - n_out19p0 = texture(bar_texture, UV); - float n_out19p4 = n_out19p0.a; - - -// VectorOp:17 - vec3 n_out17p0 = vec3(n_out15p0.xyz) * vec3(n_out19p0.xyz); - - -// Input:3 - vec2 n_out3p0 = UV; - - -// VectorOp:4 - vec3 n_in4p1 = vec3(10.00000, 1.00000, 0.00000); - vec3 n_out4p0 = vec3(n_out3p0, 0.0) * n_in4p1; - - -// VectorOp:5 - vec3 n_in5p1 = vec3(5.00000, 0.50000, 0.00000); - vec3 n_out5p0 = n_out4p0 - n_in5p1; - - -// VectorFunc:6 - vec3 n_out6p0 = abs(n_out5p0); - - -// Vector3Parameter:20 - vec3 n_out20p0 = cutout; - - - bool n_out8p0; -// Compare:8 - { - bvec2 _bv = greaterThan(vec2(n_out6p0.xy), vec2(n_out20p0.xy)); - n_out8p0 = any(_bv); - } - - -// FloatParameter:12 - float n_out12p0 = progress; - - -// VectorCompose:13 - float n_in13p1 = 0.00000; - float n_in13p2 = 0.00000; - vec3 n_out13p0 = vec3(n_out12p0, n_in13p1, n_in13p2); - - - bool n_out11p0; -// Compare:11 - { - bvec2 _bv = lessThan(n_out3p0, vec2(n_out13p0.xy)); - n_out11p0 = any(_bv); - } - - -// FloatOp:14 - float n_out14p0 = max((n_out8p0 ? 1.0 : 0.0), (n_out11p0 ? 1.0 : 0.0)); - - -// FloatOp:18 - float n_out18p0 = n_out19p4 * n_out14p0; - - -// Output:0 - ALBEDO = n_out17p0; - ALPHA = n_out18p0; - - -} -" -graph_offset = Vector2(-744.269, 307.118) flags/unshaded = true nodes/fragment/0/position = Vector2(1220, 440) nodes/fragment/3/node = SubResource("10") diff --git a/addons/godot-xr-tools/staging/scene_base.gd b/addons/godot-xr-tools/staging/scene_base.gd index 52a6435..2d3dd39 100644 --- a/addons/godot-xr-tools/staging/scene_base.gd +++ b/addons/godot-xr-tools/staging/scene_base.gd @@ -35,7 +35,7 @@ signal request_reset_scene(user_data) signal request_quit -# This file contains methods with parameters that are unused; however they are +# This file contains methods with parameters that are unused, however they are # documented and intended to be overridden in derived classes. As such unused # parameter warnings need to be disabled. # @@ -50,8 +50,8 @@ func _ready() -> void: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsSceneBase" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsSceneBase" ## This method center the player on the [param p_transform] transform. @@ -76,6 +76,11 @@ func center_player_on(p_transform : Transform3D): # And now update our origin point $XROrigin3D.global_transform = (p_transform * transform.inverse()).orthonormalized() + # If we have a player body, we need to set its starting position too. + var player_body : XRToolsPlayerBody = XRToolsPlayerBody.find_instance($XROrigin3D) + if player_body: + player_body.global_transform = p_transform + ## This method is called when the scene is loaded, but before it becomes visible. ## diff --git a/addons/godot-xr-tools/staging/scene_base.gd.uid b/addons/godot-xr-tools/staging/scene_base.gd.uid new file mode 100644 index 0000000..3868d2e --- /dev/null +++ b/addons/godot-xr-tools/staging/scene_base.gd.uid @@ -0,0 +1 @@ +uid://177gygw2xqqu diff --git a/addons/godot-xr-tools/staging/scene_base.tscn b/addons/godot-xr-tools/staging/scene_base.tscn index 6f7bd13..473ba80 100644 --- a/addons/godot-xr-tools/staging/scene_base.tscn +++ b/addons/godot-xr-tools/staging/scene_base.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://qbmx03iibuuu"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/staging/scene_base.gd" id="1"] +[ext_resource type="Script" uid="uid://177gygw2xqqu" path="res://addons/godot-xr-tools/staging/scene_base.gd" id="1"] [node name="SceneBase" type="Node3D"] script = ExtResource("1") diff --git a/addons/godot-xr-tools/staging/staging.gd b/addons/godot-xr-tools/staging/staging.gd index 003e196..8ace712 100644 --- a/addons/godot-xr-tools/staging/staging.gd +++ b/addons/godot-xr-tools/staging/staging.gd @@ -124,8 +124,8 @@ func _get_configuration_warnings() -> PackedStringArray: # Add support for is_xr_class on XRTools classes -func is_xr_class(name : String) -> bool: - return name == "XRToolsStaging" +func is_xr_class(xr_name: String) -> bool: + return xr_name == "XRToolsStaging" ## This function loads the [param p_scene_path] scene file. @@ -201,7 +201,7 @@ func load_scene(p_scene_path : String, user_data = null) -> void: var progress := [] res = ResourceLoader.load_threaded_get_status(p_scene_path, progress) if res != ResourceLoader.THREAD_LOAD_IN_PROGRESS: - break; + break $LoadingScreen.progress = progress[0] await get_tree().create_timer(0.1).timeout diff --git a/addons/godot-xr-tools/staging/staging.gd.uid b/addons/godot-xr-tools/staging/staging.gd.uid new file mode 100644 index 0000000..2f32eec --- /dev/null +++ b/addons/godot-xr-tools/staging/staging.gd.uid @@ -0,0 +1 @@ +uid://ralokdfu8o3n diff --git a/addons/godot-xr-tools/staging/staging.tscn b/addons/godot-xr-tools/staging/staging.tscn index 6611b7d..0b2b711 100644 --- a/addons/godot-xr-tools/staging/staging.tscn +++ b/addons/godot-xr-tools/staging/staging.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=7 format=3 uid="uid://bnqnnnet4dw12"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/staging/staging.gd" id="1"] +[ext_resource type="Script" uid="uid://ralokdfu8o3n" path="res://addons/godot-xr-tools/staging/staging.gd" id="1"] [ext_resource type="PackedScene" uid="uid://bqumugyvkct4r" path="res://addons/godot-xr-tools/staging/loading_screen.tscn" id="2"] [ext_resource type="PackedScene" uid="uid://wtpox7m5vu2b" path="res://addons/godot-xr-tools/effects/fade.tscn" id="2_htugy"] [ext_resource type="Environment" uid="uid://ckiwtcdsam7ed" path="res://addons/godot-xr-tools/staging/staging_env.tres" id="3_40x3a"] diff --git a/addons/godot-xr-tools/user_settings/user_settings.gd b/addons/godot-xr-tools/user_settings/user_settings.gd index c6f513f..536ed96 100644 --- a/addons/godot-xr-tools/user_settings/user_settings.gd +++ b/addons/godot-xr-tools/user_settings/user_settings.gd @@ -122,7 +122,7 @@ func save() -> void: ## Get the action associated with a WebXR primary choice -static func get_webxr_primary_action(primary : WebXRPrimary) -> String: +func get_webxr_primary_action(primary : WebXRPrimary) -> String: match primary: WebXRPrimary.THUMBSTICK: return "thumbstick" @@ -220,4 +220,3 @@ func get_adjusted_vector2(p_controller, p_input_action): vector.x *= -1 return vector - diff --git a/addons/godot-xr-tools/user_settings/user_settings.gd.uid b/addons/godot-xr-tools/user_settings/user_settings.gd.uid new file mode 100644 index 0000000..75cdb6b --- /dev/null +++ b/addons/godot-xr-tools/user_settings/user_settings.gd.uid @@ -0,0 +1 @@ +uid://bqgb8i74tm0t diff --git a/addons/godot-xr-tools/user_settings/user_settings_ui.gd.uid b/addons/godot-xr-tools/user_settings/user_settings_ui.gd.uid new file mode 100644 index 0000000..5d74393 --- /dev/null +++ b/addons/godot-xr-tools/user_settings/user_settings_ui.gd.uid @@ -0,0 +1 @@ +uid://1kkudbch46t0 diff --git a/addons/godot-xr-tools/user_settings/user_settings_ui.tscn b/addons/godot-xr-tools/user_settings/user_settings_ui.tscn index 417e6cb..80fa243 100644 --- a/addons/godot-xr-tools/user_settings/user_settings_ui.tscn +++ b/addons/godot-xr-tools/user_settings/user_settings_ui.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://ytsxet2k47lj"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/user_settings/user_settings_ui.gd" id="1"] +[ext_resource type="Script" uid="uid://1kkudbch46t0" path="res://addons/godot-xr-tools/user_settings/user_settings_ui.gd" id="1"] [node name="UserSettingsUI" type="TabContainer"] offset_right = 214.0 diff --git a/addons/godot-xr-tools/xr/start_xr.gd.uid b/addons/godot-xr-tools/xr/start_xr.gd.uid new file mode 100644 index 0000000..c370624 --- /dev/null +++ b/addons/godot-xr-tools/xr/start_xr.gd.uid @@ -0,0 +1 @@ +uid://ces1j6plojyra diff --git a/addons/godot-xr-tools/xr/start_xr.tscn b/addons/godot-xr-tools/xr/start_xr.tscn index 4ef8287..06bcdd7 100644 --- a/addons/godot-xr-tools/xr/start_xr.tscn +++ b/addons/godot-xr-tools/xr/start_xr.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=2 format=3 uid="uid://clc5dre31iskm"] -[ext_resource type="Script" path="res://addons/godot-xr-tools/xr/start_xr.gd" id="1_ljt1b"] +[ext_resource type="Script" uid="uid://ces1j6plojyra" path="res://addons/godot-xr-tools/xr/start_xr.gd" id="1_ljt1b"] [node name="StartXR" type="Node"] script = ExtResource("1_ljt1b") diff --git a/addons/godot-xr-tools/xr_tools.gd b/addons/godot-xr-tools/xr_tools.gd index 77e9035..d3d60b4 100644 --- a/addons/godot-xr-tools/xr_tools.gd +++ b/addons/godot-xr-tools/xr_tools.gd @@ -6,6 +6,26 @@ extends Node ## registered in plugin.gd. ## Some of these settings can be overridden by the user through user settings. +## Offset modes +enum HandOffsetMode { + HAND_OFFSET_AUTO, # Determine based on using default poses + HAND_OFFSET_AIM, # Our pose is an aim pose + HAND_OFFSET_GRIP, # Our pose is a grip pose + HAND_OFFSET_PALM # Our pose is a palm pose +} + +# Map interaction profiles to grip rotations. +# TODO We need to complete this with more controllers, +static var grip_rotations: Dictionary[String, float] = { + "/interaction_profiles/oculus/touch_controller": deg_to_rad(-60.0), + "/interaction_profiles/facebook/touch_controller_pro": deg_to_rad(-60.0), + "/interaction_profiles/meta/touch_controller_plus": deg_to_rad(-60.0), + "/interaction_profiles/bytedance/pico4_controller": deg_to_rad(-40.0), + "/interaction_profiles/bytedance/pico4s_controller": deg_to_rad(-40.0), + "/interaction_profiles/bytedance/pico_ultra_controller_bd": deg_to_rad(-40.0) +} + +## Get our configured grip threshold. static func get_grip_threshold() -> float: # can return null which is not a float, so don't type this! var threshold = 0.7 @@ -19,6 +39,8 @@ static func get_grip_threshold() -> float: return threshold + +## Set our configured grip threshold. static func set_grip_threshold(p_threshold : float) -> void: if !(p_threshold >= 0.2 and p_threshold <= 0.8): print("Threshold out of bounds") @@ -26,6 +48,8 @@ static func set_grip_threshold(p_threshold : float) -> void: ProjectSettings.set_setting("godot_xr_tools/input/grip_threshold", p_threshold) + +## Get our y-axis dead zone. static func get_y_axis_dead_zone() -> float: # can return null which is not a float, so don't type this! var deadzone = 0.1 @@ -39,6 +63,8 @@ static func get_y_axis_dead_zone() -> float: return deadzone + +## Set our y-axis dead zone. static func set_y_axis_dead_zone(p_deadzone : float) -> void: if !(p_deadzone >= 0.0 and p_deadzone <= 0.5): print("Deadzone out of bounds") @@ -46,6 +72,8 @@ static func set_y_axis_dead_zone(p_deadzone : float) -> void: ProjectSettings.set_setting("godot_xr_tools/input/y_axis_dead_zone", p_deadzone) + +## Get our x-axis dead zone. static func get_x_axis_dead_zone() -> float: # can return null which is not a float, so don't type this! var deadzone = 0.2 @@ -59,6 +87,8 @@ static func get_x_axis_dead_zone() -> float: return deadzone + +## Set our x-axis dead zone. static func set_x_axis_dead_zone(p_deadzone : float) -> void: if !(p_deadzone >= 0.0 and p_deadzone <= 0.5): print("Deadzone out of bounds") @@ -67,6 +97,7 @@ static func set_x_axis_dead_zone(p_deadzone : float) -> void: ProjectSettings.set_setting("godot_xr_tools/input/x_axis_dead_zone", p_deadzone) +## Get our snap turning dead zone. static func get_snap_turning_deadzone() -> float: # can return null which is not a float, so don't type this! var deadzone = 0.25 @@ -80,6 +111,8 @@ static func get_snap_turning_deadzone() -> float: return deadzone + +## Set our snap turning dead zone. static func set_snap_turning_deadzone(p_deadzone : float) -> void: if !(p_deadzone >= 0.0 and p_deadzone <= 0.5): print("Deadzone out of bounds") @@ -88,6 +121,7 @@ static func set_snap_turning_deadzone(p_deadzone : float) -> void: ProjectSettings.set_setting("godot_xr_tools/input/snap_turning_deadzone", p_deadzone) +## Get our default value for enabling snap turning. static func get_default_snap_turning() -> bool: var default = true @@ -97,10 +131,13 @@ static func get_default_snap_turning() -> bool: # default may not be bool, so JIC return default == true + +## Set our default value for enabling snap turning. static func set_default_snap_turning(p_default : bool) -> void: ProjectSettings.set_setting("godot_xr_tools/input/default_snap_turning", p_default) +## Get our player standard height. static func get_player_standard_height() -> float: var standard_height = 1.85 @@ -113,6 +150,8 @@ static func get_player_standard_height() -> float: return standard_height + +## Set our player standard height. static func set_player_standard_height(p_height : float) -> void: if !(p_height >= 1.0 and p_height <= 2.5): print("Standard height out of bounds") @@ -120,6 +159,7 @@ static func set_player_standard_height(p_height : float) -> void: ProjectSettings.set_setting("godot_xr_tools/player/standard_height", p_height) + ## Find all children of the specified node matching the given criteria ## ## This function returns an array containing all children of the specified @@ -148,6 +188,7 @@ static func find_xr_children( _find_xr_children(found, node, pattern, type, recursive, owned) return found + ## Find a child of the specified node matching the given criteria ## ## This function finds the first child of the specified node matching the given @@ -176,6 +217,7 @@ static func find_xr_child( # Invalid node return null + ## Find an ancestor of the specified node matching the given criteria ## ## This function finds the first ancestor of the specified node matching the @@ -203,6 +245,7 @@ static func find_xr_ancestor( # Return found node (or null) return node + # Recursive helper function for find_children. static func _find_xr_children( found : Array, @@ -226,6 +269,7 @@ static func _find_xr_children( if recursive: _find_xr_children(found, child, pattern, type, recursive, owned) + # Recursive helper functiomn for find_child static func _find_xr_child( node : Node, @@ -253,6 +297,7 @@ static func _find_xr_child( # Not found return null + # Test if a given node is of the specified class static func is_xr_class(node : Node, type : String) -> bool: if node.has_method("is_xr_class"): @@ -260,3 +305,129 @@ static func is_xr_class(node : Node, type : String) -> bool: return true return node.is_class(type) + + +## Gets our grip rotation for various controller profiles. +## Note that this is a guestimate and that in theory rotations +## can vary between runtimes. +static func get_grip_rotation(profile : String) -> float: + # TODO add in a way for users to override this through a setting. + if grip_rotations.has(profile): + return grip_rotations[profile] + + # We return 45 degrees as a default + return deg_to_rad(-45.0) + + +## Helper function to get a transform that offset the controller pose +## so we center on the palm +static func get_palm_offset(mode : HandOffsetMode, xr_controller : XRController3D) -> Transform3D: + var transform: Transform3D = Transform3D() + var is_left_hand: bool = true + var profile : String = "" + + if xr_controller: + if xr_controller.tracker != "left_hand": + is_left_hand = false + + var xr_tracker : XRControllerTracker = XRServer.get_tracker(xr_controller.tracker) + if xr_tracker: + profile = xr_tracker.profile + + if mode != XRTools.HandOffsetMode.HAND_OFFSET_AUTO: + pass + elif xr_controller.pose == "aim": + mode = XRTools.HandOffsetMode.HAND_OFFSET_AIM + elif xr_controller.pose == "grip": + mode = XRTools.HandOffsetMode.HAND_OFFSET_GRIP + else: + # Assume we're using a palm pose + mode = XRTools.HandOffsetMode.HAND_OFFSET_PALM + + match mode: + XRTools.HandOffsetMode.HAND_OFFSET_AUTO: + # No controller? keep identity transform + pass + XRTools.HandOffsetMode.HAND_OFFSET_AIM: + # These are our original aim offsets. + # They are fairly unreliable now for many headsets. + if is_left_hand: + transform.origin = Vector3(-0.02, -0.05, 0.10) + else: + transform.origin = Vector3(0.02, -0.05, 0.10) + XRTools.HandOffsetMode.HAND_OFFSET_GRIP: + # Grip, is rotated 45 degrees to be aligned with controller grip + # So we reverse the rotation + transform.basis = Basis(Vector3(1.0, 0.0, 0.0), get_grip_rotation(profile)) + + # Todo, we should offset.origin.x depending on the hand, + # as our grip pose is centered on the controller. + # But we need some sort of average, or possibly start maintaining + # a matrix of adjustments per interaction profile, which would suck. + XRTools.HandOffsetMode.HAND_OFFSET_PALM: + # Palm, identity transform does fine. + # Our palm pose should be in the correct location. + pass + _: + # Unsupported + pass + + return transform + + +## Helper function to get a transform that offset the controller pose +## so we're at the aim position. +## Note that if the aim pose is used, we use that location as is, +## else we try and reproduce the original aim pose location, +## which may be different. +static func get_aim_offset(mode : HandOffsetMode, xr_controller : XRController3D) -> Transform3D: + var transform: Transform3D = Transform3D() + var is_left_hand: bool = true + var profile : String = "" + + if xr_controller: + if xr_controller.tracker != "left_hand": + is_left_hand = false + + var xr_tracker : XRControllerTracker = XRServer.get_tracker(xr_controller.tracker) + if xr_tracker: + profile = xr_tracker.profile + + if mode != XRTools.HandOffsetMode.HAND_OFFSET_AUTO: + pass + elif xr_controller.pose == "aim": + mode = XRTools.HandOffsetMode.HAND_OFFSET_AIM + elif xr_controller.pose == "grip": + mode = XRTools.HandOffsetMode.HAND_OFFSET_GRIP + else: + # Assume we're using a palm pose + mode = XRTools.HandOffsetMode.HAND_OFFSET_PALM + + match mode: + XRTools.HandOffsetMode.HAND_OFFSET_AUTO: + # No controller? keep identity transform + pass + XRTools.HandOffsetMode.HAND_OFFSET_AIM: + # Aim, identity transform is what we want. + pass + XRTools.HandOffsetMode.HAND_OFFSET_GRIP: + # Grip, is rotated 45 degrees to be aligned with controller grip + # So we reverse the rotation + transform.basis = Basis(Vector3(1.0, 0.0, 0.0), get_grip_rotation(profile)) + + # and offset + if is_left_hand: + transform.origin = transform.basis * Vector3(0.02, 0.05, -0.10) + else: + transform.origin = transform.basis * Vector3(-0.02, 0.05, -0.10) + XRTools.HandOffsetMode.HAND_OFFSET_PALM: + # Just offset + if is_left_hand: + transform.origin = Vector3(0.02, 0.05, -0.10) + else: + transform.origin = Vector3(-0.02, 0.05, -0.10) + _: + # Unsupported + pass + + return transform diff --git a/addons/godot-xr-tools/xr_tools.gd.uid b/addons/godot-xr-tools/xr_tools.gd.uid new file mode 100644 index 0000000..801ed6d --- /dev/null +++ b/addons/godot-xr-tools/xr_tools.gd.uid @@ -0,0 +1 @@ +uid://nv7s0gnf7ge diff --git a/components/helpers/scatter.gd.uid b/components/helpers/scatter.gd.uid new file mode 100644 index 0000000..136cde1 --- /dev/null +++ b/components/helpers/scatter.gd.uid @@ -0,0 +1 @@ +uid://d0bvs2b3oa3q7 diff --git a/components/helpers/zone_save_point.gd.uid b/components/helpers/zone_save_point.gd.uid new file mode 100644 index 0000000..0a1439b --- /dev/null +++ b/components/helpers/zone_save_point.gd.uid @@ -0,0 +1 @@ +uid://c8h5wy1eswmct diff --git a/components/helpers/zone_switch_area.gd.uid b/components/helpers/zone_switch_area.gd.uid new file mode 100644 index 0000000..c449d3a --- /dev/null +++ b/components/helpers/zone_switch_area.gd.uid @@ -0,0 +1 @@ +uid://hu3rmdacga86 diff --git a/components/persistent/persistent.gd.uid b/components/persistent/persistent.gd.uid new file mode 100644 index 0000000..39a42b9 --- /dev/null +++ b/components/persistent/persistent.gd.uid @@ -0,0 +1 @@ +uid://boc44j8c5f432 diff --git a/components/persistent/persistent_item.gd.uid b/components/persistent/persistent_item.gd.uid new file mode 100644 index 0000000..06bd360 --- /dev/null +++ b/components/persistent/persistent_item.gd.uid @@ -0,0 +1 @@ +uid://gqc826bmrb02 diff --git a/components/persistent/persistent_item_database.gd.uid b/components/persistent/persistent_item_database.gd.uid new file mode 100644 index 0000000..02e0284 --- /dev/null +++ b/components/persistent/persistent_item_database.gd.uid @@ -0,0 +1 @@ +uid://b64fjx2noqw5 diff --git a/components/persistent/persistent_item_type.gd.uid b/components/persistent/persistent_item_type.gd.uid new file mode 100644 index 0000000..a7fd38c --- /dev/null +++ b/components/persistent/persistent_item_type.gd.uid @@ -0,0 +1 @@ +uid://bj5247p7wi466 diff --git a/components/persistent/persistent_pocket.gd.uid b/components/persistent/persistent_pocket.gd.uid new file mode 100644 index 0000000..d766c9c --- /dev/null +++ b/components/persistent/persistent_pocket.gd.uid @@ -0,0 +1 @@ +uid://ki5kuohu54fl diff --git a/components/persistent/persistent_staging.gd.uid b/components/persistent/persistent_staging.gd.uid new file mode 100644 index 0000000..59c339d --- /dev/null +++ b/components/persistent/persistent_staging.gd.uid @@ -0,0 +1 @@ +uid://xxbtcfs4w1g7 diff --git a/components/persistent/persistent_world.gd.uid b/components/persistent/persistent_world.gd.uid new file mode 100644 index 0000000..cb9379e --- /dev/null +++ b/components/persistent/persistent_world.gd.uid @@ -0,0 +1 @@ +uid://d3280utokvinl diff --git a/components/persistent/persistent_zone.gd.uid b/components/persistent/persistent_zone.gd.uid new file mode 100644 index 0000000..3d1ed10 --- /dev/null +++ b/components/persistent/persistent_zone.gd.uid @@ -0,0 +1 @@ +uid://dqgmlfnkvyy3m diff --git a/components/persistent/persistent_zone_database.gd.uid b/components/persistent/persistent_zone_database.gd.uid new file mode 100644 index 0000000..789b8e9 --- /dev/null +++ b/components/persistent/persistent_zone_database.gd.uid @@ -0,0 +1 @@ +uid://cvyqd2gbu25k5 diff --git a/components/persistent/persistent_zone_info.gd.uid b/components/persistent/persistent_zone_info.gd.uid new file mode 100644 index 0000000..91b58c0 --- /dev/null +++ b/components/persistent/persistent_zone_info.gd.uid @@ -0,0 +1 @@ +uid://diipcou46cwqh diff --git a/default_env.tres b/default_env.tres index 2205009..98846a5 100644 --- a/default_env.tres +++ b/default_env.tres @@ -1,4 +1,4 @@ -[gd_resource type="Environment" load_steps=3 format=3 uid="uid://er867l7dl10j"] +[gd_resource type="Environment" format=3 uid="uid://er867l7dl10j"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_qmfyt"] diff --git a/game/game_state.gd.uid b/game/game_state.gd.uid new file mode 100644 index 0000000..88de172 --- /dev/null +++ b/game/game_state.gd.uid @@ -0,0 +1 @@ +uid://dxx1f21gyreio diff --git a/game/main.gd.uid b/game/main.gd.uid new file mode 100644 index 0000000..6c0425e --- /dev/null +++ b/game/main.gd.uid @@ -0,0 +1 @@ +uid://shhk6ax4pxi5 diff --git a/game/start_scene/start_ui.gd.uid b/game/start_scene/start_ui.gd.uid new file mode 100644 index 0000000..2eb532c --- /dev/null +++ b/game/start_scene/start_ui.gd.uid @@ -0,0 +1 @@ +uid://due0hc3nvo6ag diff --git a/game/zones/zone_base.tscn b/game/zones/zone_base.tscn index a05fa35..e7ad722 100644 --- a/game/zones/zone_base.tscn +++ b/game/zones/zone_base.tscn @@ -1,7 +1,7 @@ -[gd_scene load_steps=33 format=3 uid="uid://cvn48xcmsmkrb"] +[gd_scene format=3 uid="uid://cvn48xcmsmkrb"] [ext_resource type="PackedScene" uid="uid://di1bu0tceg332" path="res://components/persistent/persistent_zone.tscn" id="1_radar"] -[ext_resource type="PackedScene" uid="uid://bkv43ec6chcf3" path="res://addons/godot-xr-tools/hands/scenes/collision/collision_hand_left.tscn" id="4_38kmp"] +[ext_resource type="Script" uid="uid://c8vnltn217quj" path="res://addons/godot-xr-tools/hands/collision_hand.gd" id="3_d4qbf"] [ext_resource type="PackedScene" uid="uid://b4kad2kuba1yn" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/left_hand_low.tscn" id="5_2k6vw"] [ext_resource type="PackedScene" uid="uid://bjcxf427un2wp" path="res://addons/godot-xr-tools/player/poke/poke.tscn" id="6_3jgly"] [ext_resource type="PackedScene" uid="uid://cqhw276realc" path="res://addons/godot-xr-tools/functions/function_pointer.tscn" id="7_573pv"] @@ -10,7 +10,6 @@ [ext_resource type="PackedScene" uid="uid://c2q5phg8w08o" path="res://addons/godot-xr-tools/functions/movement_jump.tscn" id="10_6ajyr"] [ext_resource type="PackedScene" uid="uid://clt88d5d1dje4" path="res://addons/godot-xr-tools/functions/movement_crouch.tscn" id="11_5npet"] [ext_resource type="PackedScene" uid="uid://clujaf3u776a3" path="res://addons/godot-xr-tools/objects/viewport_2d_in_3d.tscn" id="12_jg4e1"] -[ext_resource type="PackedScene" uid="uid://c3uoohvnshach" path="res://addons/godot-xr-tools/hands/scenes/collision/collision_hand_right.tscn" id="12_o3mdo"] [ext_resource type="PackedScene" uid="uid://l2n30mpbkdyw" path="res://addons/godot-xr-tools/hands/scenes/lowpoly/right_hand_low.tscn" id="13_dr7jm"] [ext_resource type="PackedScene" uid="uid://b3bubdytjn523" path="res://game/zones/zone_wrist_ui.tscn" id="13_w2gnj"] [ext_resource type="PackedScene" uid="uid://b6bk2pj8vbj28" path="res://addons/godot-xr-tools/functions/movement_turn.tscn" id="14_yb1jn"] @@ -19,67 +18,67 @@ [ext_resource type="PackedScene" uid="uid://da2qgxxwwitl6" path="res://addons/godot-xr-tools/objects/highlight/highlight_ring.tscn" id="17_1njvn"] [ext_resource type="PackedScene" uid="uid://drs4eeq721ojn" path="res://addons/godot-xr-tools/functions/movement_sprint.tscn" id="18_l4ed5"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_xdmwg"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_d4qbf"] animation = &"Grip" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_ta1f5"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_mub2s"] animation = &"Grip" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_bete2"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_c4gvi"] filter_enabled = true filters = ["Armature/Skeleton3D:Little_Distal_L", "Armature/Skeleton3D:Little_Intermediate_L", "Armature/Skeleton3D:Little_Metacarpal_L", "Armature/Skeleton3D:Little_Proximal_L", "Armature/Skeleton3D:Middle_Distal_L", "Armature/Skeleton3D:Middle_Intermediate_L", "Armature/Skeleton3D:Middle_Metacarpal_L", "Armature/Skeleton3D:Middle_Proximal_L", "Armature/Skeleton3D:Ring_Distal_L", "Armature/Skeleton3D:Ring_Intermediate_L", "Armature/Skeleton3D:Ring_Metacarpal_L", "Armature/Skeleton3D:Ring_Proximal_L", "Armature/Skeleton3D:Thumb_Distal_L", "Armature/Skeleton3D:Thumb_Metacarpal_L", "Armature/Skeleton3D:Thumb_Proximal_L", "Armature/Skeleton:Little_Distal_L", "Armature/Skeleton:Little_Intermediate_L", "Armature/Skeleton:Little_Proximal_L", "Armature/Skeleton:Middle_Distal_L", "Armature/Skeleton:Middle_Intermediate_L", "Armature/Skeleton:Middle_Proximal_L", "Armature/Skeleton:Ring_Distal_L", "Armature/Skeleton:Ring_Intermediate_L", "Armature/Skeleton:Ring_Proximal_L", "Armature/Skeleton:Thumb_Distal_L", "Armature/Skeleton:Thumb_Proximal_L"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_u47f6"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_lbyou"] animation = &"Grip 5" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_1kag1"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_tvd04"] filter_enabled = true filters = ["Armature/Skeleton3D:Index_Distal_L", "Armature/Skeleton3D:Index_Intermediate_L", "Armature/Skeleton3D:Index_Metacarpal_L", "Armature/Skeleton3D:Index_Proximal_L", "Armature/Skeleton:Index_Distal_L", "Armature/Skeleton:Index_Intermediate_L", "Armature/Skeleton:Index_Proximal_L"] -[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_emrvp"] +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_bp8r4"] graph_offset = Vector2(-536, 11) -nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_xdmwg") +nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_d4qbf") nodes/ClosedHand1/position = Vector2(-600, 300) -nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_ta1f5") +nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_mub2s") nodes/ClosedHand2/position = Vector2(-360, 300) -nodes/Grip/node = SubResource("AnimationNodeBlend2_bete2") +nodes/Grip/node = SubResource("AnimationNodeBlend2_c4gvi") nodes/Grip/position = Vector2(0, 20) -nodes/OpenHand/node = SubResource("AnimationNodeAnimation_u47f6") +nodes/OpenHand/node = SubResource("AnimationNodeAnimation_lbyou") nodes/OpenHand/position = Vector2(-600, 100) -nodes/Trigger/node = SubResource("AnimationNodeBlend2_1kag1") +nodes/Trigger/node = SubResource("AnimationNodeBlend2_tvd04") nodes/Trigger/position = Vector2(-360, 20) -node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] +node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_n3638"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_bvawa"] animation = &"Grip" -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_1n6bu"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_jajng"] animation = &"Grip" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_svpyk"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_em6w2"] filter_enabled = true filters = ["Armature/Skeleton3D:Little_Distal_R", "Armature/Skeleton3D:Little_Intermediate_R", "Armature/Skeleton3D:Little_Metacarpal_R", "Armature/Skeleton3D:Little_Proximal_R", "Armature/Skeleton3D:Middle_Distal_R", "Armature/Skeleton3D:Middle_Intermediate_R", "Armature/Skeleton3D:Middle_Metacarpal_R", "Armature/Skeleton3D:Middle_Proximal_R", "Armature/Skeleton3D:Ring_Distal_R", "Armature/Skeleton3D:Ring_Intermediate_R", "Armature/Skeleton3D:Ring_Metacarpal_R", "Armature/Skeleton3D:Ring_Proximal_R", "Armature/Skeleton3D:Thumb_Distal_R", "Armature/Skeleton3D:Thumb_Metacarpal_R", "Armature/Skeleton3D:Thumb_Proximal_R", "Armature/Skeleton:Little_Distal_R", "Armature/Skeleton:Little_Intermediate_R", "Armature/Skeleton:Little_Proximal_R", "Armature/Skeleton:Middle_Distal_R", "Armature/Skeleton:Middle_Intermediate_R", "Armature/Skeleton:Middle_Proximal_R", "Armature/Skeleton:Ring_Distal_R", "Armature/Skeleton:Ring_Intermediate_R", "Armature/Skeleton:Ring_Proximal_R", "Armature/Skeleton:Thumb_Distal_R", "Armature/Skeleton:Thumb_Proximal_R"] -[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_g0jtn"] +[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_s115j"] animation = &"Grip 5" -[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_g8ki7"] +[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_6k8ts"] filter_enabled = true filters = ["Armature/Skeleton3D:Index_Distal_R", "Armature/Skeleton3D:Index_Intermediate_R", "Armature/Skeleton3D:Index_Metacarpal_R", "Armature/Skeleton3D:Index_Proximal_R", "Armature/Skeleton:Index_Distal_R", "Armature/Skeleton:Index_Intermediate_R", "Armature/Skeleton:Index_Proximal_R"] -[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_26byb"] +[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_i6y08"] graph_offset = Vector2(-552.664, 107.301) -nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_n3638") +nodes/ClosedHand1/node = SubResource("AnimationNodeAnimation_bvawa") nodes/ClosedHand1/position = Vector2(-600, 300) -nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_1n6bu") +nodes/ClosedHand2/node = SubResource("AnimationNodeAnimation_jajng") nodes/ClosedHand2/position = Vector2(-360, 300) -nodes/Grip/node = SubResource("AnimationNodeBlend2_svpyk") +nodes/Grip/node = SubResource("AnimationNodeBlend2_em6w2") nodes/Grip/position = Vector2(0, 40) -nodes/OpenHand/node = SubResource("AnimationNodeAnimation_g0jtn") +nodes/OpenHand/node = SubResource("AnimationNodeAnimation_s115j") nodes/OpenHand/position = Vector2(-600, 100) -nodes/Trigger/node = SubResource("AnimationNodeBlend2_g8ki7") +nodes/Trigger/node = SubResource("AnimationNodeBlend2_6k8ts") nodes/Trigger/position = Vector2(-360, 40) -node_connections = [&"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1", &"output", 0, &"Grip"] +node_connections = [&"output", 0, &"Grip", &"Grip", 0, &"Trigger", &"Grip", 1, &"ClosedHand2", &"Trigger", 0, &"OpenHand", &"Trigger", 1, &"ClosedHand1"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_g8k03"] transparency = 1 @@ -92,72 +91,87 @@ flip_faces = true radius = 0.1 height = 0.2 -[node name="ZoneBase" instance=ExtResource("1_radar")] +[node name="ZoneBase" unique_id=1616403681 instance=ExtResource("1_radar")] [node name="XRCamera3D" parent="XROrigin3D" index="0"] near = 0.03 -[node name="BackPocket" parent="XROrigin3D/XRCamera3D" index="0" instance=ExtResource("16_4oqtv")] +[node name="BackPocket" parent="XROrigin3D/XRCamera3D" index="0" unique_id=460620834 instance=ExtResource("16_4oqtv")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0.2) pocket_id = "backpack_pocket" grab_distance = 0.2 snap_require = "backpack" -[node name="CollisionHandLeft" parent="XROrigin3D/LeftHand" index="0" instance=ExtResource("4_38kmp")] +[node name="LeftHand" parent="XROrigin3D" index="1"] +transform = Transform3D(1, 0, 0, 0, 0.70710677, -0.70710677, 0, 0.70710677, 0.70710677, -0.5, 1, -0.5) +pose = &"grip" +show_when_tracked = true -[node name="LeftHand" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="1" instance=ExtResource("5_2k6vw")] +[node name="CollisionHandLeft" type="AnimatableBody3D" parent="XROrigin3D/LeftHand" index="0" unique_id=77907517 node_paths=PackedStringArray("hand_skeleton")] +sync_to_physics = false +script = ExtResource("3_d4qbf") +hand_skeleton = NodePath("LeftHand/Hand_Nails_low_L/Armature/Skeleton3D") +metadata/_custom_type_script = "uid://c8vnltn217quj" + +[node name="LeftHand" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="0" unique_id=1262692693 instance=ExtResource("5_2k6vw")] + +[node name="Hand_Nails_low_L" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand" index="0"] +transform = Transform3D(1, 0, 0, 0, 0.70710677, 0.70710677, 0, -0.70710677, 0.70710677, -0.01, 0.03535534, 0.03535534) [node name="Skeleton3D" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand/Hand_Nails_low_L/Armature" index="0"] -bones/1/rotation = Quaternion(0.323537, -2.56577e-05, -0.0272204, 0.945824) -bones/2/rotation = Quaternion(-0.0904441, -0.0415175, -0.166293, 0.981042) -bones/3/rotation = Quaternion(-0.0466199, 0.020971, 0.0103276, 0.998639) -bones/5/rotation = Quaternion(-0.00128455, -0.0116081, -0.0168259, 0.99979) -bones/6/rotation = Quaternion(0.102925, -0.00993208, -0.00794417, 0.994608) -bones/7/rotation = Quaternion(-0.012859, -0.0236108, -0.323258, 0.945929) -bones/8/rotation = Quaternion(0.0120575, -0.00929194, -0.247472, 0.968775) -bones/10/rotation = Quaternion(-0.0357539, -0.000400032, 0.00636764, 0.99934) -bones/11/rotation = Quaternion(-0.00264964, -0.00114471, -0.125992, 0.992027) -bones/12/rotation = Quaternion(0.0394225, 0.00193393, -0.228074, 0.972843) -bones/13/rotation = Quaternion(-0.0123395, -0.00881294, -0.280669, 0.959685) -bones/15/rotation = Quaternion(-0.0702656, 0.0101908, -0.0243307, 0.99718) -bones/16/rotation = Quaternion(-0.0320634, -0.00223624, -0.0686366, 0.997124) -bones/17/rotation = Quaternion(0.0253452, 0.00812462, -0.249005, 0.968136) -bones/18/rotation = Quaternion(0.00252232, 0.00788073, -0.243204, 0.96994) -bones/20/rotation = Quaternion(-0.0917369, 0.0203027, -0.010183, 0.995524) -bones/21/rotation = Quaternion(-0.0625182, -0.00022572, -0.115393, 0.991351) -bones/22/rotation = Quaternion(0.0585786, 0.0216483, -0.269905, 0.96086) -bones/23/rotation = Quaternion(0.00687177, -0.00357275, -0.211953, 0.977249) - -[node name="BoneAttachment3D" type="BoneAttachment3D" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand/Hand_Nails_low_L/Armature/Skeleton3D" index="1"] -transform = Transform3D(0.54083, 0.840813, -0.0231736, -0.0826267, 0.0805243, 0.993322, 0.837064, -0.535303, 0.113023, 0.039902, 0.0402828, -0.150096) +bones/1/rotation = Quaternion(0.32353702, -2.5658792e-05, -0.027220426, 0.94582397) +bones/2/rotation = Quaternion(-0.09044407, -0.04151748, -0.16629349, 0.98104167) +bones/3/rotation = Quaternion(-0.04661985, 0.02097099, 0.010327632, 0.9986392) +bones/5/rotation = Quaternion(-0.0012845465, -0.011608094, -0.016825877, 0.99979025) +bones/6/rotation = Quaternion(0.10292492, -0.009932081, -0.007944165, 0.9946078) +bones/7/rotation = Quaternion(-0.012858999, -0.023610815, -0.32325828, 0.9459289) +bones/8/rotation = Quaternion(0.012057539, -0.009291937, -0.24747224, 0.96877545) +bones/10/rotation = Quaternion(-0.035753887, -0.0004000325, 0.006367641, 0.9993403) +bones/11/rotation = Quaternion(-0.0026496367, -0.0011447113, -0.12599176, 0.9920271) +bones/12/rotation = Quaternion(0.039422527, 0.0019339261, -0.22807404, 0.97284347) +bones/13/rotation = Quaternion(-0.012339469, -0.008812943, -0.28066906, 0.9596848) +bones/15/rotation = Quaternion(-0.070265576, 0.010190834, -0.024330739, 0.9971795) +bones/16/rotation = Quaternion(-0.032063447, -0.002236244, -0.06863657, 0.99712384) +bones/17/rotation = Quaternion(0.025345208, 0.008124622, -0.2490055, 0.9681363) +bones/18/rotation = Quaternion(0.0025223223, 0.007880731, -0.2432038, 0.9699399) +bones/20/rotation = Quaternion(-0.09173688, 0.020302717, -0.010182976, 0.9955242) +bones/21/rotation = Quaternion(-0.06251818, -0.00022572096, -0.115392834, 0.99135065) +bones/22/rotation = Quaternion(0.058578636, 0.021648303, -0.26990518, 0.9608596) +bones/23/rotation = Quaternion(0.006871769, -0.0035727469, -0.21195254, 0.97724926) + +[node name="BoneAttachment3D" type="BoneAttachment3D" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand/Hand_Nails_low_L/Armature/Skeleton3D" index="1" unique_id=987241671] +transform = Transform3D(0.5408296, 0.8408128, -0.023173608, -0.08262672, 0.08052427, 0.99332196, 0.83706397, -0.5353032, 0.11302349, 0.039901964, 0.040282845, -0.15009598) bone_name = "Index_Tip_L" bone_idx = 9 -[node name="Poke" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand/Hand_Nails_low_L/Armature/Skeleton3D/BoneAttachment3D" index="0" instance=ExtResource("6_3jgly")] +[node name="Poke" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand/Hand_Nails_low_L/Armature/Skeleton3D/BoneAttachment3D" index="0" unique_id=1808082787 instance=ExtResource("6_3jgly")] transform = Transform3D(0.54083, -0.0826267, 0.837064, 0.840813, 0.0805243, -0.535303, -0.0231736, 0.993322, 0.113024, 0, 0, 0) [node name="AnimationTree" parent="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand" index="1"] -tree_root = SubResource("AnimationNodeBlendTree_emrvp") +root_node = NodePath("../Hand_Nails_low_L") +tree_root = SubResource("AnimationNodeBlendTree_bp8r4") -[node name="FunctionPointer" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="2" instance=ExtResource("7_573pv")] +[node name="FunctionPointer" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="1" unique_id=2055156181 instance=ExtResource("7_573pv")] +transform = Transform3D(1, 0, 0, 0, 0.70710677, 0.70710677, 0, -0.70710677, 0.70710677, 0.02, -0.03535534, -0.10606602) show_laser = 2 laser_length = 1 -[node name="FunctionPickup" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="3" instance=ExtResource("8_7p3lb")] +[node name="FunctionPickup" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="2" unique_id=472699193 instance=ExtResource("8_7p3lb")] +transform = Transform3D(1, 0, 0, 0, 0.70710677, 0.70710677, 0, -0.70710677, 0.70710677, 0, 0, 0) grab_distance = 0.15 ranged_angle = 15.0 -[node name="MovementDirect" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="4" instance=ExtResource("9_cv4ub")] +[node name="MovementDirect" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="3" unique_id=448946267 instance=ExtResource("9_cv4ub")] strafe = true -[node name="MovementJump" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="5" instance=ExtResource("10_6ajyr")] +[node name="MovementJump" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="4" unique_id=1501802774 instance=ExtResource("10_6ajyr")] jump_button_action = "ax_button" -[node name="MovementCrouch" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="6" instance=ExtResource("11_5npet")] +[node name="MovementCrouch" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="5" unique_id=478573451 instance=ExtResource("11_5npet")] crouch_button_action = "by_button" -[node name="WristUI" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="7" instance=ExtResource("12_jg4e1")] -transform = Transform3D(1.30801e-07, -1, 7.6194e-09, -0.0871558, -3.8097e-09, 0.996195, -0.996195, -1.30968e-07, -0.0871558, -0.03, 0, 0.3) +[node name="WristUI" parent="XROrigin3D/LeftHand/CollisionHandLeft" index="6" unique_id=1543098121 instance=ExtResource("12_jg4e1")] +transform = Transform3D(1.30801e-07, -1, 7.6194e-09, -0.0871558, -3.8097e-09, 0.996195, -0.996195, -1.30968e-07, -0.0871558, -0.029999971, 0, 0.3) screen_size = Vector2(0.16, 0.08) collision_layer = 4194304 scene = ExtResource("13_w2gnj") @@ -166,85 +180,100 @@ update_mode = 2 throttle_fps = 15.0 transparent = 0 unshaded = true +scene_properties_keys = PackedStringArray("zone_wrist_ui.gd") + +[node name="RightHand" parent="XROrigin3D" index="2"] +transform = Transform3D(1, 0, 0, 0, 0.70710677, -0.70710677, 0, 0.70710677, 0.70710677, 0.5, 1, -0.5) +pose = &"grip" +show_when_tracked = true + +[node name="CollisionHandRight" type="AnimatableBody3D" parent="XROrigin3D/RightHand" index="0" unique_id=414524659 node_paths=PackedStringArray("hand_skeleton")] +sync_to_physics = false +script = ExtResource("3_d4qbf") +hand_skeleton = NodePath("RightHand/Hand_Nails_low_R/Armature/Skeleton3D") +metadata/_custom_type_script = "uid://c8vnltn217quj" -[node name="CollisionHandRight" parent="XROrigin3D/RightHand" index="0" instance=ExtResource("12_o3mdo")] +[node name="RightHand" parent="XROrigin3D/RightHand/CollisionHandRight" index="0" unique_id=1823018386 instance=ExtResource("13_dr7jm")] -[node name="RightHand" parent="XROrigin3D/RightHand/CollisionHandRight" index="1" instance=ExtResource("13_dr7jm")] +[node name="Hand_Nails_low_R" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand" index="0"] +transform = Transform3D(1, 0, 0, 0, 0.70710677, 0.70710677, 0, -0.70710677, 0.70710677, 0.01, 0.03535534, 0.03535534) [node name="Skeleton3D" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand/Hand_Nails_low_R/Armature" index="0"] -bones/1/rotation = Quaternion(0.323537, 2.56577e-05, 0.0272204, 0.945824) -bones/2/rotation = Quaternion(-0.0904441, 0.0415175, 0.166293, 0.981042) -bones/3/rotation = Quaternion(-0.0466199, -0.020971, -0.0103276, 0.998639) -bones/5/rotation = Quaternion(-0.00128455, 0.0116081, 0.0168259, 0.99979) -bones/6/rotation = Quaternion(0.102925, 0.00993208, 0.00794419, 0.994608) -bones/7/rotation = Quaternion(-0.012859, 0.0236108, 0.323258, 0.945929) -bones/8/rotation = Quaternion(0.0120575, 0.00929193, 0.247472, 0.968775) -bones/10/rotation = Quaternion(-0.0357539, 0.000400032, -0.00636763, 0.99934) -bones/11/rotation = Quaternion(-0.00264964, 0.00114471, 0.125992, 0.992027) -bones/12/rotation = Quaternion(0.0394225, -0.00193393, 0.228074, 0.972843) -bones/13/rotation = Quaternion(-0.0123395, 0.00881294, 0.280669, 0.959685) -bones/15/rotation = Quaternion(-0.0702656, -0.0101908, 0.0243307, 0.99718) -bones/16/rotation = Quaternion(-0.0320634, 0.00223624, 0.0686366, 0.997124) -bones/17/rotation = Quaternion(0.0253452, -0.00812462, 0.249005, 0.968136) -bones/18/rotation = Quaternion(0.00252233, -0.00788073, 0.243204, 0.96994) -bones/20/rotation = Quaternion(-0.0917369, -0.0203027, 0.010183, 0.995524) -bones/21/rotation = Quaternion(-0.0625182, 0.000225721, 0.115393, 0.991351) -bones/22/rotation = Quaternion(0.0585786, -0.0216483, 0.269905, 0.96086) -bones/23/rotation = Quaternion(0.00687177, 0.00357275, 0.211953, 0.977249) - -[node name="BoneAttachment3D" type="BoneAttachment3D" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand/Hand_Nails_low_R/Armature/Skeleton3D" index="1"] -transform = Transform3D(0.540829, -0.840813, 0.0231736, 0.0826268, 0.0805242, 0.993322, -0.837064, -0.535303, 0.113024, -0.039902, 0.0402828, -0.150096) +bones/1/rotation = Quaternion(0.32353702, 2.5658792e-05, 0.027220426, 0.94582397) +bones/2/rotation = Quaternion(-0.09044407, 0.04151748, 0.16629349, 0.98104167) +bones/3/rotation = Quaternion(-0.04661985, -0.020970985, -0.010327631, 0.9986392) +bones/5/rotation = Quaternion(-0.0012845465, 0.011608096, 0.01682588, 0.99979025) +bones/6/rotation = Quaternion(0.10292492, 0.009932082, 0.007944187, 0.9946078) +bones/7/rotation = Quaternion(-0.012859005, 0.023610817, 0.32325834, 0.94592875) +bones/8/rotation = Quaternion(0.012057537, 0.0092919255, 0.24747224, 0.96877545) +bones/10/rotation = Quaternion(-0.035753887, 0.0004000325, -0.0063676336, 0.9993403) +bones/11/rotation = Quaternion(-0.0026496367, 0.0011447114, 0.1259918, 0.9920271) +bones/12/rotation = Quaternion(0.03942253, -0.0019339275, 0.2280741, 0.97284347) +bones/13/rotation = Quaternion(-0.012339468, 0.008812944, 0.28066906, 0.9596848) +bones/15/rotation = Quaternion(-0.07026557, -0.010190837, 0.024330745, 0.99717957) +bones/16/rotation = Quaternion(-0.032063447, 0.002236245, 0.06863657, 0.99712384) +bones/17/rotation = Quaternion(0.025345208, -0.00812462, 0.24900547, 0.9681363) +bones/18/rotation = Quaternion(0.0025223284, -0.007880732, 0.24320383, 0.9699399) +bones/20/rotation = Quaternion(-0.09173688, -0.020302719, 0.010182976, 0.9955242) +bones/21/rotation = Quaternion(-0.06251817, 0.00022572189, 0.115392834, 0.99135065) +bones/22/rotation = Quaternion(0.058578644, -0.021648303, 0.26990518, 0.9608596) +bones/23/rotation = Quaternion(0.0068717655, 0.0035727455, 0.21195254, 0.97724926) + +[node name="BoneAttachment3D" type="BoneAttachment3D" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand/Hand_Nails_low_R/Armature/Skeleton3D" index="1" unique_id=696095898] +transform = Transform3D(0.5408295, -0.8408129, 0.023173586, 0.08262676, 0.08052423, 0.99332196, -0.83706397, -0.53530306, 0.113023505, -0.03990197, 0.040282845, -0.15009597) bone_name = "Index_Tip_R" bone_idx = 9 -[node name="Poke" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand/Hand_Nails_low_R/Armature/Skeleton3D/BoneAttachment3D" index="0" instance=ExtResource("6_3jgly")] +[node name="Poke" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand/Hand_Nails_low_R/Armature/Skeleton3D/BoneAttachment3D" index="0" unique_id=2110704474 instance=ExtResource("6_3jgly")] [node name="AnimationTree" parent="XROrigin3D/RightHand/CollisionHandRight/RightHand" index="1"] -tree_root = SubResource("AnimationNodeBlendTree_26byb") +tree_root = SubResource("AnimationNodeBlendTree_i6y08") -[node name="FunctionPointer" parent="XROrigin3D/RightHand/CollisionHandRight" index="2" instance=ExtResource("7_573pv")] +[node name="FunctionPointer" parent="XROrigin3D/RightHand/CollisionHandRight" index="1" unique_id=132222768 instance=ExtResource("7_573pv")] +transform = Transform3D(1, 0, 0, 0, 0.70710677, 0.70710677, 0, -0.70710677, 0.70710677, -0.02, -0.03535534, -0.10606602) show_laser = 2 laser_length = 1 -[node name="FunctionPickup" parent="XROrigin3D/RightHand/CollisionHandRight" index="3" instance=ExtResource("8_7p3lb")] +[node name="FunctionPickup" parent="XROrigin3D/RightHand/CollisionHandRight" index="2" unique_id=705308326 instance=ExtResource("8_7p3lb")] +transform = Transform3D(1, 0, 0, 0, 0.70710677, 0.70710677, 0, -0.70710677, 0.70710677, 0, 0, 0) grab_distance = 0.15 ranged_angle = 15.0 -[node name="MovementDirect" parent="XROrigin3D/RightHand/CollisionHandRight" index="4" instance=ExtResource("9_cv4ub")] +[node name="MovementDirect" parent="XROrigin3D/RightHand/CollisionHandRight" index="3" unique_id=1501538499 instance=ExtResource("9_cv4ub")] -[node name="MovementTurn" parent="XROrigin3D/RightHand/CollisionHandRight" index="5" instance=ExtResource("14_yb1jn")] +[node name="MovementTurn" parent="XROrigin3D/RightHand/CollisionHandRight" index="4" unique_id=1789677111 instance=ExtResource("14_yb1jn")] -[node name="MovementJump" parent="XROrigin3D/RightHand/CollisionHandRight" index="6" instance=ExtResource("10_6ajyr")] +[node name="MovementJump" parent="XROrigin3D/RightHand/CollisionHandRight" index="5" unique_id=667737219 instance=ExtResource("10_6ajyr")] jump_button_action = "ax_button" -[node name="MovementCrouch" parent="XROrigin3D/RightHand/CollisionHandRight" index="7" instance=ExtResource("11_5npet")] +[node name="MovementCrouch" parent="XROrigin3D/RightHand/CollisionHandRight" index="6" unique_id=1671685744 instance=ExtResource("11_5npet")] crouch_button_action = "by_button" -[node name="PlayerBody" parent="XROrigin3D" index="3" instance=ExtResource("15_x1dm3")] +[node name="PlayerBody" parent="XROrigin3D" index="3" unique_id=1003560517 instance=ExtResource("15_x1dm3")] -[node name="LeftPocket" parent="XROrigin3D/PlayerBody" index="0" instance=ExtResource("16_4oqtv")] +[node name="LeftPocket" parent="XROrigin3D/PlayerBody" index="0" unique_id=219221858 instance=ExtResource("16_4oqtv")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 1, -0.1) pocket_id = "pocket_left" grab_distance = 0.1 snap_require = "fits_in_pocket" -[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/PlayerBody/LeftPocket" index="2"] +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/PlayerBody/LeftPocket" index="2" unique_id=1015611982] mesh = SubResource("SphereMesh_1ccdy") -[node name="HighlightRing" parent="XROrigin3D/PlayerBody/LeftPocket" index="3" instance=ExtResource("17_1njvn")] +[node name="HighlightRing" parent="XROrigin3D/PlayerBody/LeftPocket" index="3" unique_id=467286438 instance=ExtResource("17_1njvn")] -[node name="RightPocket" parent="XROrigin3D/PlayerBody" index="1" instance=ExtResource("16_4oqtv")] +[node name="RightPocket" parent="XROrigin3D/PlayerBody" index="1" unique_id=814652681 instance=ExtResource("16_4oqtv")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 1, -0.1) pocket_id = "pocket_right" grab_distance = 0.1 snap_require = "fits_in_pocket" -[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/PlayerBody/RightPocket" index="2"] +[node name="MeshInstance3D" type="MeshInstance3D" parent="XROrigin3D/PlayerBody/RightPocket" index="2" unique_id=1464066872] mesh = SubResource("SphereMesh_1ccdy") -[node name="HighlightRing" parent="XROrigin3D/PlayerBody/RightPocket" index="3" instance=ExtResource("17_1njvn")] +[node name="HighlightRing" parent="XROrigin3D/PlayerBody/RightPocket" index="3" unique_id=631230919 instance=ExtResource("17_1njvn")] -[node name="MovementSprint" parent="XROrigin3D" index="4" instance=ExtResource("18_l4ed5")] +[node name="MovementSprint" parent="XROrigin3D" index="4" unique_id=781212283 instance=ExtResource("18_l4ed5")] [editable path="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand"] [editable path="XROrigin3D/LeftHand/CollisionHandLeft/LeftHand/Hand_Nails_low_L"] diff --git a/game/zones/zone_wrist_ui.gd.uid b/game/zones/zone_wrist_ui.gd.uid new file mode 100644 index 0000000..0dcd9cf --- /dev/null +++ b/game/zones/zone_wrist_ui.gd.uid @@ -0,0 +1 @@ +uid://dllbo6vkh7wox diff --git a/openxr_action_map.tres b/openxr_action_map.tres index 7f0776d..98a901c 100644 --- a/openxr_action_map.tres +++ b/openxr_action_map.tres @@ -1,4 +1,4 @@ -[gd_resource type="OpenXRActionMap" load_steps=197 format=3 uid="uid://dsy7663pl3py3"] +[gd_resource type="OpenXRActionMap" format=3 uid="uid://dsy7663pl3py3"] [sub_resource type="OpenXRAction" id="OpenXRAction_35itf"] resource_name = "trigger" @@ -115,7 +115,7 @@ toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") resource_name = "default_pose" localized_name = "Default pose" action_type = 3 -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") +toplevel_paths = PackedStringArray("/user/hand/left", "/user/hand/right") [sub_resource type="OpenXRAction" id="OpenXRAction_3236n"] resource_name = "aim_pose" @@ -146,690 +146,626 @@ resource_name = "godot" localized_name = "Godot action set" actions = [SubResource("OpenXRAction_35itf"), SubResource("OpenXRAction_1o54n"), SubResource("OpenXRAction_ggl67"), SubResource("OpenXRAction_hk7ik"), SubResource("OpenXRAction_nxb4u"), SubResource("OpenXRAction_fjhrj"), SubResource("OpenXRAction_p36fp"), SubResource("OpenXRAction_2ooiv"), SubResource("OpenXRAction_7bbsa"), SubResource("OpenXRAction_kklxr"), SubResource("OpenXRAction_anwnu"), SubResource("OpenXRAction_qjhx6"), SubResource("OpenXRAction_iqmes"), SubResource("OpenXRAction_luyq6"), SubResource("OpenXRAction_llf76"), SubResource("OpenXRAction_bg36k"), SubResource("OpenXRAction_8iodc"), SubResource("OpenXRAction_3jnkp"), SubResource("OpenXRAction_ensy0"), SubResource("OpenXRAction_x8q2g"), SubResource("OpenXRAction_3236n"), SubResource("OpenXRAction_ew6y8"), SubResource("OpenXRAction_qbo3t"), SubResource("OpenXRAction_j8j65")] -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eg120"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_51qre"] action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_a7k3g"] -action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b7m3y"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h2o15"] -action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ttdj3"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u5mnx"] -action = SubResource("OpenXRAction_llf76") -paths = PackedStringArray("/user/hand/left/input/select/click", "/user/hand/right/input/select/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4lmb0"] -action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") - -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_4qlv1"] -interaction_profile_path = "/interaction_profiles/khr/simple_controller" -bindings = [SubResource("OpenXRIPBinding_eg120"), SubResource("OpenXRIPBinding_a7k3g"), SubResource("OpenXRIPBinding_b7m3y"), SubResource("OpenXRIPBinding_h2o15"), SubResource("OpenXRIPBinding_ttdj3"), SubResource("OpenXRIPBinding_u5mnx"), SubResource("OpenXRIPBinding_4lmb0")] - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cvcg8"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fncxp"] action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/right/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_q8d4n"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qi50k"] action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/left/input/aim/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h5icu"] +action = SubResource("OpenXRAction_3236n") +binding_path = "/user/hand/right/input/aim/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_b1sv6"] +action = SubResource("OpenXRAction_ew6y8") +binding_path = "/user/hand/left/input/grip/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_t3q6h"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yu2t6"] action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") +binding_path = "/user/hand/right/input/grip/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nxjog"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_labib"] action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +binding_path = "/user/hand/left/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_o1yen"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_altuc"] +action = SubResource("OpenXRAction_qbo3t") +binding_path = "/user/hand/right/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xw4w1"] -action = SubResource("OpenXRAction_llf76") -paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7p0fp"] +action = SubResource("OpenXRAction_luyq6") +binding_path = "/user/hand/left/input/menu/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_klcvl"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yjnix"] +action = SubResource("OpenXRAction_luyq6") +binding_path = "/user/hand/right/input/system/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_psfor"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pgh0x"] +action = SubResource("OpenXRAction_bg36k") +binding_path = "/user/hand/left/input/x/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_llon0"] -action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lplyu"] +action = SubResource("OpenXRAction_bg36k") +binding_path = "/user/hand/right/input/a/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tlnbh"] -action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ifnya"] +action = SubResource("OpenXRAction_8iodc") +binding_path = "/user/hand/left/input/x/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ms0s0"] -action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jl4vo"] +action = SubResource("OpenXRAction_8iodc") +binding_path = "/user/hand/right/input/a/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6ih1x"] -action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1n6j6"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/left/input/y/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kueqf"] -action = SubResource("OpenXRAction_kklxr") -paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_o1nfs"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/right/input/b/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rq4ju"] -action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_unnrh"] +action = SubResource("OpenXRAction_ensy0") +binding_path = "/user/hand/left/input/y/touch" -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_4wrp4"] -interaction_profile_path = "/interaction_profiles/htc/vive_controller" -bindings = [SubResource("OpenXRIPBinding_cvcg8"), SubResource("OpenXRIPBinding_q8d4n"), SubResource("OpenXRIPBinding_t3q6h"), SubResource("OpenXRIPBinding_nxjog"), SubResource("OpenXRIPBinding_o1yen"), SubResource("OpenXRIPBinding_xw4w1"), SubResource("OpenXRIPBinding_klcvl"), SubResource("OpenXRIPBinding_psfor"), SubResource("OpenXRIPBinding_llon0"), SubResource("OpenXRIPBinding_tlnbh"), SubResource("OpenXRIPBinding_ms0s0"), SubResource("OpenXRIPBinding_6ih1x"), SubResource("OpenXRIPBinding_kueqf"), SubResource("OpenXRIPBinding_rq4ju")] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3wafl"] +action = SubResource("OpenXRAction_ensy0") +binding_path = "/user/hand/right/input/b/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_we6hn"] -action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tjb53"] +action = SubResource("OpenXRAction_35itf") +binding_path = "/user/hand/left/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r54kd"] -action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lcg2b"] +action = SubResource("OpenXRAction_35itf") +binding_path = "/user/hand/right/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5sslj"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sp6l2"] +action = SubResource("OpenXRAction_1o54n") +binding_path = "/user/hand/left/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_s5ikp"] -action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xj6ir"] +action = SubResource("OpenXRAction_1o54n") +binding_path = "/user/hand/right/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dn6nn"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_igmf3"] +action = SubResource("OpenXRAction_ggl67") +binding_path = "/user/hand/left/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gw3oy"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_inw5v"] +action = SubResource("OpenXRAction_ggl67") +binding_path = "/user/hand/right/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ogur1"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_iy2wq"] +action = SubResource("OpenXRAction_hk7ik") +binding_path = "/user/hand/left/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7sehy"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_plu03"] action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +binding_path = "/user/hand/right/input/squeeze/value" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dad45"] +action = SubResource("OpenXRAction_nxb4u") +binding_path = "/user/hand/left/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e8r1g"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m5e8q"] action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +binding_path = "/user/hand/right/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rswb1"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5t7jh"] action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") +binding_path = "/user/hand/left/input/thumbstick" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_k2pnr"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_chplt"] +action = SubResource("OpenXRAction_2ooiv") +binding_path = "/user/hand/right/input/thumbstick" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_obxrh"] action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +binding_path = "/user/hand/left/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8qdbl"] -action = SubResource("OpenXRAction_anwnu") -paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_on7oi"] +action = SubResource("OpenXRAction_7bbsa") +binding_path = "/user/hand/right/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nj53k"] -action = SubResource("OpenXRAction_qjhx6") -paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ege4h"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/left/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6oohc"] -action = SubResource("OpenXRAction_iqmes") -paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_h7ix0"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/right/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ocqm8"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8qanm"] action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") - -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_5jhn1"] -interaction_profile_path = "/interaction_profiles/microsoft/motion_controller" -bindings = [SubResource("OpenXRIPBinding_we6hn"), SubResource("OpenXRIPBinding_r54kd"), SubResource("OpenXRIPBinding_5sslj"), SubResource("OpenXRIPBinding_s5ikp"), SubResource("OpenXRIPBinding_dn6nn"), SubResource("OpenXRIPBinding_gw3oy"), SubResource("OpenXRIPBinding_ogur1"), SubResource("OpenXRIPBinding_7sehy"), SubResource("OpenXRIPBinding_e8r1g"), SubResource("OpenXRIPBinding_rswb1"), SubResource("OpenXRIPBinding_k2pnr"), SubResource("OpenXRIPBinding_8qdbl"), SubResource("OpenXRIPBinding_nj53k"), SubResource("OpenXRIPBinding_6oohc"), SubResource("OpenXRIPBinding_ocqm8")] +binding_path = "/user/hand/left/output/haptic" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_62ygq"] -action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mnjmu"] -action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5y8xm"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ls04t"] -action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c1ka3"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/system/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1q4y5"] -action = SubResource("OpenXRAction_bg36k") -paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uu5wd"] -action = SubResource("OpenXRAction_8iodc") -paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i0ds5"] -action = SubResource("OpenXRAction_3jnkp") -paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rcujn"] -action = SubResource("OpenXRAction_ensy0") -paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tugp6"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bv5c3"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pkiu4"] -action = SubResource("OpenXRAction_ggl67") -paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pgj3v"] -action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_70yw8"] -action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uabsj"] -action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2utcg"] -action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2a0gv"] -action = SubResource("OpenXRAction_kklxr") -paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_g2f6y"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3senm"] action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +binding_path = "/user/hand/right/output/haptic" [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_ugouo"] interaction_profile_path = "/interaction_profiles/oculus/touch_controller" -bindings = [SubResource("OpenXRIPBinding_62ygq"), SubResource("OpenXRIPBinding_mnjmu"), SubResource("OpenXRIPBinding_5y8xm"), SubResource("OpenXRIPBinding_ls04t"), SubResource("OpenXRIPBinding_c1ka3"), SubResource("OpenXRIPBinding_1q4y5"), SubResource("OpenXRIPBinding_uu5wd"), SubResource("OpenXRIPBinding_i0ds5"), SubResource("OpenXRIPBinding_rcujn"), SubResource("OpenXRIPBinding_tugp6"), SubResource("OpenXRIPBinding_bv5c3"), SubResource("OpenXRIPBinding_pkiu4"), SubResource("OpenXRIPBinding_pgj3v"), SubResource("OpenXRIPBinding_70yw8"), SubResource("OpenXRIPBinding_uabsj"), SubResource("OpenXRIPBinding_2utcg"), SubResource("OpenXRIPBinding_2a0gv"), SubResource("OpenXRIPBinding_g2f6y")] +bindings = [SubResource("OpenXRIPBinding_51qre"), SubResource("OpenXRIPBinding_fncxp"), SubResource("OpenXRIPBinding_qi50k"), SubResource("OpenXRIPBinding_h5icu"), SubResource("OpenXRIPBinding_b1sv6"), SubResource("OpenXRIPBinding_yu2t6"), SubResource("OpenXRIPBinding_labib"), SubResource("OpenXRIPBinding_altuc"), SubResource("OpenXRIPBinding_7p0fp"), SubResource("OpenXRIPBinding_yjnix"), SubResource("OpenXRIPBinding_pgh0x"), SubResource("OpenXRIPBinding_lplyu"), SubResource("OpenXRIPBinding_ifnya"), SubResource("OpenXRIPBinding_jl4vo"), SubResource("OpenXRIPBinding_1n6j6"), SubResource("OpenXRIPBinding_o1nfs"), SubResource("OpenXRIPBinding_unnrh"), SubResource("OpenXRIPBinding_3wafl"), SubResource("OpenXRIPBinding_tjb53"), SubResource("OpenXRIPBinding_lcg2b"), SubResource("OpenXRIPBinding_sp6l2"), SubResource("OpenXRIPBinding_xj6ir"), SubResource("OpenXRIPBinding_igmf3"), SubResource("OpenXRIPBinding_inw5v"), SubResource("OpenXRIPBinding_iy2wq"), SubResource("OpenXRIPBinding_plu03"), SubResource("OpenXRIPBinding_dad45"), SubResource("OpenXRIPBinding_m5e8q"), SubResource("OpenXRIPBinding_5t7jh"), SubResource("OpenXRIPBinding_chplt"), SubResource("OpenXRIPBinding_obxrh"), SubResource("OpenXRIPBinding_on7oi"), SubResource("OpenXRIPBinding_ege4h"), SubResource("OpenXRIPBinding_h7ix0"), SubResource("OpenXRIPBinding_8qanm"), SubResource("OpenXRIPBinding_3senm")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7ca55"] +action = SubResource("OpenXRAction_x8q2g") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_aigvv"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ih1l2"] action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/right/input/aim/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ipewn"] +action = SubResource("OpenXRAction_3236n") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_dvnuw"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5ngl7"] action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/right/input/aim/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_klygg"] +action = SubResource("OpenXRAction_ew6y8") +binding_path = "/user/hand/left/input/grip/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sfo4a"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4p63k"] action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") +binding_path = "/user/hand/right/input/grip/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6vi2m"] +action = SubResource("OpenXRAction_qbo3t") +binding_path = "/user/hand/left/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cqyds"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_888d1"] action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +binding_path = "/user/hand/right/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_70gg5"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_246v5"] action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") +binding_path = "/user/hand/left/input/system/click" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xj73r"] +action = SubResource("OpenXRAction_luyq6") +binding_path = "/user/hand/right/input/system/click" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sugej"] +action = SubResource("OpenXRAction_bg36k") +binding_path = "/user/hand/left/input/a/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gjpt5"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fp7u7"] action = SubResource("OpenXRAction_bg36k") -paths = PackedStringArray("/user/hand/left/input/a/click", "/user/hand/right/input/a/click") +binding_path = "/user/hand/right/input/a/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i0ako"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gvgeq"] action = SubResource("OpenXRAction_8iodc") -paths = PackedStringArray("/user/hand/left/input/a/touch", "/user/hand/right/input/a/touch") +binding_path = "/user/hand/left/input/a/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bg8gi"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i0s8c"] +action = SubResource("OpenXRAction_8iodc") +binding_path = "/user/hand/right/input/a/touch" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ynetq"] action = SubResource("OpenXRAction_3jnkp") -paths = PackedStringArray("/user/hand/left/input/b/click", "/user/hand/right/input/b/click") +binding_path = "/user/hand/left/input/b/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oq6bx"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_p8bcx"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/right/input/b/click" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jkemj"] action = SubResource("OpenXRAction_ensy0") -paths = PackedStringArray("/user/hand/left/input/b/touch", "/user/hand/right/input/b/touch") +binding_path = "/user/hand/left/input/b/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_t7ybi"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d3nfp"] +action = SubResource("OpenXRAction_ensy0") +binding_path = "/user/hand/right/input/b/touch" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jyu76"] +action = SubResource("OpenXRAction_35itf") +binding_path = "/user/hand/left/input/trigger/value" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_aecy5"] action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +binding_path = "/user/hand/right/input/trigger/value" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8vb80"] +action = SubResource("OpenXRAction_1o54n") +binding_path = "/user/hand/left/input/trigger/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lg71r"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_myee0"] action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") +binding_path = "/user/hand/right/input/trigger/click" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1vv3a"] +action = SubResource("OpenXRAction_ggl67") +binding_path = "/user/hand/left/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_toi7j"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_tjysa"] action = SubResource("OpenXRAction_ggl67") -paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") +binding_path = "/user/hand/right/input/trigger/touch" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r4yxn"] +action = SubResource("OpenXRAction_hk7ik") +binding_path = "/user/hand/left/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r31s2"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_me87v"] action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") +binding_path = "/user/hand/right/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xrh3t"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d8myu"] action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") +binding_path = "/user/hand/left/input/squeeze/value" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hsh5n"] +action = SubResource("OpenXRAction_nxb4u") +binding_path = "/user/hand/right/input/squeeze/value" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lng5j"] +action = SubResource("OpenXRAction_p36fp") +binding_path = "/user/hand/left/input/squeeze/force" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_my2kv"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_aeeoj"] action = SubResource("OpenXRAction_p36fp") -paths = PackedStringArray("/user/hand/left/input/squeeze/force", "/user/hand/right/input/squeeze/force") +binding_path = "/user/hand/right/input/squeeze/force" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ei2gh"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_gosqu"] action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") +binding_path = "/user/hand/left/input/thumbstick" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fh2yl"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n52fm"] +action = SubResource("OpenXRAction_2ooiv") +binding_path = "/user/hand/right/input/thumbstick" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vushy"] action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +binding_path = "/user/hand/left/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rgeoa"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lbhgg"] +action = SubResource("OpenXRAction_7bbsa") +binding_path = "/user/hand/right/input/thumbstick/click" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m1cgb"] action = SubResource("OpenXRAction_kklxr") -paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") +binding_path = "/user/hand/left/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v0b2c"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yfktj"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/right/input/thumbstick/touch" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kjhen"] +action = SubResource("OpenXRAction_anwnu") +binding_path = "/user/hand/left/input/trackpad" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_32kw4"] action = SubResource("OpenXRAction_anwnu") -paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") +binding_path = "/user/hand/right/input/trackpad" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ktbxl"] +action = SubResource("OpenXRAction_qjhx6") +binding_path = "/user/hand/left/input/trackpad/force" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_t7jwp"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8ldfe"] action = SubResource("OpenXRAction_qjhx6") -paths = PackedStringArray("/user/hand/left/input/trackpad/force", "/user/hand/right/input/trackpad/force") +binding_path = "/user/hand/right/input/trackpad/force" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nueak"] +action = SubResource("OpenXRAction_iqmes") +binding_path = "/user/hand/left/input/trackpad/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4nf0x"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vopyr"] action = SubResource("OpenXRAction_iqmes") -paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") +binding_path = "/user/hand/right/input/trackpad/touch" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rgbyv"] +action = SubResource("OpenXRAction_j8j65") +binding_path = "/user/hand/left/output/haptic" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0mcwa"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bflds"] action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +binding_path = "/user/hand/right/output/haptic" [sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_gvxx5"] interaction_profile_path = "/interaction_profiles/valve/index_controller" -bindings = [SubResource("OpenXRIPBinding_aigvv"), SubResource("OpenXRIPBinding_dvnuw"), SubResource("OpenXRIPBinding_sfo4a"), SubResource("OpenXRIPBinding_cqyds"), SubResource("OpenXRIPBinding_70gg5"), SubResource("OpenXRIPBinding_gjpt5"), SubResource("OpenXRIPBinding_i0ako"), SubResource("OpenXRIPBinding_bg8gi"), SubResource("OpenXRIPBinding_oq6bx"), SubResource("OpenXRIPBinding_t7ybi"), SubResource("OpenXRIPBinding_lg71r"), SubResource("OpenXRIPBinding_toi7j"), SubResource("OpenXRIPBinding_r31s2"), SubResource("OpenXRIPBinding_xrh3t"), SubResource("OpenXRIPBinding_my2kv"), SubResource("OpenXRIPBinding_ei2gh"), SubResource("OpenXRIPBinding_fh2yl"), SubResource("OpenXRIPBinding_rgeoa"), SubResource("OpenXRIPBinding_v0b2c"), SubResource("OpenXRIPBinding_t7jwp"), SubResource("OpenXRIPBinding_4nf0x"), SubResource("OpenXRIPBinding_0mcwa")] +bindings = [SubResource("OpenXRIPBinding_7ca55"), SubResource("OpenXRIPBinding_ih1l2"), SubResource("OpenXRIPBinding_ipewn"), SubResource("OpenXRIPBinding_5ngl7"), SubResource("OpenXRIPBinding_klygg"), SubResource("OpenXRIPBinding_4p63k"), SubResource("OpenXRIPBinding_6vi2m"), SubResource("OpenXRIPBinding_888d1"), SubResource("OpenXRIPBinding_246v5"), SubResource("OpenXRIPBinding_xj73r"), SubResource("OpenXRIPBinding_sugej"), SubResource("OpenXRIPBinding_fp7u7"), SubResource("OpenXRIPBinding_gvgeq"), SubResource("OpenXRIPBinding_i0s8c"), SubResource("OpenXRIPBinding_ynetq"), SubResource("OpenXRIPBinding_p8bcx"), SubResource("OpenXRIPBinding_jkemj"), SubResource("OpenXRIPBinding_d3nfp"), SubResource("OpenXRIPBinding_jyu76"), SubResource("OpenXRIPBinding_aecy5"), SubResource("OpenXRIPBinding_8vb80"), SubResource("OpenXRIPBinding_myee0"), SubResource("OpenXRIPBinding_1vv3a"), SubResource("OpenXRIPBinding_tjysa"), SubResource("OpenXRIPBinding_r4yxn"), SubResource("OpenXRIPBinding_me87v"), SubResource("OpenXRIPBinding_d8myu"), SubResource("OpenXRIPBinding_hsh5n"), SubResource("OpenXRIPBinding_lng5j"), SubResource("OpenXRIPBinding_aeeoj"), SubResource("OpenXRIPBinding_gosqu"), SubResource("OpenXRIPBinding_n52fm"), SubResource("OpenXRIPBinding_vushy"), SubResource("OpenXRIPBinding_lbhgg"), SubResource("OpenXRIPBinding_m1cgb"), SubResource("OpenXRIPBinding_yfktj"), SubResource("OpenXRIPBinding_kjhen"), SubResource("OpenXRIPBinding_32kw4"), SubResource("OpenXRIPBinding_ktbxl"), SubResource("OpenXRIPBinding_8ldfe"), SubResource("OpenXRIPBinding_nueak"), SubResource("OpenXRIPBinding_vopyr"), SubResource("OpenXRIPBinding_rgbyv"), SubResource("OpenXRIPBinding_bflds")] + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_drau7"] +action = SubResource("OpenXRAction_ew6y8") +binding_path = "/user/hand/left/input/grip/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0vq03"] +action = SubResource("OpenXRAction_ew6y8") +binding_path = "/user/hand/right/input/grip/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l6uqd"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y7ek0"] action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ob2ma"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cy6rb"] +action = SubResource("OpenXRAction_x8q2g") +binding_path = "/user/hand/right/input/aim/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6r8a6"] action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xr24t"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vmwlg"] +action = SubResource("OpenXRAction_3236n") +binding_path = "/user/hand/right/input/aim/pose" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qcgh6"] +action = SubResource("OpenXRAction_qbo3t") +binding_path = "/user/hand/left/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_o2xlt"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bwwah"] action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +binding_path = "/user/hand/right/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e42p7"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l7clg"] action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") +binding_path = "/user/hand/left/input/menu/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qxtbt"] -action = SubResource("OpenXRAction_bg36k") -paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_rtyas"] +action = SubResource("OpenXRAction_llf76") +binding_path = "/user/hand/left/input/system/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_amylv"] -action = SubResource("OpenXRAction_3jnkp") -paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hk5ci"] +action = SubResource("OpenXRAction_llf76") +binding_path = "/user/hand/right/input/system/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_04vuw"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_4j055"] +action = SubResource("OpenXRAction_bg36k") +binding_path = "/user/hand/left/input/x/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_822yv"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_awtpp"] +action = SubResource("OpenXRAction_bg36k") +binding_path = "/user/hand/right/input/a/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fc4ip"] -action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xh6fl"] +action = SubResource("OpenXRAction_8iodc") +binding_path = "/user/hand/left/input/x/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1llid"] -action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ixewl"] +action = SubResource("OpenXRAction_8iodc") +binding_path = "/user/hand/right/input/a/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c0fe5"] -action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qwqvw"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/left/input/y/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_geal7"] -action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oqlrv"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/right/input/b/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_y5bkl"] -action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jw3vw"] +action = SubResource("OpenXRAction_ensy0") +binding_path = "/user/hand/left/input/y/touch" -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_p2x5d"] -interaction_profile_path = "/interaction_profiles/hp/mixed_reality_controller" -bindings = [SubResource("OpenXRIPBinding_l6uqd"), SubResource("OpenXRIPBinding_ob2ma"), SubResource("OpenXRIPBinding_xr24t"), SubResource("OpenXRIPBinding_o2xlt"), SubResource("OpenXRIPBinding_e42p7"), SubResource("OpenXRIPBinding_qxtbt"), SubResource("OpenXRIPBinding_amylv"), SubResource("OpenXRIPBinding_04vuw"), SubResource("OpenXRIPBinding_822yv"), SubResource("OpenXRIPBinding_fc4ip"), SubResource("OpenXRIPBinding_1llid"), SubResource("OpenXRIPBinding_c0fe5"), SubResource("OpenXRIPBinding_geal7"), SubResource("OpenXRIPBinding_y5bkl")] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3bjy3"] +action = SubResource("OpenXRAction_ensy0") +binding_path = "/user/hand/right/input/b/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kwrjd"] -action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8upnq"] +action = SubResource("OpenXRAction_35itf") +binding_path = "/user/hand/left/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_48ebo"] -action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0w2ls"] +action = SubResource("OpenXRAction_35itf") +binding_path = "/user/hand/right/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l36bi"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u8hab"] +action = SubResource("OpenXRAction_1o54n") +binding_path = "/user/hand/left/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_amyuf"] -action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_eikk2"] +action = SubResource("OpenXRAction_1o54n") +binding_path = "/user/hand/right/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v4711"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click", "/user/hand/right/input/menu/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5lybe"] +action = SubResource("OpenXRAction_ggl67") +binding_path = "/user/hand/left/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_68meb"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l4y5i"] +action = SubResource("OpenXRAction_ggl67") +binding_path = "/user/hand/right/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hmrq4"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_f7m66"] +action = SubResource("OpenXRAction_hk7ik") +binding_path = "/user/hand/left/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_g0xli"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d13a6"] action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +binding_path = "/user/hand/right/input/squeeze/value" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wxcrn"] +action = SubResource("OpenXRAction_nxb4u") +binding_path = "/user/hand/left/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_u6jcs"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6k8ea"] action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +binding_path = "/user/hand/right/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_2qtii"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1qemc"] action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") +binding_path = "/user/hand/left/input/thumbstick" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_jadx1"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8u6xu"] +action = SubResource("OpenXRAction_2ooiv") +binding_path = "/user/hand/right/input/thumbstick" + +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7camc"] action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +binding_path = "/user/hand/left/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_feia6"] -action = SubResource("OpenXRAction_anwnu") -paths = PackedStringArray("/user/hand/left/input/trackpad", "/user/hand/right/input/trackpad") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0fset"] +action = SubResource("OpenXRAction_7bbsa") +binding_path = "/user/hand/right/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sjqf6"] -action = SubResource("OpenXRAction_qjhx6") -paths = PackedStringArray("/user/hand/left/input/trackpad/click", "/user/hand/right/input/trackpad/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ei7tg"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/left/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_egcs3"] -action = SubResource("OpenXRAction_iqmes") -paths = PackedStringArray("/user/hand/left/input/trackpad/touch", "/user/hand/right/input/trackpad/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c2jdk"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/right/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wg586"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_g5ap7"] action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") - -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_hdx5j"] -interaction_profile_path = "/interaction_profiles/samsung/odyssey_controller" -bindings = [SubResource("OpenXRIPBinding_kwrjd"), SubResource("OpenXRIPBinding_48ebo"), SubResource("OpenXRIPBinding_l36bi"), SubResource("OpenXRIPBinding_amyuf"), SubResource("OpenXRIPBinding_v4711"), SubResource("OpenXRIPBinding_68meb"), SubResource("OpenXRIPBinding_hmrq4"), SubResource("OpenXRIPBinding_g0xli"), SubResource("OpenXRIPBinding_u6jcs"), SubResource("OpenXRIPBinding_2qtii"), SubResource("OpenXRIPBinding_jadx1"), SubResource("OpenXRIPBinding_feia6"), SubResource("OpenXRIPBinding_sjqf6"), SubResource("OpenXRIPBinding_egcs3"), SubResource("OpenXRIPBinding_wg586")] +binding_path = "/user/hand/left/output/haptic" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l5n08"] -action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_bw6j3"] +action = SubResource("OpenXRAction_j8j65") +binding_path = "/user/hand/right/output/haptic" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1ghan"] -action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_qbe81"] +interaction_profile_path = "/interaction_profiles/bytedance/pico4_controller" +bindings = [SubResource("OpenXRIPBinding_drau7"), SubResource("OpenXRIPBinding_0vq03"), SubResource("OpenXRIPBinding_y7ek0"), SubResource("OpenXRIPBinding_cy6rb"), SubResource("OpenXRIPBinding_6r8a6"), SubResource("OpenXRIPBinding_vmwlg"), SubResource("OpenXRIPBinding_qcgh6"), SubResource("OpenXRIPBinding_bwwah"), SubResource("OpenXRIPBinding_l7clg"), SubResource("OpenXRIPBinding_rtyas"), SubResource("OpenXRIPBinding_hk5ci"), SubResource("OpenXRIPBinding_4j055"), SubResource("OpenXRIPBinding_awtpp"), SubResource("OpenXRIPBinding_xh6fl"), SubResource("OpenXRIPBinding_ixewl"), SubResource("OpenXRIPBinding_qwqvw"), SubResource("OpenXRIPBinding_oqlrv"), SubResource("OpenXRIPBinding_jw3vw"), SubResource("OpenXRIPBinding_3bjy3"), SubResource("OpenXRIPBinding_8upnq"), SubResource("OpenXRIPBinding_0w2ls"), SubResource("OpenXRIPBinding_u8hab"), SubResource("OpenXRIPBinding_eikk2"), SubResource("OpenXRIPBinding_5lybe"), SubResource("OpenXRIPBinding_l4y5i"), SubResource("OpenXRIPBinding_f7m66"), SubResource("OpenXRIPBinding_d13a6"), SubResource("OpenXRIPBinding_wxcrn"), SubResource("OpenXRIPBinding_6k8ea"), SubResource("OpenXRIPBinding_1qemc"), SubResource("OpenXRIPBinding_8u6xu"), SubResource("OpenXRIPBinding_7camc"), SubResource("OpenXRIPBinding_0fset"), SubResource("OpenXRIPBinding_ei7tg"), SubResource("OpenXRIPBinding_c2jdk"), SubResource("OpenXRIPBinding_g5ap7"), SubResource("OpenXRIPBinding_bw6j3")] -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_77ipf"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6ivru"] action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1narm"] -action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_x2ryr"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5rebn"] -action = SubResource("OpenXRAction_llf76") -paths = PackedStringArray("/user/hand/right/input/system/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mx0ou"] -action = SubResource("OpenXRAction_bg36k") -paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wy5sx"] -action = SubResource("OpenXRAction_3jnkp") -paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_g3t7o"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_uv4j3"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pw8in"] -action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_xxnvr"] -action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_57ecj"] -action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i8qms"] -action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +binding_path = "/user/hand/left/input/grip/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r2mik"] -action = SubResource("OpenXRAction_kklxr") -paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vfhwq"] +action = SubResource("OpenXRAction_ew6y8") +binding_path = "/user/hand/right/input/grip/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_chugc"] -action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5w03k"] +action = SubResource("OpenXRAction_x8q2g") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_882yu"] -interaction_profile_path = "/interaction_profiles/htc/vive_cosmos_controller" -bindings = [SubResource("OpenXRIPBinding_l5n08"), SubResource("OpenXRIPBinding_1ghan"), SubResource("OpenXRIPBinding_77ipf"), SubResource("OpenXRIPBinding_1narm"), SubResource("OpenXRIPBinding_x2ryr"), SubResource("OpenXRIPBinding_5rebn"), SubResource("OpenXRIPBinding_mx0ou"), SubResource("OpenXRIPBinding_wy5sx"), SubResource("OpenXRIPBinding_g3t7o"), SubResource("OpenXRIPBinding_uv4j3"), SubResource("OpenXRIPBinding_pw8in"), SubResource("OpenXRIPBinding_xxnvr"), SubResource("OpenXRIPBinding_57ecj"), SubResource("OpenXRIPBinding_i8qms"), SubResource("OpenXRIPBinding_r2mik"), SubResource("OpenXRIPBinding_chugc")] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_typ1r"] +action = SubResource("OpenXRAction_3236n") +binding_path = "/user/hand/left/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i6y6e"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_clvbf"] action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/right/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5eenn"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_5bppb"] action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +binding_path = "/user/hand/right/input/aim/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m2sem"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yxm6a"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3k6la"] action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +binding_path = "/user/hand/left/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_a0hu6"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qk16w"] -action = SubResource("OpenXRAction_llf76") -paths = PackedStringArray("/user/hand/right/input/system/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7jfvm"] -action = SubResource("OpenXRAction_bg36k") -paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_26tcn"] -action = SubResource("OpenXRAction_3jnkp") -paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_i8esw"] +action = SubResource("OpenXRAction_qbo3t") +binding_path = "/user/hand/right/input/grip_surface/pose" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_x1hnh"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_um1hv"] action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +binding_path = "/user/hand/left/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_v4ir2"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oqnsu"] action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/click", "/user/hand/right/input/trigger/click") +binding_path = "/user/hand/left/input/trigger/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_567kd"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r5bl7"] action = SubResource("OpenXRAction_ggl67") -paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qj5fv"] -action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +binding_path = "/user/hand/left/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qedy0"] -action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/click", "/user/hand/right/input/squeeze/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ytptc"] +action = SubResource("OpenXRAction_35itf") +binding_path = "/user/hand/right/input/trigger/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_og2q7"] -action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_iphn4"] +action = SubResource("OpenXRAction_ggl67") +binding_path = "/user/hand/right/input/trigger/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_boduj"] -action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_3p2as"] +action = SubResource("OpenXRAction_1o54n") +binding_path = "/user/hand/right/input/trigger/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_okuxd"] -action = SubResource("OpenXRAction_kklxr") -paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_wdehm"] +action = SubResource("OpenXRAction_hk7ik") +binding_path = "/user/hand/left/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_6sxww"] -action = SubResource("OpenXRAction_iqmes") -paths = PackedStringArray("/user/hand/left/input/thumbrest/touch", "/user/hand/right/input/thumbrest/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_clfly"] +action = SubResource("OpenXRAction_fjhrj") +binding_path = "/user/hand/left/input/squeeze/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ynr8n"] -action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_e1frq"] +action = SubResource("OpenXRAction_nxb4u") +binding_path = "/user/hand/left/input/squeeze/click" -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_q0hjk"] -interaction_profile_path = "/interaction_profiles/htc/vive_focus3_controller" -bindings = [SubResource("OpenXRIPBinding_i6y6e"), SubResource("OpenXRIPBinding_5eenn"), SubResource("OpenXRIPBinding_m2sem"), SubResource("OpenXRIPBinding_yxm6a"), SubResource("OpenXRIPBinding_a0hu6"), SubResource("OpenXRIPBinding_qk16w"), SubResource("OpenXRIPBinding_7jfvm"), SubResource("OpenXRIPBinding_26tcn"), SubResource("OpenXRIPBinding_x1hnh"), SubResource("OpenXRIPBinding_v4ir2"), SubResource("OpenXRIPBinding_567kd"), SubResource("OpenXRIPBinding_qj5fv"), SubResource("OpenXRIPBinding_qedy0"), SubResource("OpenXRIPBinding_og2q7"), SubResource("OpenXRIPBinding_boduj"), SubResource("OpenXRIPBinding_okuxd"), SubResource("OpenXRIPBinding_6sxww"), SubResource("OpenXRIPBinding_ynr8n")] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l7aq8"] +action = SubResource("OpenXRAction_hk7ik") +binding_path = "/user/hand/right/input/squeeze/value" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_lfd33"] -action = SubResource("OpenXRAction_x8q2g") -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") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_oi0ij"] +action = SubResource("OpenXRAction_fjhrj") +binding_path = "/user/hand/right/input/squeeze/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_8bcuf"] -action = SubResource("OpenXRAction_j8j65") -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") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_m08eo"] +action = SubResource("OpenXRAction_nxb4u") +binding_path = "/user/hand/right/input/squeeze/click" -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_eaqa4"] -interaction_profile_path = "/interaction_profiles/htc/vive_tracker_htcx" -bindings = [SubResource("OpenXRIPBinding_lfd33"), SubResource("OpenXRIPBinding_8bcuf")] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_c4j1d"] +action = SubResource("OpenXRAction_2ooiv") +binding_path = "/user/hand/left/input/thumbstick" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_x4e6a"] -action = SubResource("OpenXRAction_ew6y8") -paths = PackedStringArray("/user/hand/left/input/grip/pose", "/user/hand/right/input/grip/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sopde"] +action = SubResource("OpenXRAction_2ooiv") +binding_path = "/user/hand/right/input/thumbstick" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ecta5"] -action = SubResource("OpenXRAction_x8q2g") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_sow2k"] +action = SubResource("OpenXRAction_7bbsa") +binding_path = "/user/hand/left/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nrrf5"] -action = SubResource("OpenXRAction_3236n") -paths = PackedStringArray("/user/hand/left/input/aim/pose", "/user/hand/right/input/aim/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ngwcy"] +action = SubResource("OpenXRAction_7bbsa") +binding_path = "/user/hand/right/input/thumbstick/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_cwljl"] -action = SubResource("OpenXRAction_qbo3t") -paths = PackedStringArray("/user/hand/left/input/palm_ext/pose", "/user/hand/right/input/palm_ext/pose") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_r3qn1"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/left/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_l7clg"] -action = SubResource("OpenXRAction_luyq6") -paths = PackedStringArray("/user/hand/left/input/menu/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_n01b8"] +action = SubResource("OpenXRAction_kklxr") +binding_path = "/user/hand/right/input/thumbstick/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7jifo"] -action = SubResource("OpenXRAction_llf76") -paths = PackedStringArray("/user/hand/left/input/system/click", "/user/hand/right/input/system/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_pjtev"] +action = SubResource("OpenXRAction_bg36k") +binding_path = "/user/hand/right/input/a/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_yvlia"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nqyri"] action = SubResource("OpenXRAction_bg36k") -paths = PackedStringArray("/user/hand/left/input/x/click", "/user/hand/right/input/a/click") +binding_path = "/user/hand/left/input/dpad_down/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_orju6"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_86uui"] action = SubResource("OpenXRAction_8iodc") -paths = PackedStringArray("/user/hand/left/input/x/touch", "/user/hand/right/input/a/touch") +binding_path = "/user/hand/right/input/a/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_j5xio"] -action = SubResource("OpenXRAction_3jnkp") -paths = PackedStringArray("/user/hand/left/input/y/click", "/user/hand/right/input/b/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nrtxc"] +action = SubResource("OpenXRAction_8iodc") +binding_path = "/user/hand/left/input/dpad_down/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_nx3rs"] +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_qovyo"] action = SubResource("OpenXRAction_ensy0") -paths = PackedStringArray("/user/hand/left/input/y/touch", "/user/hand/right/input/b/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_0owf6"] -action = SubResource("OpenXRAction_35itf") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") +binding_path = "/user/hand/right/input/b/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_fssdw"] -action = SubResource("OpenXRAction_1o54n") -paths = PackedStringArray("/user/hand/left/input/trigger/value", "/user/hand/right/input/trigger/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_ftsm3"] -action = SubResource("OpenXRAction_ggl67") -paths = PackedStringArray("/user/hand/left/input/trigger/touch", "/user/hand/right/input/trigger/touch") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_vc5pc"] -action = SubResource("OpenXRAction_hk7ik") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_kp0ro"] -action = SubResource("OpenXRAction_nxb4u") -paths = PackedStringArray("/user/hand/left/input/squeeze/value", "/user/hand/right/input/squeeze/value") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_et7vm"] -action = SubResource("OpenXRAction_2ooiv") -paths = PackedStringArray("/user/hand/left/input/thumbstick", "/user/hand/right/input/thumbstick") - -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_1ktpp"] -action = SubResource("OpenXRAction_7bbsa") -paths = PackedStringArray("/user/hand/left/input/thumbstick/click", "/user/hand/right/input/thumbstick/click") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_d6uso"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/right/input/b/click" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_knofr"] -action = SubResource("OpenXRAction_kklxr") -paths = PackedStringArray("/user/hand/left/input/thumbstick/touch", "/user/hand/right/input/thumbstick/touch") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_hvi7v"] +action = SubResource("OpenXRAction_ensy0") +binding_path = "/user/hand/left/input/dpad_left/touch" -[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_mxahh"] -action = SubResource("OpenXRAction_j8j65") -paths = PackedStringArray("/user/hand/left/output/haptic", "/user/hand/right/output/haptic") +[sub_resource type="OpenXRIPBinding" id="OpenXRIPBinding_7dxun"] +action = SubResource("OpenXRAction_3jnkp") +binding_path = "/user/hand/left/input/dpad_left/click" -[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_qbe81"] -interaction_profile_path = "/interaction_profiles/bytedance/pico4_controller" -bindings = [SubResource("OpenXRIPBinding_x4e6a"), SubResource("OpenXRIPBinding_ecta5"), SubResource("OpenXRIPBinding_nrrf5"), SubResource("OpenXRIPBinding_cwljl"), SubResource("OpenXRIPBinding_l7clg"), SubResource("OpenXRIPBinding_7jifo"), SubResource("OpenXRIPBinding_yvlia"), SubResource("OpenXRIPBinding_orju6"), SubResource("OpenXRIPBinding_j5xio"), SubResource("OpenXRIPBinding_nx3rs"), SubResource("OpenXRIPBinding_0owf6"), SubResource("OpenXRIPBinding_fssdw"), SubResource("OpenXRIPBinding_ftsm3"), SubResource("OpenXRIPBinding_vc5pc"), SubResource("OpenXRIPBinding_kp0ro"), SubResource("OpenXRIPBinding_et7vm"), SubResource("OpenXRIPBinding_1ktpp"), SubResource("OpenXRIPBinding_knofr"), SubResource("OpenXRIPBinding_mxahh")] +[sub_resource type="OpenXRInteractionProfile" id="OpenXRInteractionProfile_um1hv"] +interaction_profile_path = "/interaction_profiles/valve/frame_controller_valve" +bindings = [SubResource("OpenXRIPBinding_6ivru"), SubResource("OpenXRIPBinding_vfhwq"), SubResource("OpenXRIPBinding_5w03k"), SubResource("OpenXRIPBinding_typ1r"), SubResource("OpenXRIPBinding_clvbf"), SubResource("OpenXRIPBinding_5bppb"), SubResource("OpenXRIPBinding_3k6la"), SubResource("OpenXRIPBinding_i8esw"), SubResource("OpenXRIPBinding_um1hv"), SubResource("OpenXRIPBinding_oqnsu"), SubResource("OpenXRIPBinding_r5bl7"), SubResource("OpenXRIPBinding_ytptc"), SubResource("OpenXRIPBinding_iphn4"), SubResource("OpenXRIPBinding_3p2as"), SubResource("OpenXRIPBinding_wdehm"), SubResource("OpenXRIPBinding_clfly"), SubResource("OpenXRIPBinding_e1frq"), SubResource("OpenXRIPBinding_l7aq8"), SubResource("OpenXRIPBinding_oi0ij"), SubResource("OpenXRIPBinding_m08eo"), SubResource("OpenXRIPBinding_c4j1d"), SubResource("OpenXRIPBinding_sopde"), SubResource("OpenXRIPBinding_sow2k"), SubResource("OpenXRIPBinding_ngwcy"), SubResource("OpenXRIPBinding_r3qn1"), SubResource("OpenXRIPBinding_n01b8"), SubResource("OpenXRIPBinding_pjtev"), SubResource("OpenXRIPBinding_nqyri"), SubResource("OpenXRIPBinding_86uui"), SubResource("OpenXRIPBinding_nrtxc"), SubResource("OpenXRIPBinding_qovyo"), SubResource("OpenXRIPBinding_d6uso"), SubResource("OpenXRIPBinding_hvi7v"), SubResource("OpenXRIPBinding_7dxun")] [resource] action_sets = [SubResource("OpenXRActionSet_geiix")] -interaction_profiles = [SubResource("OpenXRInteractionProfile_4qlv1"), SubResource("OpenXRInteractionProfile_4wrp4"), SubResource("OpenXRInteractionProfile_5jhn1"), SubResource("OpenXRInteractionProfile_ugouo"), SubResource("OpenXRInteractionProfile_gvxx5"), SubResource("OpenXRInteractionProfile_p2x5d"), SubResource("OpenXRInteractionProfile_hdx5j"), SubResource("OpenXRInteractionProfile_882yu"), SubResource("OpenXRInteractionProfile_q0hjk"), SubResource("OpenXRInteractionProfile_eaqa4"), SubResource("OpenXRInteractionProfile_qbe81")] +interaction_profiles = [SubResource("OpenXRInteractionProfile_ugouo"), SubResource("OpenXRInteractionProfile_gvxx5"), SubResource("OpenXRInteractionProfile_qbe81"), SubResource("OpenXRInteractionProfile_um1hv")] diff --git a/project.godot b/project.godot index 6f7e327..c31387c 100644 --- a/project.godot +++ b/project.godot @@ -8,18 +8,22 @@ config_version=5 +[animation] + +compatibility/default_parent_skeleton_in_mesh_instance_3d=true + [application] config/name="Godot XR Template" run/main_scene="res://game/main.tscn" -config/features=PackedStringArray("4.2") +config/features=PackedStringArray("4.6") config/icon="res://icon.png" [autoload] -XRToolsUserSettings="*res://addons/godot-xr-tools/user_settings/user_settings.gd" +XRToolsUserSettings="*uid://bqgb8i74tm0t" GameState="*res://game/game_state.tscn" -XRToolsRumbleManager="*res://addons/godot-xr-tools/rumble/rumble_manager.gd" +XRToolsRumbleManager="*uid://by853dk86g1qw" [editor_plugins] @@ -54,6 +58,7 @@ common/drop_mouse_on_gui_input_disabled=true [physics] +3d/physics_engine="GodotPhysics3D" 3d/solver/contact_max_allowed_penetration=0.001 [rendering] @@ -66,4 +71,7 @@ environment/defaults/default_environment="res://default_env.tres" [xr] openxr/enabled=true +openxr/foveation_level=3 +openxr/foveation_dynamic=true shaders/enabled=true +openxr/extensions/meta/color_space/starting_color_space=3