diff --git a/ovr-utils/Main.tscn b/ovr-utils/Main.tscn index 2e9cda2..756bda6 100644 --- a/ovr-utils/Main.tscn +++ b/ovr-utils/Main.tscn @@ -1,27 +1,43 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://addons/openvr_overlay/OverlayInstance.tscn" type="PackedScene" id=1] -[ext_resource path="res://addons/openvr_overlay/interaction/OverlayInteraction.tscn" type="PackedScene" id=2] +[ext_resource path="res://overlays/FPSOverlay.tscn" type="PackedScene" id=2] [ext_resource path="res://overlays/TimeOverlay.tscn" type="PackedScene" id=3] [ext_resource path="res://temp.gd" type="Script" id=4] [ext_resource path="res://overlays/xyz_widget/zx.tscn" type="PackedScene" id=5] [ext_resource path="res://overlays/xyz_widget/yz.tscn" type="PackedScene" id=6] +[ext_resource path="res://overlays/BatteryOverlay.tscn" type="PackedScene" id=7] +[ext_resource path="res://addons/openvr_overlay/interaction/OverlayInteraction.tscn" type="PackedScene" id=8] [sub_resource type="Environment" id=1] background_mode = 1 -background_color = Color( 0.105882, 0.0862745, 0.164706, 1 ) +background_color = Color( 0.113725, 0.0705882, 0.196078, 1 ) [node name="Overlays" type="Node"] script = ExtResource( 4 ) +[node name="OverlayInstance Battery" parent="." instance=ExtResource( 1 )] +target = 1 +overlay_scene = ExtResource( 7 ) +offset_pos = Vector3( -0.12, 0, 0.1 ) +offset_rot = Vector3( -135, 90, 0 ) + +[node name="OverlayInteraction" parent="OverlayInstance Battery" instance=ExtResource( 8 )] + +[node name="OverlayInstance FPS" parent="." instance=ExtResource( 1 )] +target = 1 +overlay_scene = ExtResource( 2 ) +offset_pos = Vector3( 0.05, -0.01, 0.15 ) +offset_rot = Vector3( -135, 90, 0 ) + [node name="OverlayInstance Time" parent="." instance=ExtResource( 1 )] target = 1 overlay_scene = ExtResource( 3 ) offset_pos = Vector3( -0.05, 0.02, 0.15 ) -offset_rot = Vector3( 0, -90, -135 ) +offset_rot = Vector3( -135, 90, 0 ) width_meters = 0.1 -[node name="OverlayInteraction" parent="OverlayInstance Time" instance=ExtResource( 2 )] +[node name="OverlayInteraction" parent="OverlayInstance Time" instance=ExtResource( 8 )] [node name="XYZ Widget" type="Node" parent="."] @@ -29,20 +45,19 @@ width_meters = 0.1 target = 1 overlay_scene = ExtResource( 6 ) offset_pos = Vector3( 0, 0, 0 ) -offset_rot = Vector3( 0, -90, 0 ) +offset_rot = Vector3( 0, 90, 0 ) + +[node name="OverlayInteraction" parent="XYZ Widget/YZ" instance=ExtResource( 8 )] [node name="ZX" parent="XYZ Widget" instance=ExtResource( 1 )] target = 1 overlay_scene = ExtResource( 5 ) offset_pos = Vector3( 0, 0, 0 ) -offset_rot = Vector3( 90, 0, 0 ) +offset_rot = Vector3( -90, 0, 0 ) -[node name="OverlayInstance" parent="." instance=ExtResource( 1 )] -target = 3 -offset_pos = Vector3( 0, 0, 0 ) -offset_rot = Vector3( 45, 45, 0 ) +[node name="OverlayInteraction" parent="XYZ Widget/ZX" instance=ExtResource( 8 )] -[node name="OverlayInteraction" parent="OverlayInstance" instance=ExtResource( 2 )] +[node name="Spatial" type="Spatial" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource( 1 ) diff --git a/ovr-utils/addons/godot-openvr/CHANGES.md b/ovr-utils/addons/godot-openvr/CHANGES.md index cb649d0..fc66236 100644 --- a/ovr-utils/addons/godot-openvr/CHANGES.md +++ b/ovr-utils/addons/godot-openvr/CHANGES.md @@ -4,10 +4,19 @@ Changes to the Godot OpenVR asset Note, version numbers listed here are the version number assigned to the asset. Each time a new version is uploaded to the asset store we will increase the version number. More frequent updates may be available on the source repository. +1.1.0 - In progress +------------------- +- Build for Godot 3.2 +- Added support for actions +- Added support for request play area +- Added skeleton support (finger tracking) + 1.0.5 - 1 March 2019 -------------------- - Now using OpenVR 1.9.16 - Added support for overlays +- Proper asynchronious loading of controller meshes and textures +- Rewrite to using godot_cpp classes 1.0.4 - 27 March 2019 --------------------- diff --git a/ovr-utils/addons/godot-openvr/CONTRIBUTORS.md b/ovr-utils/addons/godot-openvr/CONTRIBUTORS.md deleted file mode 100644 index 3230d0b..0000000 --- a/ovr-utils/addons/godot-openvr/CONTRIBUTORS.md +++ /dev/null @@ -1,9 +0,0 @@ -Contributors -============ - -This plugin has mostly been developed by [Bastiaan Olij](https://github.com/BastiaanOlij). -Special thanks to [Benedikt](https://github.com/beniwtv) for doing all the work on overlay support. - -Other people who have helped out by submitting fixes, enhancements, etc are: -- [RMKD](https://github.com/RMKD) -- [Bruvzg](https://github.com/bruvzg) diff --git a/ovr-utils/addons/godot-openvr/EditorPlugin.gd b/ovr-utils/addons/godot-openvr/EditorPlugin.gd new file mode 100644 index 0000000..ddfbbcb --- /dev/null +++ b/ovr-utils/addons/godot-openvr/EditorPlugin.gd @@ -0,0 +1,25 @@ +tool +extends EditorPlugin + +var export_plugin + +func _enter_tree(): + # Initialization of the plugin goes here + export_plugin = preload("res://addons/godot-openvr/OpenVRExportPlugin.gd") + + if export_plugin: + # print("Loaded res://addons/godot-openvr/OpenVRExportPlugin.gd") + + export_plugin = export_plugin.new() + if export_plugin: + # print("New res://addons/godot-openvr/OpenVRExportPlugin.gd") + add_export_plugin(export_plugin) + # else: + # print("Failed to instance res://addons/godot-openvr/OpenVRExportPlugin.gd") + #else: + # print("Failed to load res://addons/godot-openvr/OpenVRExportPlugin.gd") + +func _exit_tree(): + # Clean-up of the plugin goes here + if export_plugin: + remove_export_plugin(export_plugin) diff --git a/ovr-utils/addons/godot-openvr/OpenVRAction.gdns b/ovr-utils/addons/godot-openvr/OpenVRAction.gdns new file mode 100644 index 0000000..41fec24 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/OpenVRAction.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://addons/godot-openvr/godot_openvr.gdnlib" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "OpenVRAction" +class_name = "OpenVRAction" +library = ExtResource( 1 ) diff --git a/ovr-utils/addons/godot-openvr/OpenVRController.gdns b/ovr-utils/addons/godot-openvr/OpenVRController.gdns new file mode 100644 index 0000000..1ab2e46 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/OpenVRController.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://addons/godot-openvr/godot_openvr.gdnlib" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "OpenVRController" +class_name = "OpenVRController" +library = ExtResource( 1 ) diff --git a/ovr-utils/addons/godot-openvr/OpenVRExportPlugin.gd b/ovr-utils/addons/godot-openvr/OpenVRExportPlugin.gd new file mode 100644 index 0000000..3b962d9 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/OpenVRExportPlugin.gd @@ -0,0 +1,40 @@ +tool +extends EditorExportPlugin + +func _export_begin(features: PoolStringArray, is_debug: bool, path: String, flags: int ): + var dir = Directory.new() + + # we just want the path + var export_to = path.get_base_dir() + "/actions/" + + # now determine which action files to export + var export_from = "" + if dir.file_exists("res://actions/actions.json"): + export_from = "res://actions/" + elif dir.file_exists("res://addons/godot-openvr/actions/actions.json"): + export_from = "res://addons/godot-openvr/actions/" + else: + print("WARNING: Couldn't locate actions files to export") + return + + # print("Exporting " + export_from +" to " + export_to) + if !dir.dir_exists(export_to): + dir.make_dir(export_to) + + if dir.open(export_from) == OK: + dir.list_dir_begin(true, true) + + var filename = dir.get_next() + while filename != "": + # print("Copy " + filename) + dir.copy(export_from + filename, export_to + filename) + + filename = dir.get_next() + + dir.list_dir_end() + +#func _export_end(): +# print("Export ended") + +#func _export_file(path: String, type: String, features: PoolStringArray): +# print("Export " + path) diff --git a/ovr-utils/addons/godot-openvr/OpenVRHaptics.gdns b/ovr-utils/addons/godot-openvr/OpenVRHaptics.gdns new file mode 100644 index 0000000..722e9ee --- /dev/null +++ b/ovr-utils/addons/godot-openvr/OpenVRHaptics.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://addons/godot-openvr/godot_openvr.gdnlib" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "OpenVRHaptics" +class_name = "OpenVRHaptics" +library = ExtResource( 1 ) diff --git a/ovr-utils/addons/godot-openvr/OpenVRPose.gdns b/ovr-utils/addons/godot-openvr/OpenVRPose.gdns new file mode 100644 index 0000000..d9e42fc --- /dev/null +++ b/ovr-utils/addons/godot-openvr/OpenVRPose.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://addons/godot-openvr/godot_openvr.gdnlib" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "OpenVRPose" +class_name = "OpenVRPose" +library = ExtResource( 1 ) diff --git a/ovr-utils/addons/godot-openvr/OpenVRSkeleton.gdns b/ovr-utils/addons/godot-openvr/OpenVRSkeleton.gdns new file mode 100644 index 0000000..a4172e5 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/OpenVRSkeleton.gdns @@ -0,0 +1,10 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://addons/godot-openvr/godot_openvr.gdnlib" type="GDNativeLibrary" id=1] + +[resource] + +resource_name = "OpenVRSkeleton" +class_name = "OpenVRSkeleton" +library = ExtResource( 1 ) +_sections_unfolded = [ "Resource" ] diff --git a/ovr-utils/addons/godot-openvr/README.md b/ovr-utils/addons/godot-openvr/README.md deleted file mode 100644 index 530c60d..0000000 --- a/ovr-utils/addons/godot-openvr/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# Godot OpenVR GDNative module -This module is provided as is, all files are contained within the addons/godot-openvr-asset folder - -This module requires **Godot 3.1 or newer** to run, **Godot 3.2** is highly recommended. - -The scenes subfolder contains a number of godot scenes that help you set up your project. -For basic functionality start with adding ovr_first_person.tcn to your project. -Also make sure that vsync is turned off in your project settings. - -Source code for this module can be found here: -https://github.com/GodotVR/godot_openvr - -Also note that we have a support asset containing a number of useful scenes to get you going building VR applications in Godot: -https://github.com/GodotVR/godot-vr-common - -Documentation on using this asset can be found here: -https://github.com/GodotVR/godot-openvr-asset/wiki - -HDR support ------------ -HDR support was added to OpenVR but requires the keep_3d_linear flag added to Godot 3.2. This will ensure rendering inside of the headset is correct. The preview on screen will look darker. You can solve this by using a separate viewport. - -When using Godot 3.1 you need to either use the GLES2 renderer or turn HDR off on the viewport used to render to the HMD. - -Licensing ---------- -The Godot OpenVR module and the godot scenes in this add on are all supplied under an MIT License. - -The dynamic libraries supplier by Valve fall under Valve's own license. -For more information about this license please visit https://github.com/ValveSoftware/openvr - -About this repository ---------------------- -This repository was created by and is maintained by Bastiaan Olij a.k.a. Mux213 - -You can follow me on twitter for regular updates here: -https://twitter.com/mux213 - -Videos about my work with Godot including tutorials on working with VR in Godot can by found on my youtube page: -https://www.youtube.com/BastiaanOlij diff --git a/ovr-utils/addons/godot-openvr/actions/actions.json b/ovr-utils/addons/godot-openvr/actions/actions.json new file mode 100644 index 0000000..9171727 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/actions.json @@ -0,0 +1,107 @@ +{ + "action_set" : [ + { + "name" : "/actions/godot", + "usage" : "leftright" + } + ], + "actions" : [ + { + "name" : "/actions/godot/in/trigger", + "requirement" : "mandatory", + "type" : "boolean" + }, + { + "name" : "/actions/godot/in/analog_trigger", + "requirement" : "suggested", + "type" : "vector1" + }, + { + "name" : "/actions/godot/in/grip", + "requirement" : "suggested", + "type" : "boolean" + }, + { + "name" : "/actions/godot/in/analog_grip", + "requirement" : "suggested", + "type" : "vector1" + }, + { + "name" : "/actions/godot/in/analog", + "requirement" : "suggested", + "type" : "vector2" + }, + { + "name" : "/actions/godot/in/analog_click", + "requirement" : "suggested", + "type" : "boolean" + }, + { + "name" : "/actions/godot/in/button_ax", + "requirement" : "optional", + "type" : "boolean" + }, + { + "name" : "/actions/godot/in/button_by", + "requirement" : "optional", + "type" : "boolean" + }, + { + "name" : "/actions/godot/out/haptic", + "requirement" : "optional", + "type" : "vibration" + }, + { + "name": "/actions/godot/in/left_hand", + "type": "skeleton", + "skeleton": "/skeleton/hand/left" + }, + { + "name": "/actions/godot/in/right_hand", + "type": "skeleton", + "skeleton": "/skeleton/hand/right" + } ], + "default_bindings" : [ + { + "binding_url" : "bindings_index_controller.json", + "controller_type" : "knuckles" + }, + { + "binding_url" : "bindings_oculus_touch.json", + "controller_type" : "oculus_touch" + }, + { + "binding_url" : "bindings_vive_controller.json", + "controller_type" : "vive_controller" + }, + { + "binding_url" : "bindings_holographic_controller.json", + "controller_type" : "holographic_controller" + }, + { + "binding_url" : "bindings_generic.json", + "controller_type" : "generic" + }, + { + "binding_url" : "bindings_gamepad.json", + "controller_type" : "gamepad" + } + ], + "localization" : [ + { + "/actions/godot" : "Godot actions", + "/actions/godot/in/analog" : "Analog Input", + "/actions/godot/in/analog_click" : "Analog Click", + "/actions/godot/in/analog_grip" : "Analog Grip", + "/actions/godot/in/analog_trigger" : "Analog Trigger", + "/actions/godot/in/button_ax" : "A/X Button", + "/actions/godot/in/button_by" : "B/Y Button", + "/actions/godot/in/grip" : "Grip", + "/actions/godot/in/trigger" : "Trigger", + "/actions/godot/out/haptic" : "Haptic Feedback", + "/actions/godot/in/left_hand" : "Left hand", + "/actions/godot/in/right_hand" : "Right hand", + "language_tag" : "en_US" + } + ] +} diff --git a/ovr-utils/addons/godot-openvr/actions/bindings_gamepad.json b/ovr-utils/addons/godot-openvr/actions/bindings_gamepad.json new file mode 100644 index 0000000..c53a682 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/bindings_gamepad.json @@ -0,0 +1,112 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "bindings" : { + "/actions/godot" : { + "haptics" : [ + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/gamepad/input/trigger_right" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/gamepad/input/shoulder_right" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/gamepad/input/joystick_right" + } + ] + } + }, + "category" : "steamvr_input", + "controller_type" : "gamepad", + "description" : "Bindings for the Godot OpenVR plugin for a generic controller", + "name" : "Godot bindings for Gamepad", + "options" : { + "returnBindingsWithRightHand" : true + }, + "simulated_actions" : [] +} diff --git a/ovr-utils/addons/godot-openvr/actions/bindings_generic.json b/ovr-utils/addons/godot-openvr/actions/bindings_generic.json new file mode 100644 index 0000000..7183bfc --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/bindings_generic.json @@ -0,0 +1,75 @@ +{ + "bindings" : { + "/actions/godot" : { + "haptics" : [ + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + } + ] + } + }, + "controller_type" : "generic", + "description" : "Bindings for the Godot OpenVR plugin for a generic controller", + "name" : "Godot bindings for a generic controller" +} diff --git a/ovr-utils/addons/godot-openvr/actions/bindings_holographic_controller.json b/ovr-utils/addons/godot-openvr/actions/bindings_holographic_controller.json new file mode 100644 index 0000000..c2a4b7d --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/bindings_holographic_controller.json @@ -0,0 +1,132 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "bindings" : { + "/actions/godot" : { + "haptics" : [ + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "skeleton" : [ + { + "output" : "/actions/godot/in/left_hand", + "path" : "/user/hand/left/input/skeleton/left" + }, + { + "output" : "/actions/godot/in/right_hand", + "path" : "/user/hand/right/input/skeleton/right" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "value" : { + "output" : "/actions/godot/in/analog_grip" + } + }, + "mode" : "scalar_constant", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "value" : { + "output" : "/actions/godot/in/analog_grip" + } + }, + "mode" : "scalar_constant", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/joystick" + } + ] + } + }, + "category" : "steamvr_input", + "controller_type" : "holographic_controller", + "description" : "Bindings for the Godot OpenVR plugin for Windows Mixed Reality Controller", + "name" : "Godot bindings for Windows Mixed Reality Controller", + "options" : {}, + "simulated_actions" : [] +} diff --git a/ovr-utils/addons/godot-openvr/actions/bindings_index_controller.json b/ovr-utils/addons/godot-openvr/actions/bindings_index_controller.json new file mode 100644 index 0000000..2984cdc --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/bindings_index_controller.json @@ -0,0 +1,144 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "bindings" : { + "/actions/godot" : { + "haptics" : [ + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "skeleton" : [ + { + "output" : "/actions/godot/in/left_hand", + "path" : "/user/hand/left/input/skeleton/left" + }, + { + "output" : "/actions/godot/in/right_hand", + "path" : "/user/hand/right/input/skeleton/right" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + }, + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + }, + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/thumbstick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/thumbstick" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/godot/in/analog_grip" + }, + "touch" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "pull" : { + "output" : "/actions/godot/in/analog_grip" + }, + "touch" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_by" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/b" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_by" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/b" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_ax" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_ax" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/a" + } + ] + } + }, + "category" : "steamvr_input", + "controller_type" : "knuckles", + "description" : "Bindings for the Godot OpenVR plugin for an index controller", + "name" : "Godot bindings for an index controller", + "options" : {}, + "simulated_actions" : [] +} diff --git a/ovr-utils/addons/godot-openvr/actions/bindings_oculus_touch.json b/ovr-utils/addons/godot-openvr/actions/bindings_oculus_touch.json new file mode 100644 index 0000000..00588b9 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/bindings_oculus_touch.json @@ -0,0 +1,144 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "bindings" : { + "/actions/godot" : { + "haptics" : [ + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "skeleton" : [ + { + "output" : "/actions/godot/in/left_hand", + "path" : "/user/hand/left/input/skeleton/left" + }, + { + "output" : "/actions/godot/in/right_hand", + "path" : "/user/hand/right/input/skeleton/right" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/hand/left/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_ax" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/x" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_by" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/y" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "joystick", + "path" : "/user/hand/right/input/joystick" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_ax" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/a" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/button_by" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/b" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + }, + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + }, + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + }, + "pull" : { + "output" : "/actions/godot/in/analog_grip" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + }, + "pull" : { + "output" : "/actions/godot/in/analog_grip" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/grip" + } + ] + } + }, + "category" : "steamvr_input", + "controller_type" : "oculus_touch", + "description" : "Bindings for the Godot OpenVR SDK plugin for the Oculus Touch", + "name" : "Godot bindings for Oculus Touch", + "options" : {}, + "simulated_actions" : [] +} diff --git a/ovr-utils/addons/godot-openvr/actions/bindings_vive_controller.json b/ovr-utils/addons/godot-openvr/actions/bindings_vive_controller.json new file mode 100644 index 0000000..4d454f7 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/actions/bindings_vive_controller.json @@ -0,0 +1,120 @@ +{ + "action_manifest_version" : 0, + "alias_info" : {}, + "bindings" : { + "/actions/godot" : { + "haptics" : [ + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/left/output/haptic" + }, + { + "output" : "/actions/godot/out/haptic", + "path" : "/user/hand/right/output/haptic" + } + ], + "skeleton" : [ + { + "output" : "/actions/godot/in/left_hand", + "path" : "/user/hand/left/input/skeleton/left" + }, + { + "output" : "/actions/godot/in/right_hand", + "path" : "/user/hand/right/input/skeleton/right" + } + ], + "sources" : [ + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/left/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/analog_click" + }, + "position" : { + "output" : "/actions/godot/in/analog" + } + }, + "mode" : "trackpad", + "path" : "/user/hand/right/input/trackpad" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/grip" + } + }, + "mode" : "button", + "path" : "/user/hand/right/input/grip" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + }, + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/left/input/trigger" + }, + { + "inputs" : { + "click" : { + "output" : "/actions/godot/in/trigger" + }, + "pull" : { + "output" : "/actions/godot/in/analog_trigger" + } + }, + "mode" : "trigger", + "path" : "/user/hand/right/input/trigger" + }, + { + "inputs" : { + "value" : { + "output" : "/actions/godot/in/analog_grip" + } + }, + "mode" : "scalar_constant", + "path" : "/user/hand/left/input/grip" + }, + { + "inputs" : { + "value" : { + "output" : "/actions/godot/in/analog_grip" + } + }, + "mode" : "scalar_constant", + "path" : "/user/hand/right/input/grip" + } + ] + } + }, + "category" : "steamvr_input", + "controller_type" : "vive_controller", + "description" : "Bindings for the Godot OpenVR SDK plugin for the Vive controller", + "name" : "Godot bindings for Vive Controller", + "options" : {}, + "simulated_actions" : [] +} diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Headers b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Headers deleted file mode 100644 index a177d2a..0000000 --- a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Headers b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Headers new file mode 120000 index 0000000..a177d2a --- /dev/null +++ b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Headers @@ -0,0 +1 @@ +Versions/Current/Headers \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/OpenVR b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/OpenVR deleted file mode 100644 index 6eef4e3..0000000 --- a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/OpenVR +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/OpenVR \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/OpenVR b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/OpenVR new file mode 120000 index 0000000..6eef4e3 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/OpenVR @@ -0,0 +1 @@ +Versions/Current/OpenVR \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Resources b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Resources deleted file mode 100644 index 953ee36..0000000 --- a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Resources b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Resources new file mode 120000 index 0000000..953ee36 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Resources @@ -0,0 +1 @@ +Versions/Current/Resources \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/A/Headers/openvr_api.json b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/A/Headers/openvr_api.json index 8fa11a6..78f47c3 100644 --- a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/A/Headers/openvr_api.json +++ b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/A/Headers/openvr_api.json @@ -3920,4 +3920,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/A/OpenVR b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/A/OpenVR old mode 100644 new mode 100755 diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/Current b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/Current deleted file mode 100644 index 8c7e5a6..0000000 --- a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/Current b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/Current new file mode 120000 index 0000000..8c7e5a6 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/bin/osx/OpenVR.framework/Versions/Current @@ -0,0 +1 @@ +A \ No newline at end of file diff --git a/ovr-utils/addons/godot-openvr/bin/osx/libgodot_openvr.dylib b/ovr-utils/addons/godot-openvr/bin/osx/libgodot_openvr.dylib old mode 100644 new mode 100755 diff --git a/ovr-utils/addons/godot-openvr/bin/win64/libgodot_openvr.dll b/ovr-utils/addons/godot-openvr/bin/win64/libgodot_openvr.dll index bf631ca..fd9562f 100644 Binary files a/ovr-utils/addons/godot-openvr/bin/win64/libgodot_openvr.dll and b/ovr-utils/addons/godot-openvr/bin/win64/libgodot_openvr.dll differ diff --git a/ovr-utils/addons/godot-openvr/bin/x11/libgodot_openvr.so b/ovr-utils/addons/godot-openvr/bin/x11/libgodot_openvr.so old mode 100644 new mode 100755 index b1c645d..5e5ad31 Binary files a/ovr-utils/addons/godot-openvr/bin/x11/libgodot_openvr.so and b/ovr-utils/addons/godot-openvr/bin/x11/libgodot_openvr.so differ diff --git a/ovr-utils/addons/godot-openvr/meshes/README.md b/ovr-utils/addons/godot-openvr/meshes/README.md new file mode 100644 index 0000000..a609eb7 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/meshes/README.md @@ -0,0 +1,5 @@ +The resources here are taken from: `Steam\steamapps\common\SteamVR\resources\rendermodels\vr_glove\` + +To save space in the repository only the slim models are included while the texture maps have been taken from the full versions. + +See `../scenes/ovr_left_hand.tscn` and `../scenes/ovr_right_hand.tscn` for implementation details diff --git a/ovr-utils/addons/godot-openvr/meshes/blinn1.material b/ovr-utils/addons/godot-openvr/meshes/blinn1.material new file mode 100644 index 0000000..6f0a5b0 Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/blinn1.material differ diff --git a/ovr-utils/addons/godot-openvr/meshes/blinn2.material b/ovr-utils/addons/godot-openvr/meshes/blinn2.material new file mode 100644 index 0000000..e82f4ce Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/blinn2.material differ diff --git a/ovr-utils/addons/godot-openvr/meshes/hands_albedo.png b/ovr-utils/addons/godot-openvr/meshes/hands_albedo.png new file mode 100644 index 0000000..395b83b Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/hands_albedo.png differ diff --git a/ovr-utils/addons/godot-openvr/meshes/hands_albedo.png.import b/ovr-utils/addons/godot-openvr/meshes/hands_albedo.png.import new file mode 100644 index 0000000..ed71632 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/meshes/hands_albedo.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="StreamTexture" +path.s3tc="res://.import/hands_albedo.png-149a10baba7906560a9f9eab8fadf1d8.s3tc.stex" +path.etc2="res://.import/hands_albedo.png-149a10baba7906560a9f9eab8fadf1d8.etc2.stex" +metadata={ +"imported_formats": [ "s3tc", "etc2" ], +"vram_texture": true +} + +[deps] + +source_file="res://addons/godot-openvr/meshes/hands_albedo.png" +dest_files=[ "res://.import/hands_albedo.png-149a10baba7906560a9f9eab8fadf1d8.s3tc.stex", "res://.import/hands_albedo.png-149a10baba7906560a9f9eab8fadf1d8.etc2.stex" ] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=true +flags/filter=true +flags/mipmaps=true +flags/anisotropic=false +flags/srgb=1 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/ovr-utils/addons/godot-openvr/meshes/hands_normal.png b/ovr-utils/addons/godot-openvr/meshes/hands_normal.png new file mode 100644 index 0000000..d708102 Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/hands_normal.png differ diff --git a/ovr-utils/addons/godot-openvr/meshes/hands_normal.png.import b/ovr-utils/addons/godot-openvr/meshes/hands_normal.png.import new file mode 100644 index 0000000..d34f073 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/meshes/hands_normal.png.import @@ -0,0 +1,36 @@ +[remap] + +importer="texture" +type="StreamTexture" +path.s3tc="res://.import/hands_normal.png-eab7a86e959f13e1294e8f67904a8873.s3tc.stex" +path.etc2="res://.import/hands_normal.png-eab7a86e959f13e1294e8f67904a8873.etc2.stex" +metadata={ +"imported_formats": [ "s3tc", "etc2" ], +"vram_texture": true +} + +[deps] + +source_file="res://addons/godot-openvr/meshes/hands_normal.png" +dest_files=[ "res://.import/hands_normal.png-eab7a86e959f13e1294e8f67904a8873.s3tc.stex", "res://.import/hands_normal.png-eab7a86e959f13e1294e8f67904a8873.etc2.stex" ] + +[params] + +compress/mode=2 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=1 +flags/repeat=true +flags/filter=true +flags/mipmaps=true +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/ovr-utils/addons/godot-openvr/meshes/models_hands_vr_glove_vmat.material b/ovr-utils/addons/godot-openvr/meshes/models_hands_vr_glove_vmat.material new file mode 100644 index 0000000..3a870d4 Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/models_hands_vr_glove_vmat.material differ diff --git a/ovr-utils/addons/godot-openvr/meshes/vr_glove_left_model_slim.glb b/ovr-utils/addons/godot-openvr/meshes/vr_glove_left_model_slim.glb new file mode 100644 index 0000000..7214a90 Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/vr_glove_left_model_slim.glb differ diff --git a/ovr-utils/addons/godot-openvr/meshes/vr_glove_left_model_slim.glb.import b/ovr-utils/addons/godot-openvr/meshes/vr_glove_left_model_slim.glb.import new file mode 100644 index 0000000..506e9dd --- /dev/null +++ b/ovr-utils/addons/godot-openvr/meshes/vr_glove_left_model_slim.glb.import @@ -0,0 +1,1063 @@ +[remap] + +importer="scene" +type="PackedScene" +path="res://.import/vr_glove_left_model_slim.glb-8eb4d606fd297e3eb0e89b81fe711f50.scn" + +[deps] + +source_file="res://addons/godot-openvr/meshes/vr_glove_left_model_slim.glb" +dest_files=[ "res://.import/vr_glove_left_model_slim.glb-8eb4d606fd297e3eb0e89b81fe711f50.scn" ] + +[params] + +nodes/root_type="Spatial" +nodes/root_name="Scene Root" +nodes/root_scale=1.0 +nodes/custom_script="" +nodes/storage=0 +materials/location=1 +materials/storage=1 +materials/keep_on_reimport=true +meshes/compress=true +meshes/ensure_tangents=true +meshes/storage=0 +meshes/light_baking=0 +meshes/lightmap_texel_size=0.1 +skins/use_named_skins=true +external_files/store_in_subdir=false +animation/import=true +animation/fps=15 +animation/filter_script="" +animation/storage=false +animation/keep_custom_tracks=false +animation/optimizer/enabled=true +animation/optimizer/max_linear_error=0.05 +animation/optimizer/max_angular_error=0.01 +animation/optimizer/max_angle=22 +animation/optimizer/remove_unused_tracks=true +animation/clips/amount=0 +animation/clip_1/name="" +animation/clip_1/start_frame=0 +animation/clip_1/end_frame=0 +animation/clip_1/loops=false +animation/clip_2/name="" +animation/clip_2/start_frame=0 +animation/clip_2/end_frame=0 +animation/clip_2/loops=false +animation/clip_3/name="" +animation/clip_3/start_frame=0 +animation/clip_3/end_frame=0 +animation/clip_3/loops=false +animation/clip_4/name="" +animation/clip_4/start_frame=0 +animation/clip_4/end_frame=0 +animation/clip_4/loops=false +animation/clip_5/name="" +animation/clip_5/start_frame=0 +animation/clip_5/end_frame=0 +animation/clip_5/loops=false +animation/clip_6/name="" +animation/clip_6/start_frame=0 +animation/clip_6/end_frame=0 +animation/clip_6/loops=false +animation/clip_7/name="" +animation/clip_7/start_frame=0 +animation/clip_7/end_frame=0 +animation/clip_7/loops=false +animation/clip_8/name="" +animation/clip_8/start_frame=0 +animation/clip_8/end_frame=0 +animation/clip_8/loops=false +animation/clip_9/name="" +animation/clip_9/start_frame=0 +animation/clip_9/end_frame=0 +animation/clip_9/loops=false +animation/clip_10/name="" +animation/clip_10/start_frame=0 +animation/clip_10/end_frame=0 +animation/clip_10/loops=false +animation/clip_11/name="" +animation/clip_11/start_frame=0 +animation/clip_11/end_frame=0 +animation/clip_11/loops=false +animation/clip_12/name="" +animation/clip_12/start_frame=0 +animation/clip_12/end_frame=0 +animation/clip_12/loops=false +animation/clip_13/name="" +animation/clip_13/start_frame=0 +animation/clip_13/end_frame=0 +animation/clip_13/loops=false +animation/clip_14/name="" +animation/clip_14/start_frame=0 +animation/clip_14/end_frame=0 +animation/clip_14/loops=false +animation/clip_15/name="" +animation/clip_15/start_frame=0 +animation/clip_15/end_frame=0 +animation/clip_15/loops=false +animation/clip_16/name="" +animation/clip_16/start_frame=0 +animation/clip_16/end_frame=0 +animation/clip_16/loops=false +animation/clip_17/name="" +animation/clip_17/start_frame=0 +animation/clip_17/end_frame=0 +animation/clip_17/loops=false +animation/clip_18/name="" +animation/clip_18/start_frame=0 +animation/clip_18/end_frame=0 +animation/clip_18/loops=false +animation/clip_19/name="" +animation/clip_19/start_frame=0 +animation/clip_19/end_frame=0 +animation/clip_19/loops=false +animation/clip_20/name="" +animation/clip_20/start_frame=0 +animation/clip_20/end_frame=0 +animation/clip_20/loops=false +animation/clip_21/name="" +animation/clip_21/start_frame=0 +animation/clip_21/end_frame=0 +animation/clip_21/loops=false +animation/clip_22/name="" +animation/clip_22/start_frame=0 +animation/clip_22/end_frame=0 +animation/clip_22/loops=false +animation/clip_23/name="" +animation/clip_23/start_frame=0 +animation/clip_23/end_frame=0 +animation/clip_23/loops=false +animation/clip_24/name="" +animation/clip_24/start_frame=0 +animation/clip_24/end_frame=0 +animation/clip_24/loops=false +animation/clip_25/name="" +animation/clip_25/start_frame=0 +animation/clip_25/end_frame=0 +animation/clip_25/loops=false +animation/clip_26/name="" +animation/clip_26/start_frame=0 +animation/clip_26/end_frame=0 +animation/clip_26/loops=false +animation/clip_27/name="" +animation/clip_27/start_frame=0 +animation/clip_27/end_frame=0 +animation/clip_27/loops=false +animation/clip_28/name="" +animation/clip_28/start_frame=0 +animation/clip_28/end_frame=0 +animation/clip_28/loops=false +animation/clip_29/name="" +animation/clip_29/start_frame=0 +animation/clip_29/end_frame=0 +animation/clip_29/loops=false +animation/clip_30/name="" +animation/clip_30/start_frame=0 +animation/clip_30/end_frame=0 +animation/clip_30/loops=false +animation/clip_31/name="" +animation/clip_31/start_frame=0 +animation/clip_31/end_frame=0 +animation/clip_31/loops=false +animation/clip_32/name="" +animation/clip_32/start_frame=0 +animation/clip_32/end_frame=0 +animation/clip_32/loops=false +animation/clip_33/name="" +animation/clip_33/start_frame=0 +animation/clip_33/end_frame=0 +animation/clip_33/loops=false +animation/clip_34/name="" +animation/clip_34/start_frame=0 +animation/clip_34/end_frame=0 +animation/clip_34/loops=false +animation/clip_35/name="" +animation/clip_35/start_frame=0 +animation/clip_35/end_frame=0 +animation/clip_35/loops=false +animation/clip_36/name="" +animation/clip_36/start_frame=0 +animation/clip_36/end_frame=0 +animation/clip_36/loops=false +animation/clip_37/name="" +animation/clip_37/start_frame=0 +animation/clip_37/end_frame=0 +animation/clip_37/loops=false +animation/clip_38/name="" +animation/clip_38/start_frame=0 +animation/clip_38/end_frame=0 +animation/clip_38/loops=false +animation/clip_39/name="" +animation/clip_39/start_frame=0 +animation/clip_39/end_frame=0 +animation/clip_39/loops=false +animation/clip_40/name="" +animation/clip_40/start_frame=0 +animation/clip_40/end_frame=0 +animation/clip_40/loops=false +animation/clip_41/name="" +animation/clip_41/start_frame=0 +animation/clip_41/end_frame=0 +animation/clip_41/loops=false +animation/clip_42/name="" +animation/clip_42/start_frame=0 +animation/clip_42/end_frame=0 +animation/clip_42/loops=false +animation/clip_43/name="" +animation/clip_43/start_frame=0 +animation/clip_43/end_frame=0 +animation/clip_43/loops=false +animation/clip_44/name="" +animation/clip_44/start_frame=0 +animation/clip_44/end_frame=0 +animation/clip_44/loops=false +animation/clip_45/name="" +animation/clip_45/start_frame=0 +animation/clip_45/end_frame=0 +animation/clip_45/loops=false +animation/clip_46/name="" +animation/clip_46/start_frame=0 +animation/clip_46/end_frame=0 +animation/clip_46/loops=false +animation/clip_47/name="" +animation/clip_47/start_frame=0 +animation/clip_47/end_frame=0 +animation/clip_47/loops=false +animation/clip_48/name="" +animation/clip_48/start_frame=0 +animation/clip_48/end_frame=0 +animation/clip_48/loops=false +animation/clip_49/name="" +animation/clip_49/start_frame=0 +animation/clip_49/end_frame=0 +animation/clip_49/loops=false +animation/clip_50/name="" +animation/clip_50/start_frame=0 +animation/clip_50/end_frame=0 +animation/clip_50/loops=false +animation/clip_51/name="" +animation/clip_51/start_frame=0 +animation/clip_51/end_frame=0 +animation/clip_51/loops=false +animation/clip_52/name="" +animation/clip_52/start_frame=0 +animation/clip_52/end_frame=0 +animation/clip_52/loops=false +animation/clip_53/name="" +animation/clip_53/start_frame=0 +animation/clip_53/end_frame=0 +animation/clip_53/loops=false +animation/clip_54/name="" +animation/clip_54/start_frame=0 +animation/clip_54/end_frame=0 +animation/clip_54/loops=false +animation/clip_55/name="" +animation/clip_55/start_frame=0 +animation/clip_55/end_frame=0 +animation/clip_55/loops=false +animation/clip_56/name="" +animation/clip_56/start_frame=0 +animation/clip_56/end_frame=0 +animation/clip_56/loops=false +animation/clip_57/name="" +animation/clip_57/start_frame=0 +animation/clip_57/end_frame=0 +animation/clip_57/loops=false +animation/clip_58/name="" +animation/clip_58/start_frame=0 +animation/clip_58/end_frame=0 +animation/clip_58/loops=false +animation/clip_59/name="" +animation/clip_59/start_frame=0 +animation/clip_59/end_frame=0 +animation/clip_59/loops=false +animation/clip_60/name="" +animation/clip_60/start_frame=0 +animation/clip_60/end_frame=0 +animation/clip_60/loops=false +animation/clip_61/name="" +animation/clip_61/start_frame=0 +animation/clip_61/end_frame=0 +animation/clip_61/loops=false +animation/clip_62/name="" +animation/clip_62/start_frame=0 +animation/clip_62/end_frame=0 +animation/clip_62/loops=false +animation/clip_63/name="" +animation/clip_63/start_frame=0 +animation/clip_63/end_frame=0 +animation/clip_63/loops=false +animation/clip_64/name="" +animation/clip_64/start_frame=0 +animation/clip_64/end_frame=0 +animation/clip_64/loops=false +animation/clip_65/name="" +animation/clip_65/start_frame=0 +animation/clip_65/end_frame=0 +animation/clip_65/loops=false +animation/clip_66/name="" +animation/clip_66/start_frame=0 +animation/clip_66/end_frame=0 +animation/clip_66/loops=false +animation/clip_67/name="" +animation/clip_67/start_frame=0 +animation/clip_67/end_frame=0 +animation/clip_67/loops=false +animation/clip_68/name="" +animation/clip_68/start_frame=0 +animation/clip_68/end_frame=0 +animation/clip_68/loops=false +animation/clip_69/name="" +animation/clip_69/start_frame=0 +animation/clip_69/end_frame=0 +animation/clip_69/loops=false +animation/clip_70/name="" +animation/clip_70/start_frame=0 +animation/clip_70/end_frame=0 +animation/clip_70/loops=false +animation/clip_71/name="" +animation/clip_71/start_frame=0 +animation/clip_71/end_frame=0 +animation/clip_71/loops=false +animation/clip_72/name="" +animation/clip_72/start_frame=0 +animation/clip_72/end_frame=0 +animation/clip_72/loops=false +animation/clip_73/name="" +animation/clip_73/start_frame=0 +animation/clip_73/end_frame=0 +animation/clip_73/loops=false +animation/clip_74/name="" +animation/clip_74/start_frame=0 +animation/clip_74/end_frame=0 +animation/clip_74/loops=false +animation/clip_75/name="" +animation/clip_75/start_frame=0 +animation/clip_75/end_frame=0 +animation/clip_75/loops=false +animation/clip_76/name="" +animation/clip_76/start_frame=0 +animation/clip_76/end_frame=0 +animation/clip_76/loops=false +animation/clip_77/name="" +animation/clip_77/start_frame=0 +animation/clip_77/end_frame=0 +animation/clip_77/loops=false +animation/clip_78/name="" +animation/clip_78/start_frame=0 +animation/clip_78/end_frame=0 +animation/clip_78/loops=false +animation/clip_79/name="" +animation/clip_79/start_frame=0 +animation/clip_79/end_frame=0 +animation/clip_79/loops=false +animation/clip_80/name="" +animation/clip_80/start_frame=0 +animation/clip_80/end_frame=0 +animation/clip_80/loops=false +animation/clip_81/name="" +animation/clip_81/start_frame=0 +animation/clip_81/end_frame=0 +animation/clip_81/loops=false +animation/clip_82/name="" +animation/clip_82/start_frame=0 +animation/clip_82/end_frame=0 +animation/clip_82/loops=false +animation/clip_83/name="" +animation/clip_83/start_frame=0 +animation/clip_83/end_frame=0 +animation/clip_83/loops=false +animation/clip_84/name="" +animation/clip_84/start_frame=0 +animation/clip_84/end_frame=0 +animation/clip_84/loops=false +animation/clip_85/name="" +animation/clip_85/start_frame=0 +animation/clip_85/end_frame=0 +animation/clip_85/loops=false +animation/clip_86/name="" +animation/clip_86/start_frame=0 +animation/clip_86/end_frame=0 +animation/clip_86/loops=false +animation/clip_87/name="" +animation/clip_87/start_frame=0 +animation/clip_87/end_frame=0 +animation/clip_87/loops=false +animation/clip_88/name="" +animation/clip_88/start_frame=0 +animation/clip_88/end_frame=0 +animation/clip_88/loops=false +animation/clip_89/name="" +animation/clip_89/start_frame=0 +animation/clip_89/end_frame=0 +animation/clip_89/loops=false +animation/clip_90/name="" +animation/clip_90/start_frame=0 +animation/clip_90/end_frame=0 +animation/clip_90/loops=false +animation/clip_91/name="" +animation/clip_91/start_frame=0 +animation/clip_91/end_frame=0 +animation/clip_91/loops=false +animation/clip_92/name="" +animation/clip_92/start_frame=0 +animation/clip_92/end_frame=0 +animation/clip_92/loops=false +animation/clip_93/name="" +animation/clip_93/start_frame=0 +animation/clip_93/end_frame=0 +animation/clip_93/loops=false +animation/clip_94/name="" +animation/clip_94/start_frame=0 +animation/clip_94/end_frame=0 +animation/clip_94/loops=false +animation/clip_95/name="" +animation/clip_95/start_frame=0 +animation/clip_95/end_frame=0 +animation/clip_95/loops=false +animation/clip_96/name="" +animation/clip_96/start_frame=0 +animation/clip_96/end_frame=0 +animation/clip_96/loops=false +animation/clip_97/name="" +animation/clip_97/start_frame=0 +animation/clip_97/end_frame=0 +animation/clip_97/loops=false +animation/clip_98/name="" +animation/clip_98/start_frame=0 +animation/clip_98/end_frame=0 +animation/clip_98/loops=false +animation/clip_99/name="" +animation/clip_99/start_frame=0 +animation/clip_99/end_frame=0 +animation/clip_99/loops=false +animation/clip_100/name="" +animation/clip_100/start_frame=0 +animation/clip_100/end_frame=0 +animation/clip_100/loops=false +animation/clip_101/name="" +animation/clip_101/start_frame=0 +animation/clip_101/end_frame=0 +animation/clip_101/loops=false +animation/clip_102/name="" +animation/clip_102/start_frame=0 +animation/clip_102/end_frame=0 +animation/clip_102/loops=false +animation/clip_103/name="" +animation/clip_103/start_frame=0 +animation/clip_103/end_frame=0 +animation/clip_103/loops=false +animation/clip_104/name="" +animation/clip_104/start_frame=0 +animation/clip_104/end_frame=0 +animation/clip_104/loops=false +animation/clip_105/name="" +animation/clip_105/start_frame=0 +animation/clip_105/end_frame=0 +animation/clip_105/loops=false +animation/clip_106/name="" +animation/clip_106/start_frame=0 +animation/clip_106/end_frame=0 +animation/clip_106/loops=false +animation/clip_107/name="" +animation/clip_107/start_frame=0 +animation/clip_107/end_frame=0 +animation/clip_107/loops=false +animation/clip_108/name="" +animation/clip_108/start_frame=0 +animation/clip_108/end_frame=0 +animation/clip_108/loops=false +animation/clip_109/name="" +animation/clip_109/start_frame=0 +animation/clip_109/end_frame=0 +animation/clip_109/loops=false +animation/clip_110/name="" +animation/clip_110/start_frame=0 +animation/clip_110/end_frame=0 +animation/clip_110/loops=false +animation/clip_111/name="" +animation/clip_111/start_frame=0 +animation/clip_111/end_frame=0 +animation/clip_111/loops=false +animation/clip_112/name="" +animation/clip_112/start_frame=0 +animation/clip_112/end_frame=0 +animation/clip_112/loops=false +animation/clip_113/name="" +animation/clip_113/start_frame=0 +animation/clip_113/end_frame=0 +animation/clip_113/loops=false +animation/clip_114/name="" +animation/clip_114/start_frame=0 +animation/clip_114/end_frame=0 +animation/clip_114/loops=false +animation/clip_115/name="" +animation/clip_115/start_frame=0 +animation/clip_115/end_frame=0 +animation/clip_115/loops=false +animation/clip_116/name="" +animation/clip_116/start_frame=0 +animation/clip_116/end_frame=0 +animation/clip_116/loops=false +animation/clip_117/name="" +animation/clip_117/start_frame=0 +animation/clip_117/end_frame=0 +animation/clip_117/loops=false +animation/clip_118/name="" +animation/clip_118/start_frame=0 +animation/clip_118/end_frame=0 +animation/clip_118/loops=false +animation/clip_119/name="" +animation/clip_119/start_frame=0 +animation/clip_119/end_frame=0 +animation/clip_119/loops=false +animation/clip_120/name="" +animation/clip_120/start_frame=0 +animation/clip_120/end_frame=0 +animation/clip_120/loops=false +animation/clip_121/name="" +animation/clip_121/start_frame=0 +animation/clip_121/end_frame=0 +animation/clip_121/loops=false +animation/clip_122/name="" +animation/clip_122/start_frame=0 +animation/clip_122/end_frame=0 +animation/clip_122/loops=false +animation/clip_123/name="" +animation/clip_123/start_frame=0 +animation/clip_123/end_frame=0 +animation/clip_123/loops=false +animation/clip_124/name="" +animation/clip_124/start_frame=0 +animation/clip_124/end_frame=0 +animation/clip_124/loops=false +animation/clip_125/name="" +animation/clip_125/start_frame=0 +animation/clip_125/end_frame=0 +animation/clip_125/loops=false +animation/clip_126/name="" +animation/clip_126/start_frame=0 +animation/clip_126/end_frame=0 +animation/clip_126/loops=false +animation/clip_127/name="" +animation/clip_127/start_frame=0 +animation/clip_127/end_frame=0 +animation/clip_127/loops=false +animation/clip_128/name="" +animation/clip_128/start_frame=0 +animation/clip_128/end_frame=0 +animation/clip_128/loops=false +animation/clip_129/name="" +animation/clip_129/start_frame=0 +animation/clip_129/end_frame=0 +animation/clip_129/loops=false +animation/clip_130/name="" +animation/clip_130/start_frame=0 +animation/clip_130/end_frame=0 +animation/clip_130/loops=false +animation/clip_131/name="" +animation/clip_131/start_frame=0 +animation/clip_131/end_frame=0 +animation/clip_131/loops=false +animation/clip_132/name="" +animation/clip_132/start_frame=0 +animation/clip_132/end_frame=0 +animation/clip_132/loops=false +animation/clip_133/name="" +animation/clip_133/start_frame=0 +animation/clip_133/end_frame=0 +animation/clip_133/loops=false +animation/clip_134/name="" +animation/clip_134/start_frame=0 +animation/clip_134/end_frame=0 +animation/clip_134/loops=false +animation/clip_135/name="" +animation/clip_135/start_frame=0 +animation/clip_135/end_frame=0 +animation/clip_135/loops=false +animation/clip_136/name="" +animation/clip_136/start_frame=0 +animation/clip_136/end_frame=0 +animation/clip_136/loops=false +animation/clip_137/name="" +animation/clip_137/start_frame=0 +animation/clip_137/end_frame=0 +animation/clip_137/loops=false +animation/clip_138/name="" +animation/clip_138/start_frame=0 +animation/clip_138/end_frame=0 +animation/clip_138/loops=false +animation/clip_139/name="" +animation/clip_139/start_frame=0 +animation/clip_139/end_frame=0 +animation/clip_139/loops=false +animation/clip_140/name="" +animation/clip_140/start_frame=0 +animation/clip_140/end_frame=0 +animation/clip_140/loops=false +animation/clip_141/name="" +animation/clip_141/start_frame=0 +animation/clip_141/end_frame=0 +animation/clip_141/loops=false +animation/clip_142/name="" +animation/clip_142/start_frame=0 +animation/clip_142/end_frame=0 +animation/clip_142/loops=false +animation/clip_143/name="" +animation/clip_143/start_frame=0 +animation/clip_143/end_frame=0 +animation/clip_143/loops=false +animation/clip_144/name="" +animation/clip_144/start_frame=0 +animation/clip_144/end_frame=0 +animation/clip_144/loops=false +animation/clip_145/name="" +animation/clip_145/start_frame=0 +animation/clip_145/end_frame=0 +animation/clip_145/loops=false +animation/clip_146/name="" +animation/clip_146/start_frame=0 +animation/clip_146/end_frame=0 +animation/clip_146/loops=false +animation/clip_147/name="" +animation/clip_147/start_frame=0 +animation/clip_147/end_frame=0 +animation/clip_147/loops=false +animation/clip_148/name="" +animation/clip_148/start_frame=0 +animation/clip_148/end_frame=0 +animation/clip_148/loops=false +animation/clip_149/name="" +animation/clip_149/start_frame=0 +animation/clip_149/end_frame=0 +animation/clip_149/loops=false +animation/clip_150/name="" +animation/clip_150/start_frame=0 +animation/clip_150/end_frame=0 +animation/clip_150/loops=false +animation/clip_151/name="" +animation/clip_151/start_frame=0 +animation/clip_151/end_frame=0 +animation/clip_151/loops=false +animation/clip_152/name="" +animation/clip_152/start_frame=0 +animation/clip_152/end_frame=0 +animation/clip_152/loops=false +animation/clip_153/name="" +animation/clip_153/start_frame=0 +animation/clip_153/end_frame=0 +animation/clip_153/loops=false +animation/clip_154/name="" +animation/clip_154/start_frame=0 +animation/clip_154/end_frame=0 +animation/clip_154/loops=false +animation/clip_155/name="" +animation/clip_155/start_frame=0 +animation/clip_155/end_frame=0 +animation/clip_155/loops=false +animation/clip_156/name="" +animation/clip_156/start_frame=0 +animation/clip_156/end_frame=0 +animation/clip_156/loops=false +animation/clip_157/name="" +animation/clip_157/start_frame=0 +animation/clip_157/end_frame=0 +animation/clip_157/loops=false +animation/clip_158/name="" +animation/clip_158/start_frame=0 +animation/clip_158/end_frame=0 +animation/clip_158/loops=false +animation/clip_159/name="" +animation/clip_159/start_frame=0 +animation/clip_159/end_frame=0 +animation/clip_159/loops=false +animation/clip_160/name="" +animation/clip_160/start_frame=0 +animation/clip_160/end_frame=0 +animation/clip_160/loops=false +animation/clip_161/name="" +animation/clip_161/start_frame=0 +animation/clip_161/end_frame=0 +animation/clip_161/loops=false +animation/clip_162/name="" +animation/clip_162/start_frame=0 +animation/clip_162/end_frame=0 +animation/clip_162/loops=false +animation/clip_163/name="" +animation/clip_163/start_frame=0 +animation/clip_163/end_frame=0 +animation/clip_163/loops=false +animation/clip_164/name="" +animation/clip_164/start_frame=0 +animation/clip_164/end_frame=0 +animation/clip_164/loops=false +animation/clip_165/name="" +animation/clip_165/start_frame=0 +animation/clip_165/end_frame=0 +animation/clip_165/loops=false +animation/clip_166/name="" +animation/clip_166/start_frame=0 +animation/clip_166/end_frame=0 +animation/clip_166/loops=false +animation/clip_167/name="" +animation/clip_167/start_frame=0 +animation/clip_167/end_frame=0 +animation/clip_167/loops=false +animation/clip_168/name="" +animation/clip_168/start_frame=0 +animation/clip_168/end_frame=0 +animation/clip_168/loops=false +animation/clip_169/name="" +animation/clip_169/start_frame=0 +animation/clip_169/end_frame=0 +animation/clip_169/loops=false +animation/clip_170/name="" +animation/clip_170/start_frame=0 +animation/clip_170/end_frame=0 +animation/clip_170/loops=false +animation/clip_171/name="" +animation/clip_171/start_frame=0 +animation/clip_171/end_frame=0 +animation/clip_171/loops=false +animation/clip_172/name="" +animation/clip_172/start_frame=0 +animation/clip_172/end_frame=0 +animation/clip_172/loops=false +animation/clip_173/name="" +animation/clip_173/start_frame=0 +animation/clip_173/end_frame=0 +animation/clip_173/loops=false +animation/clip_174/name="" +animation/clip_174/start_frame=0 +animation/clip_174/end_frame=0 +animation/clip_174/loops=false +animation/clip_175/name="" +animation/clip_175/start_frame=0 +animation/clip_175/end_frame=0 +animation/clip_175/loops=false +animation/clip_176/name="" +animation/clip_176/start_frame=0 +animation/clip_176/end_frame=0 +animation/clip_176/loops=false +animation/clip_177/name="" +animation/clip_177/start_frame=0 +animation/clip_177/end_frame=0 +animation/clip_177/loops=false +animation/clip_178/name="" +animation/clip_178/start_frame=0 +animation/clip_178/end_frame=0 +animation/clip_178/loops=false +animation/clip_179/name="" +animation/clip_179/start_frame=0 +animation/clip_179/end_frame=0 +animation/clip_179/loops=false +animation/clip_180/name="" +animation/clip_180/start_frame=0 +animation/clip_180/end_frame=0 +animation/clip_180/loops=false +animation/clip_181/name="" +animation/clip_181/start_frame=0 +animation/clip_181/end_frame=0 +animation/clip_181/loops=false +animation/clip_182/name="" +animation/clip_182/start_frame=0 +animation/clip_182/end_frame=0 +animation/clip_182/loops=false +animation/clip_183/name="" +animation/clip_183/start_frame=0 +animation/clip_183/end_frame=0 +animation/clip_183/loops=false +animation/clip_184/name="" +animation/clip_184/start_frame=0 +animation/clip_184/end_frame=0 +animation/clip_184/loops=false +animation/clip_185/name="" +animation/clip_185/start_frame=0 +animation/clip_185/end_frame=0 +animation/clip_185/loops=false +animation/clip_186/name="" +animation/clip_186/start_frame=0 +animation/clip_186/end_frame=0 +animation/clip_186/loops=false +animation/clip_187/name="" +animation/clip_187/start_frame=0 +animation/clip_187/end_frame=0 +animation/clip_187/loops=false +animation/clip_188/name="" +animation/clip_188/start_frame=0 +animation/clip_188/end_frame=0 +animation/clip_188/loops=false +animation/clip_189/name="" +animation/clip_189/start_frame=0 +animation/clip_189/end_frame=0 +animation/clip_189/loops=false +animation/clip_190/name="" +animation/clip_190/start_frame=0 +animation/clip_190/end_frame=0 +animation/clip_190/loops=false +animation/clip_191/name="" +animation/clip_191/start_frame=0 +animation/clip_191/end_frame=0 +animation/clip_191/loops=false +animation/clip_192/name="" +animation/clip_192/start_frame=0 +animation/clip_192/end_frame=0 +animation/clip_192/loops=false +animation/clip_193/name="" +animation/clip_193/start_frame=0 +animation/clip_193/end_frame=0 +animation/clip_193/loops=false +animation/clip_194/name="" +animation/clip_194/start_frame=0 +animation/clip_194/end_frame=0 +animation/clip_194/loops=false +animation/clip_195/name="" +animation/clip_195/start_frame=0 +animation/clip_195/end_frame=0 +animation/clip_195/loops=false +animation/clip_196/name="" +animation/clip_196/start_frame=0 +animation/clip_196/end_frame=0 +animation/clip_196/loops=false +animation/clip_197/name="" +animation/clip_197/start_frame=0 +animation/clip_197/end_frame=0 +animation/clip_197/loops=false +animation/clip_198/name="" +animation/clip_198/start_frame=0 +animation/clip_198/end_frame=0 +animation/clip_198/loops=false +animation/clip_199/name="" +animation/clip_199/start_frame=0 +animation/clip_199/end_frame=0 +animation/clip_199/loops=false +animation/clip_200/name="" +animation/clip_200/start_frame=0 +animation/clip_200/end_frame=0 +animation/clip_200/loops=false +animation/clip_201/name="" +animation/clip_201/start_frame=0 +animation/clip_201/end_frame=0 +animation/clip_201/loops=false +animation/clip_202/name="" +animation/clip_202/start_frame=0 +animation/clip_202/end_frame=0 +animation/clip_202/loops=false +animation/clip_203/name="" +animation/clip_203/start_frame=0 +animation/clip_203/end_frame=0 +animation/clip_203/loops=false +animation/clip_204/name="" +animation/clip_204/start_frame=0 +animation/clip_204/end_frame=0 +animation/clip_204/loops=false +animation/clip_205/name="" +animation/clip_205/start_frame=0 +animation/clip_205/end_frame=0 +animation/clip_205/loops=false +animation/clip_206/name="" +animation/clip_206/start_frame=0 +animation/clip_206/end_frame=0 +animation/clip_206/loops=false +animation/clip_207/name="" +animation/clip_207/start_frame=0 +animation/clip_207/end_frame=0 +animation/clip_207/loops=false +animation/clip_208/name="" +animation/clip_208/start_frame=0 +animation/clip_208/end_frame=0 +animation/clip_208/loops=false +animation/clip_209/name="" +animation/clip_209/start_frame=0 +animation/clip_209/end_frame=0 +animation/clip_209/loops=false +animation/clip_210/name="" +animation/clip_210/start_frame=0 +animation/clip_210/end_frame=0 +animation/clip_210/loops=false +animation/clip_211/name="" +animation/clip_211/start_frame=0 +animation/clip_211/end_frame=0 +animation/clip_211/loops=false +animation/clip_212/name="" +animation/clip_212/start_frame=0 +animation/clip_212/end_frame=0 +animation/clip_212/loops=false +animation/clip_213/name="" +animation/clip_213/start_frame=0 +animation/clip_213/end_frame=0 +animation/clip_213/loops=false +animation/clip_214/name="" +animation/clip_214/start_frame=0 +animation/clip_214/end_frame=0 +animation/clip_214/loops=false +animation/clip_215/name="" +animation/clip_215/start_frame=0 +animation/clip_215/end_frame=0 +animation/clip_215/loops=false +animation/clip_216/name="" +animation/clip_216/start_frame=0 +animation/clip_216/end_frame=0 +animation/clip_216/loops=false +animation/clip_217/name="" +animation/clip_217/start_frame=0 +animation/clip_217/end_frame=0 +animation/clip_217/loops=false +animation/clip_218/name="" +animation/clip_218/start_frame=0 +animation/clip_218/end_frame=0 +animation/clip_218/loops=false +animation/clip_219/name="" +animation/clip_219/start_frame=0 +animation/clip_219/end_frame=0 +animation/clip_219/loops=false +animation/clip_220/name="" +animation/clip_220/start_frame=0 +animation/clip_220/end_frame=0 +animation/clip_220/loops=false +animation/clip_221/name="" +animation/clip_221/start_frame=0 +animation/clip_221/end_frame=0 +animation/clip_221/loops=false +animation/clip_222/name="" +animation/clip_222/start_frame=0 +animation/clip_222/end_frame=0 +animation/clip_222/loops=false +animation/clip_223/name="" +animation/clip_223/start_frame=0 +animation/clip_223/end_frame=0 +animation/clip_223/loops=false +animation/clip_224/name="" +animation/clip_224/start_frame=0 +animation/clip_224/end_frame=0 +animation/clip_224/loops=false +animation/clip_225/name="" +animation/clip_225/start_frame=0 +animation/clip_225/end_frame=0 +animation/clip_225/loops=false +animation/clip_226/name="" +animation/clip_226/start_frame=0 +animation/clip_226/end_frame=0 +animation/clip_226/loops=false +animation/clip_227/name="" +animation/clip_227/start_frame=0 +animation/clip_227/end_frame=0 +animation/clip_227/loops=false +animation/clip_228/name="" +animation/clip_228/start_frame=0 +animation/clip_228/end_frame=0 +animation/clip_228/loops=false +animation/clip_229/name="" +animation/clip_229/start_frame=0 +animation/clip_229/end_frame=0 +animation/clip_229/loops=false +animation/clip_230/name="" +animation/clip_230/start_frame=0 +animation/clip_230/end_frame=0 +animation/clip_230/loops=false +animation/clip_231/name="" +animation/clip_231/start_frame=0 +animation/clip_231/end_frame=0 +animation/clip_231/loops=false +animation/clip_232/name="" +animation/clip_232/start_frame=0 +animation/clip_232/end_frame=0 +animation/clip_232/loops=false +animation/clip_233/name="" +animation/clip_233/start_frame=0 +animation/clip_233/end_frame=0 +animation/clip_233/loops=false +animation/clip_234/name="" +animation/clip_234/start_frame=0 +animation/clip_234/end_frame=0 +animation/clip_234/loops=false +animation/clip_235/name="" +animation/clip_235/start_frame=0 +animation/clip_235/end_frame=0 +animation/clip_235/loops=false +animation/clip_236/name="" +animation/clip_236/start_frame=0 +animation/clip_236/end_frame=0 +animation/clip_236/loops=false +animation/clip_237/name="" +animation/clip_237/start_frame=0 +animation/clip_237/end_frame=0 +animation/clip_237/loops=false +animation/clip_238/name="" +animation/clip_238/start_frame=0 +animation/clip_238/end_frame=0 +animation/clip_238/loops=false +animation/clip_239/name="" +animation/clip_239/start_frame=0 +animation/clip_239/end_frame=0 +animation/clip_239/loops=false +animation/clip_240/name="" +animation/clip_240/start_frame=0 +animation/clip_240/end_frame=0 +animation/clip_240/loops=false +animation/clip_241/name="" +animation/clip_241/start_frame=0 +animation/clip_241/end_frame=0 +animation/clip_241/loops=false +animation/clip_242/name="" +animation/clip_242/start_frame=0 +animation/clip_242/end_frame=0 +animation/clip_242/loops=false +animation/clip_243/name="" +animation/clip_243/start_frame=0 +animation/clip_243/end_frame=0 +animation/clip_243/loops=false +animation/clip_244/name="" +animation/clip_244/start_frame=0 +animation/clip_244/end_frame=0 +animation/clip_244/loops=false +animation/clip_245/name="" +animation/clip_245/start_frame=0 +animation/clip_245/end_frame=0 +animation/clip_245/loops=false +animation/clip_246/name="" +animation/clip_246/start_frame=0 +animation/clip_246/end_frame=0 +animation/clip_246/loops=false +animation/clip_247/name="" +animation/clip_247/start_frame=0 +animation/clip_247/end_frame=0 +animation/clip_247/loops=false +animation/clip_248/name="" +animation/clip_248/start_frame=0 +animation/clip_248/end_frame=0 +animation/clip_248/loops=false +animation/clip_249/name="" +animation/clip_249/start_frame=0 +animation/clip_249/end_frame=0 +animation/clip_249/loops=false +animation/clip_250/name="" +animation/clip_250/start_frame=0 +animation/clip_250/end_frame=0 +animation/clip_250/loops=false +animation/clip_251/name="" +animation/clip_251/start_frame=0 +animation/clip_251/end_frame=0 +animation/clip_251/loops=false +animation/clip_252/name="" +animation/clip_252/start_frame=0 +animation/clip_252/end_frame=0 +animation/clip_252/loops=false +animation/clip_253/name="" +animation/clip_253/start_frame=0 +animation/clip_253/end_frame=0 +animation/clip_253/loops=false +animation/clip_254/name="" +animation/clip_254/start_frame=0 +animation/clip_254/end_frame=0 +animation/clip_254/loops=false +animation/clip_255/name="" +animation/clip_255/start_frame=0 +animation/clip_255/end_frame=0 +animation/clip_255/loops=false +animation/clip_256/name="" +animation/clip_256/start_frame=0 +animation/clip_256/end_frame=0 +animation/clip_256/loops=false diff --git a/ovr-utils/addons/godot-openvr/meshes/vr_glove_right_model_slim.glb b/ovr-utils/addons/godot-openvr/meshes/vr_glove_right_model_slim.glb new file mode 100644 index 0000000..f58ebc3 Binary files /dev/null and b/ovr-utils/addons/godot-openvr/meshes/vr_glove_right_model_slim.glb differ diff --git a/ovr-utils/addons/godot-openvr/meshes/vr_glove_right_model_slim.glb.import b/ovr-utils/addons/godot-openvr/meshes/vr_glove_right_model_slim.glb.import new file mode 100644 index 0000000..41c0172 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/meshes/vr_glove_right_model_slim.glb.import @@ -0,0 +1,1063 @@ +[remap] + +importer="scene" +type="PackedScene" +path="res://.import/vr_glove_right_model_slim.glb-c6782795f1fc3235de97a5f6c8ba1231.scn" + +[deps] + +source_file="res://addons/godot-openvr/meshes/vr_glove_right_model_slim.glb" +dest_files=[ "res://.import/vr_glove_right_model_slim.glb-c6782795f1fc3235de97a5f6c8ba1231.scn" ] + +[params] + +nodes/root_type="Spatial" +nodes/root_name="Scene Root" +nodes/root_scale=1.0 +nodes/custom_script="" +nodes/storage=0 +materials/location=1 +materials/storage=1 +materials/keep_on_reimport=true +meshes/compress=true +meshes/ensure_tangents=true +meshes/storage=0 +meshes/light_baking=0 +meshes/lightmap_texel_size=0.1 +skins/use_named_skins=true +external_files/store_in_subdir=false +animation/import=true +animation/fps=15 +animation/filter_script="" +animation/storage=false +animation/keep_custom_tracks=false +animation/optimizer/enabled=true +animation/optimizer/max_linear_error=0.05 +animation/optimizer/max_angular_error=0.01 +animation/optimizer/max_angle=22 +animation/optimizer/remove_unused_tracks=true +animation/clips/amount=0 +animation/clip_1/name="" +animation/clip_1/start_frame=0 +animation/clip_1/end_frame=0 +animation/clip_1/loops=false +animation/clip_2/name="" +animation/clip_2/start_frame=0 +animation/clip_2/end_frame=0 +animation/clip_2/loops=false +animation/clip_3/name="" +animation/clip_3/start_frame=0 +animation/clip_3/end_frame=0 +animation/clip_3/loops=false +animation/clip_4/name="" +animation/clip_4/start_frame=0 +animation/clip_4/end_frame=0 +animation/clip_4/loops=false +animation/clip_5/name="" +animation/clip_5/start_frame=0 +animation/clip_5/end_frame=0 +animation/clip_5/loops=false +animation/clip_6/name="" +animation/clip_6/start_frame=0 +animation/clip_6/end_frame=0 +animation/clip_6/loops=false +animation/clip_7/name="" +animation/clip_7/start_frame=0 +animation/clip_7/end_frame=0 +animation/clip_7/loops=false +animation/clip_8/name="" +animation/clip_8/start_frame=0 +animation/clip_8/end_frame=0 +animation/clip_8/loops=false +animation/clip_9/name="" +animation/clip_9/start_frame=0 +animation/clip_9/end_frame=0 +animation/clip_9/loops=false +animation/clip_10/name="" +animation/clip_10/start_frame=0 +animation/clip_10/end_frame=0 +animation/clip_10/loops=false +animation/clip_11/name="" +animation/clip_11/start_frame=0 +animation/clip_11/end_frame=0 +animation/clip_11/loops=false +animation/clip_12/name="" +animation/clip_12/start_frame=0 +animation/clip_12/end_frame=0 +animation/clip_12/loops=false +animation/clip_13/name="" +animation/clip_13/start_frame=0 +animation/clip_13/end_frame=0 +animation/clip_13/loops=false +animation/clip_14/name="" +animation/clip_14/start_frame=0 +animation/clip_14/end_frame=0 +animation/clip_14/loops=false +animation/clip_15/name="" +animation/clip_15/start_frame=0 +animation/clip_15/end_frame=0 +animation/clip_15/loops=false +animation/clip_16/name="" +animation/clip_16/start_frame=0 +animation/clip_16/end_frame=0 +animation/clip_16/loops=false +animation/clip_17/name="" +animation/clip_17/start_frame=0 +animation/clip_17/end_frame=0 +animation/clip_17/loops=false +animation/clip_18/name="" +animation/clip_18/start_frame=0 +animation/clip_18/end_frame=0 +animation/clip_18/loops=false +animation/clip_19/name="" +animation/clip_19/start_frame=0 +animation/clip_19/end_frame=0 +animation/clip_19/loops=false +animation/clip_20/name="" +animation/clip_20/start_frame=0 +animation/clip_20/end_frame=0 +animation/clip_20/loops=false +animation/clip_21/name="" +animation/clip_21/start_frame=0 +animation/clip_21/end_frame=0 +animation/clip_21/loops=false +animation/clip_22/name="" +animation/clip_22/start_frame=0 +animation/clip_22/end_frame=0 +animation/clip_22/loops=false +animation/clip_23/name="" +animation/clip_23/start_frame=0 +animation/clip_23/end_frame=0 +animation/clip_23/loops=false +animation/clip_24/name="" +animation/clip_24/start_frame=0 +animation/clip_24/end_frame=0 +animation/clip_24/loops=false +animation/clip_25/name="" +animation/clip_25/start_frame=0 +animation/clip_25/end_frame=0 +animation/clip_25/loops=false +animation/clip_26/name="" +animation/clip_26/start_frame=0 +animation/clip_26/end_frame=0 +animation/clip_26/loops=false +animation/clip_27/name="" +animation/clip_27/start_frame=0 +animation/clip_27/end_frame=0 +animation/clip_27/loops=false +animation/clip_28/name="" +animation/clip_28/start_frame=0 +animation/clip_28/end_frame=0 +animation/clip_28/loops=false +animation/clip_29/name="" +animation/clip_29/start_frame=0 +animation/clip_29/end_frame=0 +animation/clip_29/loops=false +animation/clip_30/name="" +animation/clip_30/start_frame=0 +animation/clip_30/end_frame=0 +animation/clip_30/loops=false +animation/clip_31/name="" +animation/clip_31/start_frame=0 +animation/clip_31/end_frame=0 +animation/clip_31/loops=false +animation/clip_32/name="" +animation/clip_32/start_frame=0 +animation/clip_32/end_frame=0 +animation/clip_32/loops=false +animation/clip_33/name="" +animation/clip_33/start_frame=0 +animation/clip_33/end_frame=0 +animation/clip_33/loops=false +animation/clip_34/name="" +animation/clip_34/start_frame=0 +animation/clip_34/end_frame=0 +animation/clip_34/loops=false +animation/clip_35/name="" +animation/clip_35/start_frame=0 +animation/clip_35/end_frame=0 +animation/clip_35/loops=false +animation/clip_36/name="" +animation/clip_36/start_frame=0 +animation/clip_36/end_frame=0 +animation/clip_36/loops=false +animation/clip_37/name="" +animation/clip_37/start_frame=0 +animation/clip_37/end_frame=0 +animation/clip_37/loops=false +animation/clip_38/name="" +animation/clip_38/start_frame=0 +animation/clip_38/end_frame=0 +animation/clip_38/loops=false +animation/clip_39/name="" +animation/clip_39/start_frame=0 +animation/clip_39/end_frame=0 +animation/clip_39/loops=false +animation/clip_40/name="" +animation/clip_40/start_frame=0 +animation/clip_40/end_frame=0 +animation/clip_40/loops=false +animation/clip_41/name="" +animation/clip_41/start_frame=0 +animation/clip_41/end_frame=0 +animation/clip_41/loops=false +animation/clip_42/name="" +animation/clip_42/start_frame=0 +animation/clip_42/end_frame=0 +animation/clip_42/loops=false +animation/clip_43/name="" +animation/clip_43/start_frame=0 +animation/clip_43/end_frame=0 +animation/clip_43/loops=false +animation/clip_44/name="" +animation/clip_44/start_frame=0 +animation/clip_44/end_frame=0 +animation/clip_44/loops=false +animation/clip_45/name="" +animation/clip_45/start_frame=0 +animation/clip_45/end_frame=0 +animation/clip_45/loops=false +animation/clip_46/name="" +animation/clip_46/start_frame=0 +animation/clip_46/end_frame=0 +animation/clip_46/loops=false +animation/clip_47/name="" +animation/clip_47/start_frame=0 +animation/clip_47/end_frame=0 +animation/clip_47/loops=false +animation/clip_48/name="" +animation/clip_48/start_frame=0 +animation/clip_48/end_frame=0 +animation/clip_48/loops=false +animation/clip_49/name="" +animation/clip_49/start_frame=0 +animation/clip_49/end_frame=0 +animation/clip_49/loops=false +animation/clip_50/name="" +animation/clip_50/start_frame=0 +animation/clip_50/end_frame=0 +animation/clip_50/loops=false +animation/clip_51/name="" +animation/clip_51/start_frame=0 +animation/clip_51/end_frame=0 +animation/clip_51/loops=false +animation/clip_52/name="" +animation/clip_52/start_frame=0 +animation/clip_52/end_frame=0 +animation/clip_52/loops=false +animation/clip_53/name="" +animation/clip_53/start_frame=0 +animation/clip_53/end_frame=0 +animation/clip_53/loops=false +animation/clip_54/name="" +animation/clip_54/start_frame=0 +animation/clip_54/end_frame=0 +animation/clip_54/loops=false +animation/clip_55/name="" +animation/clip_55/start_frame=0 +animation/clip_55/end_frame=0 +animation/clip_55/loops=false +animation/clip_56/name="" +animation/clip_56/start_frame=0 +animation/clip_56/end_frame=0 +animation/clip_56/loops=false +animation/clip_57/name="" +animation/clip_57/start_frame=0 +animation/clip_57/end_frame=0 +animation/clip_57/loops=false +animation/clip_58/name="" +animation/clip_58/start_frame=0 +animation/clip_58/end_frame=0 +animation/clip_58/loops=false +animation/clip_59/name="" +animation/clip_59/start_frame=0 +animation/clip_59/end_frame=0 +animation/clip_59/loops=false +animation/clip_60/name="" +animation/clip_60/start_frame=0 +animation/clip_60/end_frame=0 +animation/clip_60/loops=false +animation/clip_61/name="" +animation/clip_61/start_frame=0 +animation/clip_61/end_frame=0 +animation/clip_61/loops=false +animation/clip_62/name="" +animation/clip_62/start_frame=0 +animation/clip_62/end_frame=0 +animation/clip_62/loops=false +animation/clip_63/name="" +animation/clip_63/start_frame=0 +animation/clip_63/end_frame=0 +animation/clip_63/loops=false +animation/clip_64/name="" +animation/clip_64/start_frame=0 +animation/clip_64/end_frame=0 +animation/clip_64/loops=false +animation/clip_65/name="" +animation/clip_65/start_frame=0 +animation/clip_65/end_frame=0 +animation/clip_65/loops=false +animation/clip_66/name="" +animation/clip_66/start_frame=0 +animation/clip_66/end_frame=0 +animation/clip_66/loops=false +animation/clip_67/name="" +animation/clip_67/start_frame=0 +animation/clip_67/end_frame=0 +animation/clip_67/loops=false +animation/clip_68/name="" +animation/clip_68/start_frame=0 +animation/clip_68/end_frame=0 +animation/clip_68/loops=false +animation/clip_69/name="" +animation/clip_69/start_frame=0 +animation/clip_69/end_frame=0 +animation/clip_69/loops=false +animation/clip_70/name="" +animation/clip_70/start_frame=0 +animation/clip_70/end_frame=0 +animation/clip_70/loops=false +animation/clip_71/name="" +animation/clip_71/start_frame=0 +animation/clip_71/end_frame=0 +animation/clip_71/loops=false +animation/clip_72/name="" +animation/clip_72/start_frame=0 +animation/clip_72/end_frame=0 +animation/clip_72/loops=false +animation/clip_73/name="" +animation/clip_73/start_frame=0 +animation/clip_73/end_frame=0 +animation/clip_73/loops=false +animation/clip_74/name="" +animation/clip_74/start_frame=0 +animation/clip_74/end_frame=0 +animation/clip_74/loops=false +animation/clip_75/name="" +animation/clip_75/start_frame=0 +animation/clip_75/end_frame=0 +animation/clip_75/loops=false +animation/clip_76/name="" +animation/clip_76/start_frame=0 +animation/clip_76/end_frame=0 +animation/clip_76/loops=false +animation/clip_77/name="" +animation/clip_77/start_frame=0 +animation/clip_77/end_frame=0 +animation/clip_77/loops=false +animation/clip_78/name="" +animation/clip_78/start_frame=0 +animation/clip_78/end_frame=0 +animation/clip_78/loops=false +animation/clip_79/name="" +animation/clip_79/start_frame=0 +animation/clip_79/end_frame=0 +animation/clip_79/loops=false +animation/clip_80/name="" +animation/clip_80/start_frame=0 +animation/clip_80/end_frame=0 +animation/clip_80/loops=false +animation/clip_81/name="" +animation/clip_81/start_frame=0 +animation/clip_81/end_frame=0 +animation/clip_81/loops=false +animation/clip_82/name="" +animation/clip_82/start_frame=0 +animation/clip_82/end_frame=0 +animation/clip_82/loops=false +animation/clip_83/name="" +animation/clip_83/start_frame=0 +animation/clip_83/end_frame=0 +animation/clip_83/loops=false +animation/clip_84/name="" +animation/clip_84/start_frame=0 +animation/clip_84/end_frame=0 +animation/clip_84/loops=false +animation/clip_85/name="" +animation/clip_85/start_frame=0 +animation/clip_85/end_frame=0 +animation/clip_85/loops=false +animation/clip_86/name="" +animation/clip_86/start_frame=0 +animation/clip_86/end_frame=0 +animation/clip_86/loops=false +animation/clip_87/name="" +animation/clip_87/start_frame=0 +animation/clip_87/end_frame=0 +animation/clip_87/loops=false +animation/clip_88/name="" +animation/clip_88/start_frame=0 +animation/clip_88/end_frame=0 +animation/clip_88/loops=false +animation/clip_89/name="" +animation/clip_89/start_frame=0 +animation/clip_89/end_frame=0 +animation/clip_89/loops=false +animation/clip_90/name="" +animation/clip_90/start_frame=0 +animation/clip_90/end_frame=0 +animation/clip_90/loops=false +animation/clip_91/name="" +animation/clip_91/start_frame=0 +animation/clip_91/end_frame=0 +animation/clip_91/loops=false +animation/clip_92/name="" +animation/clip_92/start_frame=0 +animation/clip_92/end_frame=0 +animation/clip_92/loops=false +animation/clip_93/name="" +animation/clip_93/start_frame=0 +animation/clip_93/end_frame=0 +animation/clip_93/loops=false +animation/clip_94/name="" +animation/clip_94/start_frame=0 +animation/clip_94/end_frame=0 +animation/clip_94/loops=false +animation/clip_95/name="" +animation/clip_95/start_frame=0 +animation/clip_95/end_frame=0 +animation/clip_95/loops=false +animation/clip_96/name="" +animation/clip_96/start_frame=0 +animation/clip_96/end_frame=0 +animation/clip_96/loops=false +animation/clip_97/name="" +animation/clip_97/start_frame=0 +animation/clip_97/end_frame=0 +animation/clip_97/loops=false +animation/clip_98/name="" +animation/clip_98/start_frame=0 +animation/clip_98/end_frame=0 +animation/clip_98/loops=false +animation/clip_99/name="" +animation/clip_99/start_frame=0 +animation/clip_99/end_frame=0 +animation/clip_99/loops=false +animation/clip_100/name="" +animation/clip_100/start_frame=0 +animation/clip_100/end_frame=0 +animation/clip_100/loops=false +animation/clip_101/name="" +animation/clip_101/start_frame=0 +animation/clip_101/end_frame=0 +animation/clip_101/loops=false +animation/clip_102/name="" +animation/clip_102/start_frame=0 +animation/clip_102/end_frame=0 +animation/clip_102/loops=false +animation/clip_103/name="" +animation/clip_103/start_frame=0 +animation/clip_103/end_frame=0 +animation/clip_103/loops=false +animation/clip_104/name="" +animation/clip_104/start_frame=0 +animation/clip_104/end_frame=0 +animation/clip_104/loops=false +animation/clip_105/name="" +animation/clip_105/start_frame=0 +animation/clip_105/end_frame=0 +animation/clip_105/loops=false +animation/clip_106/name="" +animation/clip_106/start_frame=0 +animation/clip_106/end_frame=0 +animation/clip_106/loops=false +animation/clip_107/name="" +animation/clip_107/start_frame=0 +animation/clip_107/end_frame=0 +animation/clip_107/loops=false +animation/clip_108/name="" +animation/clip_108/start_frame=0 +animation/clip_108/end_frame=0 +animation/clip_108/loops=false +animation/clip_109/name="" +animation/clip_109/start_frame=0 +animation/clip_109/end_frame=0 +animation/clip_109/loops=false +animation/clip_110/name="" +animation/clip_110/start_frame=0 +animation/clip_110/end_frame=0 +animation/clip_110/loops=false +animation/clip_111/name="" +animation/clip_111/start_frame=0 +animation/clip_111/end_frame=0 +animation/clip_111/loops=false +animation/clip_112/name="" +animation/clip_112/start_frame=0 +animation/clip_112/end_frame=0 +animation/clip_112/loops=false +animation/clip_113/name="" +animation/clip_113/start_frame=0 +animation/clip_113/end_frame=0 +animation/clip_113/loops=false +animation/clip_114/name="" +animation/clip_114/start_frame=0 +animation/clip_114/end_frame=0 +animation/clip_114/loops=false +animation/clip_115/name="" +animation/clip_115/start_frame=0 +animation/clip_115/end_frame=0 +animation/clip_115/loops=false +animation/clip_116/name="" +animation/clip_116/start_frame=0 +animation/clip_116/end_frame=0 +animation/clip_116/loops=false +animation/clip_117/name="" +animation/clip_117/start_frame=0 +animation/clip_117/end_frame=0 +animation/clip_117/loops=false +animation/clip_118/name="" +animation/clip_118/start_frame=0 +animation/clip_118/end_frame=0 +animation/clip_118/loops=false +animation/clip_119/name="" +animation/clip_119/start_frame=0 +animation/clip_119/end_frame=0 +animation/clip_119/loops=false +animation/clip_120/name="" +animation/clip_120/start_frame=0 +animation/clip_120/end_frame=0 +animation/clip_120/loops=false +animation/clip_121/name="" +animation/clip_121/start_frame=0 +animation/clip_121/end_frame=0 +animation/clip_121/loops=false +animation/clip_122/name="" +animation/clip_122/start_frame=0 +animation/clip_122/end_frame=0 +animation/clip_122/loops=false +animation/clip_123/name="" +animation/clip_123/start_frame=0 +animation/clip_123/end_frame=0 +animation/clip_123/loops=false +animation/clip_124/name="" +animation/clip_124/start_frame=0 +animation/clip_124/end_frame=0 +animation/clip_124/loops=false +animation/clip_125/name="" +animation/clip_125/start_frame=0 +animation/clip_125/end_frame=0 +animation/clip_125/loops=false +animation/clip_126/name="" +animation/clip_126/start_frame=0 +animation/clip_126/end_frame=0 +animation/clip_126/loops=false +animation/clip_127/name="" +animation/clip_127/start_frame=0 +animation/clip_127/end_frame=0 +animation/clip_127/loops=false +animation/clip_128/name="" +animation/clip_128/start_frame=0 +animation/clip_128/end_frame=0 +animation/clip_128/loops=false +animation/clip_129/name="" +animation/clip_129/start_frame=0 +animation/clip_129/end_frame=0 +animation/clip_129/loops=false +animation/clip_130/name="" +animation/clip_130/start_frame=0 +animation/clip_130/end_frame=0 +animation/clip_130/loops=false +animation/clip_131/name="" +animation/clip_131/start_frame=0 +animation/clip_131/end_frame=0 +animation/clip_131/loops=false +animation/clip_132/name="" +animation/clip_132/start_frame=0 +animation/clip_132/end_frame=0 +animation/clip_132/loops=false +animation/clip_133/name="" +animation/clip_133/start_frame=0 +animation/clip_133/end_frame=0 +animation/clip_133/loops=false +animation/clip_134/name="" +animation/clip_134/start_frame=0 +animation/clip_134/end_frame=0 +animation/clip_134/loops=false +animation/clip_135/name="" +animation/clip_135/start_frame=0 +animation/clip_135/end_frame=0 +animation/clip_135/loops=false +animation/clip_136/name="" +animation/clip_136/start_frame=0 +animation/clip_136/end_frame=0 +animation/clip_136/loops=false +animation/clip_137/name="" +animation/clip_137/start_frame=0 +animation/clip_137/end_frame=0 +animation/clip_137/loops=false +animation/clip_138/name="" +animation/clip_138/start_frame=0 +animation/clip_138/end_frame=0 +animation/clip_138/loops=false +animation/clip_139/name="" +animation/clip_139/start_frame=0 +animation/clip_139/end_frame=0 +animation/clip_139/loops=false +animation/clip_140/name="" +animation/clip_140/start_frame=0 +animation/clip_140/end_frame=0 +animation/clip_140/loops=false +animation/clip_141/name="" +animation/clip_141/start_frame=0 +animation/clip_141/end_frame=0 +animation/clip_141/loops=false +animation/clip_142/name="" +animation/clip_142/start_frame=0 +animation/clip_142/end_frame=0 +animation/clip_142/loops=false +animation/clip_143/name="" +animation/clip_143/start_frame=0 +animation/clip_143/end_frame=0 +animation/clip_143/loops=false +animation/clip_144/name="" +animation/clip_144/start_frame=0 +animation/clip_144/end_frame=0 +animation/clip_144/loops=false +animation/clip_145/name="" +animation/clip_145/start_frame=0 +animation/clip_145/end_frame=0 +animation/clip_145/loops=false +animation/clip_146/name="" +animation/clip_146/start_frame=0 +animation/clip_146/end_frame=0 +animation/clip_146/loops=false +animation/clip_147/name="" +animation/clip_147/start_frame=0 +animation/clip_147/end_frame=0 +animation/clip_147/loops=false +animation/clip_148/name="" +animation/clip_148/start_frame=0 +animation/clip_148/end_frame=0 +animation/clip_148/loops=false +animation/clip_149/name="" +animation/clip_149/start_frame=0 +animation/clip_149/end_frame=0 +animation/clip_149/loops=false +animation/clip_150/name="" +animation/clip_150/start_frame=0 +animation/clip_150/end_frame=0 +animation/clip_150/loops=false +animation/clip_151/name="" +animation/clip_151/start_frame=0 +animation/clip_151/end_frame=0 +animation/clip_151/loops=false +animation/clip_152/name="" +animation/clip_152/start_frame=0 +animation/clip_152/end_frame=0 +animation/clip_152/loops=false +animation/clip_153/name="" +animation/clip_153/start_frame=0 +animation/clip_153/end_frame=0 +animation/clip_153/loops=false +animation/clip_154/name="" +animation/clip_154/start_frame=0 +animation/clip_154/end_frame=0 +animation/clip_154/loops=false +animation/clip_155/name="" +animation/clip_155/start_frame=0 +animation/clip_155/end_frame=0 +animation/clip_155/loops=false +animation/clip_156/name="" +animation/clip_156/start_frame=0 +animation/clip_156/end_frame=0 +animation/clip_156/loops=false +animation/clip_157/name="" +animation/clip_157/start_frame=0 +animation/clip_157/end_frame=0 +animation/clip_157/loops=false +animation/clip_158/name="" +animation/clip_158/start_frame=0 +animation/clip_158/end_frame=0 +animation/clip_158/loops=false +animation/clip_159/name="" +animation/clip_159/start_frame=0 +animation/clip_159/end_frame=0 +animation/clip_159/loops=false +animation/clip_160/name="" +animation/clip_160/start_frame=0 +animation/clip_160/end_frame=0 +animation/clip_160/loops=false +animation/clip_161/name="" +animation/clip_161/start_frame=0 +animation/clip_161/end_frame=0 +animation/clip_161/loops=false +animation/clip_162/name="" +animation/clip_162/start_frame=0 +animation/clip_162/end_frame=0 +animation/clip_162/loops=false +animation/clip_163/name="" +animation/clip_163/start_frame=0 +animation/clip_163/end_frame=0 +animation/clip_163/loops=false +animation/clip_164/name="" +animation/clip_164/start_frame=0 +animation/clip_164/end_frame=0 +animation/clip_164/loops=false +animation/clip_165/name="" +animation/clip_165/start_frame=0 +animation/clip_165/end_frame=0 +animation/clip_165/loops=false +animation/clip_166/name="" +animation/clip_166/start_frame=0 +animation/clip_166/end_frame=0 +animation/clip_166/loops=false +animation/clip_167/name="" +animation/clip_167/start_frame=0 +animation/clip_167/end_frame=0 +animation/clip_167/loops=false +animation/clip_168/name="" +animation/clip_168/start_frame=0 +animation/clip_168/end_frame=0 +animation/clip_168/loops=false +animation/clip_169/name="" +animation/clip_169/start_frame=0 +animation/clip_169/end_frame=0 +animation/clip_169/loops=false +animation/clip_170/name="" +animation/clip_170/start_frame=0 +animation/clip_170/end_frame=0 +animation/clip_170/loops=false +animation/clip_171/name="" +animation/clip_171/start_frame=0 +animation/clip_171/end_frame=0 +animation/clip_171/loops=false +animation/clip_172/name="" +animation/clip_172/start_frame=0 +animation/clip_172/end_frame=0 +animation/clip_172/loops=false +animation/clip_173/name="" +animation/clip_173/start_frame=0 +animation/clip_173/end_frame=0 +animation/clip_173/loops=false +animation/clip_174/name="" +animation/clip_174/start_frame=0 +animation/clip_174/end_frame=0 +animation/clip_174/loops=false +animation/clip_175/name="" +animation/clip_175/start_frame=0 +animation/clip_175/end_frame=0 +animation/clip_175/loops=false +animation/clip_176/name="" +animation/clip_176/start_frame=0 +animation/clip_176/end_frame=0 +animation/clip_176/loops=false +animation/clip_177/name="" +animation/clip_177/start_frame=0 +animation/clip_177/end_frame=0 +animation/clip_177/loops=false +animation/clip_178/name="" +animation/clip_178/start_frame=0 +animation/clip_178/end_frame=0 +animation/clip_178/loops=false +animation/clip_179/name="" +animation/clip_179/start_frame=0 +animation/clip_179/end_frame=0 +animation/clip_179/loops=false +animation/clip_180/name="" +animation/clip_180/start_frame=0 +animation/clip_180/end_frame=0 +animation/clip_180/loops=false +animation/clip_181/name="" +animation/clip_181/start_frame=0 +animation/clip_181/end_frame=0 +animation/clip_181/loops=false +animation/clip_182/name="" +animation/clip_182/start_frame=0 +animation/clip_182/end_frame=0 +animation/clip_182/loops=false +animation/clip_183/name="" +animation/clip_183/start_frame=0 +animation/clip_183/end_frame=0 +animation/clip_183/loops=false +animation/clip_184/name="" +animation/clip_184/start_frame=0 +animation/clip_184/end_frame=0 +animation/clip_184/loops=false +animation/clip_185/name="" +animation/clip_185/start_frame=0 +animation/clip_185/end_frame=0 +animation/clip_185/loops=false +animation/clip_186/name="" +animation/clip_186/start_frame=0 +animation/clip_186/end_frame=0 +animation/clip_186/loops=false +animation/clip_187/name="" +animation/clip_187/start_frame=0 +animation/clip_187/end_frame=0 +animation/clip_187/loops=false +animation/clip_188/name="" +animation/clip_188/start_frame=0 +animation/clip_188/end_frame=0 +animation/clip_188/loops=false +animation/clip_189/name="" +animation/clip_189/start_frame=0 +animation/clip_189/end_frame=0 +animation/clip_189/loops=false +animation/clip_190/name="" +animation/clip_190/start_frame=0 +animation/clip_190/end_frame=0 +animation/clip_190/loops=false +animation/clip_191/name="" +animation/clip_191/start_frame=0 +animation/clip_191/end_frame=0 +animation/clip_191/loops=false +animation/clip_192/name="" +animation/clip_192/start_frame=0 +animation/clip_192/end_frame=0 +animation/clip_192/loops=false +animation/clip_193/name="" +animation/clip_193/start_frame=0 +animation/clip_193/end_frame=0 +animation/clip_193/loops=false +animation/clip_194/name="" +animation/clip_194/start_frame=0 +animation/clip_194/end_frame=0 +animation/clip_194/loops=false +animation/clip_195/name="" +animation/clip_195/start_frame=0 +animation/clip_195/end_frame=0 +animation/clip_195/loops=false +animation/clip_196/name="" +animation/clip_196/start_frame=0 +animation/clip_196/end_frame=0 +animation/clip_196/loops=false +animation/clip_197/name="" +animation/clip_197/start_frame=0 +animation/clip_197/end_frame=0 +animation/clip_197/loops=false +animation/clip_198/name="" +animation/clip_198/start_frame=0 +animation/clip_198/end_frame=0 +animation/clip_198/loops=false +animation/clip_199/name="" +animation/clip_199/start_frame=0 +animation/clip_199/end_frame=0 +animation/clip_199/loops=false +animation/clip_200/name="" +animation/clip_200/start_frame=0 +animation/clip_200/end_frame=0 +animation/clip_200/loops=false +animation/clip_201/name="" +animation/clip_201/start_frame=0 +animation/clip_201/end_frame=0 +animation/clip_201/loops=false +animation/clip_202/name="" +animation/clip_202/start_frame=0 +animation/clip_202/end_frame=0 +animation/clip_202/loops=false +animation/clip_203/name="" +animation/clip_203/start_frame=0 +animation/clip_203/end_frame=0 +animation/clip_203/loops=false +animation/clip_204/name="" +animation/clip_204/start_frame=0 +animation/clip_204/end_frame=0 +animation/clip_204/loops=false +animation/clip_205/name="" +animation/clip_205/start_frame=0 +animation/clip_205/end_frame=0 +animation/clip_205/loops=false +animation/clip_206/name="" +animation/clip_206/start_frame=0 +animation/clip_206/end_frame=0 +animation/clip_206/loops=false +animation/clip_207/name="" +animation/clip_207/start_frame=0 +animation/clip_207/end_frame=0 +animation/clip_207/loops=false +animation/clip_208/name="" +animation/clip_208/start_frame=0 +animation/clip_208/end_frame=0 +animation/clip_208/loops=false +animation/clip_209/name="" +animation/clip_209/start_frame=0 +animation/clip_209/end_frame=0 +animation/clip_209/loops=false +animation/clip_210/name="" +animation/clip_210/start_frame=0 +animation/clip_210/end_frame=0 +animation/clip_210/loops=false +animation/clip_211/name="" +animation/clip_211/start_frame=0 +animation/clip_211/end_frame=0 +animation/clip_211/loops=false +animation/clip_212/name="" +animation/clip_212/start_frame=0 +animation/clip_212/end_frame=0 +animation/clip_212/loops=false +animation/clip_213/name="" +animation/clip_213/start_frame=0 +animation/clip_213/end_frame=0 +animation/clip_213/loops=false +animation/clip_214/name="" +animation/clip_214/start_frame=0 +animation/clip_214/end_frame=0 +animation/clip_214/loops=false +animation/clip_215/name="" +animation/clip_215/start_frame=0 +animation/clip_215/end_frame=0 +animation/clip_215/loops=false +animation/clip_216/name="" +animation/clip_216/start_frame=0 +animation/clip_216/end_frame=0 +animation/clip_216/loops=false +animation/clip_217/name="" +animation/clip_217/start_frame=0 +animation/clip_217/end_frame=0 +animation/clip_217/loops=false +animation/clip_218/name="" +animation/clip_218/start_frame=0 +animation/clip_218/end_frame=0 +animation/clip_218/loops=false +animation/clip_219/name="" +animation/clip_219/start_frame=0 +animation/clip_219/end_frame=0 +animation/clip_219/loops=false +animation/clip_220/name="" +animation/clip_220/start_frame=0 +animation/clip_220/end_frame=0 +animation/clip_220/loops=false +animation/clip_221/name="" +animation/clip_221/start_frame=0 +animation/clip_221/end_frame=0 +animation/clip_221/loops=false +animation/clip_222/name="" +animation/clip_222/start_frame=0 +animation/clip_222/end_frame=0 +animation/clip_222/loops=false +animation/clip_223/name="" +animation/clip_223/start_frame=0 +animation/clip_223/end_frame=0 +animation/clip_223/loops=false +animation/clip_224/name="" +animation/clip_224/start_frame=0 +animation/clip_224/end_frame=0 +animation/clip_224/loops=false +animation/clip_225/name="" +animation/clip_225/start_frame=0 +animation/clip_225/end_frame=0 +animation/clip_225/loops=false +animation/clip_226/name="" +animation/clip_226/start_frame=0 +animation/clip_226/end_frame=0 +animation/clip_226/loops=false +animation/clip_227/name="" +animation/clip_227/start_frame=0 +animation/clip_227/end_frame=0 +animation/clip_227/loops=false +animation/clip_228/name="" +animation/clip_228/start_frame=0 +animation/clip_228/end_frame=0 +animation/clip_228/loops=false +animation/clip_229/name="" +animation/clip_229/start_frame=0 +animation/clip_229/end_frame=0 +animation/clip_229/loops=false +animation/clip_230/name="" +animation/clip_230/start_frame=0 +animation/clip_230/end_frame=0 +animation/clip_230/loops=false +animation/clip_231/name="" +animation/clip_231/start_frame=0 +animation/clip_231/end_frame=0 +animation/clip_231/loops=false +animation/clip_232/name="" +animation/clip_232/start_frame=0 +animation/clip_232/end_frame=0 +animation/clip_232/loops=false +animation/clip_233/name="" +animation/clip_233/start_frame=0 +animation/clip_233/end_frame=0 +animation/clip_233/loops=false +animation/clip_234/name="" +animation/clip_234/start_frame=0 +animation/clip_234/end_frame=0 +animation/clip_234/loops=false +animation/clip_235/name="" +animation/clip_235/start_frame=0 +animation/clip_235/end_frame=0 +animation/clip_235/loops=false +animation/clip_236/name="" +animation/clip_236/start_frame=0 +animation/clip_236/end_frame=0 +animation/clip_236/loops=false +animation/clip_237/name="" +animation/clip_237/start_frame=0 +animation/clip_237/end_frame=0 +animation/clip_237/loops=false +animation/clip_238/name="" +animation/clip_238/start_frame=0 +animation/clip_238/end_frame=0 +animation/clip_238/loops=false +animation/clip_239/name="" +animation/clip_239/start_frame=0 +animation/clip_239/end_frame=0 +animation/clip_239/loops=false +animation/clip_240/name="" +animation/clip_240/start_frame=0 +animation/clip_240/end_frame=0 +animation/clip_240/loops=false +animation/clip_241/name="" +animation/clip_241/start_frame=0 +animation/clip_241/end_frame=0 +animation/clip_241/loops=false +animation/clip_242/name="" +animation/clip_242/start_frame=0 +animation/clip_242/end_frame=0 +animation/clip_242/loops=false +animation/clip_243/name="" +animation/clip_243/start_frame=0 +animation/clip_243/end_frame=0 +animation/clip_243/loops=false +animation/clip_244/name="" +animation/clip_244/start_frame=0 +animation/clip_244/end_frame=0 +animation/clip_244/loops=false +animation/clip_245/name="" +animation/clip_245/start_frame=0 +animation/clip_245/end_frame=0 +animation/clip_245/loops=false +animation/clip_246/name="" +animation/clip_246/start_frame=0 +animation/clip_246/end_frame=0 +animation/clip_246/loops=false +animation/clip_247/name="" +animation/clip_247/start_frame=0 +animation/clip_247/end_frame=0 +animation/clip_247/loops=false +animation/clip_248/name="" +animation/clip_248/start_frame=0 +animation/clip_248/end_frame=0 +animation/clip_248/loops=false +animation/clip_249/name="" +animation/clip_249/start_frame=0 +animation/clip_249/end_frame=0 +animation/clip_249/loops=false +animation/clip_250/name="" +animation/clip_250/start_frame=0 +animation/clip_250/end_frame=0 +animation/clip_250/loops=false +animation/clip_251/name="" +animation/clip_251/start_frame=0 +animation/clip_251/end_frame=0 +animation/clip_251/loops=false +animation/clip_252/name="" +animation/clip_252/start_frame=0 +animation/clip_252/end_frame=0 +animation/clip_252/loops=false +animation/clip_253/name="" +animation/clip_253/start_frame=0 +animation/clip_253/end_frame=0 +animation/clip_253/loops=false +animation/clip_254/name="" +animation/clip_254/start_frame=0 +animation/clip_254/end_frame=0 +animation/clip_254/loops=false +animation/clip_255/name="" +animation/clip_255/start_frame=0 +animation/clip_255/end_frame=0 +animation/clip_255/loops=false +animation/clip_256/name="" +animation/clip_256/start_frame=0 +animation/clip_256/end_frame=0 +animation/clip_256/loops=false diff --git a/ovr-utils/addons/godot-openvr/plugin.cfg b/ovr-utils/addons/godot-openvr/plugin.cfg new file mode 100644 index 0000000..34126ee --- /dev/null +++ b/ovr-utils/addons/godot-openvr/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Godot OpenVR" +description="Godot OpenVR plugin" +author="Bastiaan Olij and contributors" +version="1.1.0" +script="EditorPlugin.gd" diff --git a/ovr-utils/addons/godot-openvr/scenes/framecounter_in_3d.tscn b/ovr-utils/addons/godot-openvr/scenes/framecounter_in_3d.tscn index 6c33e80..1895bd4 100644 --- a/ovr-utils/addons/godot-openvr/scenes/framecounter_in_3d.tscn +++ b/ovr-utils/addons/godot-openvr/scenes/framecounter_in_3d.tscn @@ -1,112 +1,61 @@ [gd_scene load_steps=5 format=2] [sub_resource type="PlaneMesh" id=1] - size = Vector2( 0.3, 0.15 ) subdivide_width = 10 subdivide_depth = 10 [sub_resource type="Shader" id=2] - code = "shader_type spatial; render_mode unshaded; uniform sampler2D viewport_texture : hint_albedo; void vertex() { - VERTEX.y = 1.0 - cos(VERTEX.x + 0.3) * 0.5 - cos(VERTEX.z + 0.15) * 0.5; + VERTEX.y = 1.0 - cos(VERTEX.x) * 0.5 - cos(VERTEX.z) * 0.5; } void fragment() { - vec4 col = texture(viewport_texture, vec2(1.0-UV.x, UV.y)); + vec4 col = texture(viewport_texture, vec2(1.0 - UV.x, UV.y)); ALBEDO = col.rgb; ALPHA = col.a; -}" +} +" [sub_resource type="ShaderMaterial" id=3] - -render_priority = 0 shader = SubResource( 2 ) -_sections_unfolded = [ "Resource", "shader_param" ] [sub_resource type="GDScript" id=4] - script/source = "extends MeshInstance func _ready(): get_surface_material(0).set_shader_param(\"viewport_texture\", $Viewport.get_texture()) + func _process(delta): - $Viewport/World/Label.text = str(Engine.get_frames_per_second()) + \" FPS\"" + $Viewport/Label.text = str(Engine.get_frames_per_second()) + \" FPS\" +" -[node name="FPS" type="MeshInstance" index="0"] - -transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 ) -layers = 1 -material_override = null -cast_shadow = 1 -extra_cull_margin = 0.0 -use_in_baked_light = false -lod_min_distance = 0.0 -lod_min_hysteresis = 0.0 -lod_max_distance = 0.0 -lod_max_hysteresis = 0.0 +[node name="FPS" type="MeshInstance"] +transform = Transform( 1, 0, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0 ) mesh = SubResource( 1 ) -skeleton = NodePath("..") material/0 = SubResource( 3 ) script = SubResource( 4 ) -_sections_unfolded = [ "Transform", "material" ] -[node name="Viewport" type="Viewport" parent="." index="0"] - -arvr = false +[node name="Viewport" type="Viewport" parent="."] size = Vector2( 200, 100 ) -own_world = false -world = null transparent_bg = true -msaa = 0 hdr = false -disable_3d = false usage = 0 -debug_draw = 0 -render_target_v_flip = false -render_target_clear_mode = 0 render_target_update_mode = 3 -audio_listener_enable_2d = false -audio_listener_enable_3d = false -physics_object_picking = false -gui_disable_input = false -gui_snap_controls_to_pixels = true -shadow_atlas_size = 0 -shadow_atlas_quad_0 = 2 -shadow_atlas_quad_1 = 2 -shadow_atlas_quad_2 = 3 -shadow_atlas_quad_3 = 4 -_sections_unfolded = [ "Render Target", "Rendering" ] -[node name="World" type="Node2D" parent="Viewport" index="0"] - -_sections_unfolded = [ "Transform", "Z" ] - -[node name="Label" type="Label" parent="Viewport/World" index="0"] - -anchor_left = 0.0 -anchor_top = 0.0 -anchor_right = 0.0 -anchor_bottom = 0.0 -margin_right = 200.0 -margin_bottom = 100.0 +[node name="Label" type="Label" parent="Viewport"] +anchor_right = 1.0 +anchor_bottom = 1.0 rect_scale = Vector2( 3, 3 ) -rect_pivot_offset = Vector2( 0, 0 ) -mouse_filter = 2 -size_flags_horizontal = 1 -size_flags_vertical = 4 custom_colors/font_color = Color( 1, 1, 1, 1 ) custom_colors/font_color_shadow = Color( 0, 0, 0, 1 ) text = "FPS" -percent_visible = 1.0 -lines_skipped = 0 -max_lines_visible = -1 -_sections_unfolded = [ "Anchor", "Grow Direction", "Margin", "Material", "Rect", "Visibility", "custom_colors" ] - - +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_controller.gd b/ovr-utils/addons/godot-openvr/scenes/ovr_controller.gd index 6ee1c73..5c9b282 100644 --- a/ovr-utils/addons/godot-openvr/scenes/ovr_controller.gd +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_controller.gd @@ -6,59 +6,27 @@ export var show_controller_mesh = true setget set_show_controller_mesh, get_show func set_show_controller_mesh(p_show): show_controller_mesh = p_show - if $Controller_mesh: - $Controller_mesh.visible = p_show + if $OVRRenderModel: + $OVRRenderModel.visible = p_show func get_show_controller_mesh(): return show_controller_mesh -var ovr_render_model -var components = Array() -var ws = 0 - func _ready(): - # instance our render model object - ovr_render_model = preload("res://addons/godot-openvr/OpenVRRenderModel.gdns").new() - # set our starting vaule - $Controller_mesh.visible = show_controller_mesh + $OVRRenderModel.visible = show_controller_mesh # hide to begin with visible = false -func apply_world_scale(): - var new_ws = ARVRServer.world_scale - if (ws != new_ws): - ws = new_ws - $Controller_mesh.scale = Vector3(ws, ws, ws) - -func load_controller_mesh(controller_name): - if ovr_render_model.load_model(controller_name.substr(0, controller_name.length()-2)): - return ovr_render_model - - if ovr_render_model.load_model("generic_controller"): - return ovr_render_model - - return Mesh.new() - func _process(delta): if !get_is_active(): visible = false return - # always set our world scale, user may end up changing this - apply_world_scale() - if visible: return - # became active? lets handle it... - var controller_name = get_controller_name() - print("Controller " + controller_name + " became active") - - # attempt to load a mesh for this - $Controller_mesh.mesh = load_controller_mesh(controller_name) - # make it visible visible = true emit_signal("controller_activated", self) diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_controller.tscn b/ovr-utils/addons/godot-openvr/scenes/ovr_controller.tscn index 456f3af..be60fc1 100644 --- a/ovr-utils/addons/godot-openvr/scenes/ovr_controller.tscn +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_controller.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://addons/godot-openvr/scenes/ovr_controller.gd" type="Script" id=1] +[ext_resource path="res://addons/godot-openvr/scenes/ovr_render_model.tscn" type="PackedScene" id=2] [node name="OVRController" type="ARVRController"] script = ExtResource( 1 ) -[node name="Controller_mesh" type="MeshInstance" parent="."] +[node name="OVRRenderModel" parent="." instance=ExtResource( 2 )] diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_first_person.tscn b/ovr-utils/addons/godot-openvr/scenes/ovr_first_person.tscn index 6b27ea4..a692645 100644 --- a/ovr-utils/addons/godot-openvr/scenes/ovr_first_person.tscn +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_first_person.tscn @@ -1,14 +1,10 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=5 format=2] -[ext_resource path="res://addons/vr-common/misc/VR_Common_Shader_Cache.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/godot-openvr/scenes/ovr_shader_cache.tscn" type="PackedScene" id=1] [ext_resource path="res://addons/godot-openvr/scenes/ovr_controller.tscn" type="PackedScene" id=2] +[ext_resource path="res://addons/godot-openvr/scenes/ovr_main.gd" type="Script" id=3] -[sub_resource type="PlaneMesh" id=1] -size = Vector2( 0.001, 0.001 ) - -[sub_resource type="SpatialMaterial" id=2] - -[sub_resource type="GDScript" id=3] +[sub_resource type="GDScript" id=1] script/source = "extends Spatial func _physics_process(delta): @@ -28,6 +24,7 @@ func _physics_process(delta): pass" [node name="OVRFirstPerson" type="ARVROrigin"] +script = ExtResource( 3 ) [node name="ARVRCamera" type="ARVRCamera" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.85, 0 ) @@ -35,16 +32,11 @@ fov = 65.0 near = 0.01 far = 1000.01 -[node name="shader_cache" parent="ARVRCamera" instance=ExtResource( 1 )] - -[node name="Controller" type="MeshInstance" parent="ARVRCamera/shader_cache"] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2 ) -mesh = SubResource( 1 ) -material/0 = SubResource( 2 ) +[node name="ovr_shader_cache" parent="ARVRCamera" instance=ExtResource( 1 )] [node name="HUD_Anchor" type="Spatial" parent="."] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.85, 0 ) -script = SubResource( 3 ) +script = SubResource( 1 ) [node name="Left_Hand" parent="." instance=ExtResource( 2 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.25, 0 ) @@ -52,4 +44,3 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.25, 0 ) [node name="Right_Hand" parent="." instance=ExtResource( 2 )] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 1.25, 0 ) controller_id = 2 - diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_left_hand.tscn b/ovr-utils/addons/godot-openvr/scenes/ovr_left_hand.tscn new file mode 100644 index 0000000..7e01821 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_left_hand.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://addons/godot-openvr/meshes/vr_glove_left_model_slim.glb" type="PackedScene" id=1] +[ext_resource path="res://addons/godot-openvr/meshes/models_hands_vr_glove_vmat.material" type="Material" id=2] +[ext_resource path="res://addons/godot-openvr/OpenVRPose.gdns" type="Script" id=3] +[ext_resource path="res://addons/godot-openvr/OpenVRSkeleton.gdns" type="Script" id=4] + +[node name="ovr_left_hand" instance=ExtResource( 1 )] +script = ExtResource( 3 ) +action = "/actions/godot/in/left_hand" + +[node name="Skeleton" parent="RootNode" index="0"] +bones/5/bound_children = [ NodePath("Thumb") ] +bones/10/bound_children = [ NodePath("Index") ] +bones/15/bound_children = [ NodePath("Middle") ] +bones/20/bound_children = [ NodePath("Ring") ] +bones/25/bound_children = [ NodePath("Pinky") ] +script = ExtResource( 4 ) +action = "/actions/godot/in/left_hand" + +[node name="vr_glove_left_slim" parent="RootNode/Skeleton" index="0"] +material/0 = ExtResource( 2 ) + +[node name="Thumb" type="BoneAttachment" parent="RootNode/Skeleton" index="1"] +transform = Transform( -0.347509, 0.0284256, 0.937246, -0.13095, -0.991217, -0.0184906, 0.928488, -0.129158, 0.348178, -0.0498674, 0.056092, 0.112777 ) +bone_name = "finger_thumb_l_end" + +[node name="Index" type="BoneAttachment" parent="RootNode/Skeleton" index="2"] +transform = Transform( -0.717079, -0.669965, 0.19221, -0.076153, -0.19881, -0.977075, 0.69282, -0.715277, 0.0915429, -0.0345977, 0.0355404, 0.164767 ) +bone_name = "finger_index_l_end" + +[node name="Middle" type="BoneAttachment" parent="RootNode/Skeleton" index="3"] +transform = Transform( -0.755126, -0.650532, 0.0812012, -0.0513261, -0.064817, -0.996576, 0.653568, -0.756708, 0.0155557, -0.0321126, 0.00654218, 0.171613 ) +bone_name = "finger_middle_l_end" + +[node name="Ring" type="BoneAttachment" parent="RootNode/Skeleton" index="4"] +transform = Transform( -0.749612, -0.661178, -0.0304372, -0.0961052, 0.154228, -0.98335, 0.654864, -0.734206, -0.179154, -0.0346831, -0.0253934, 0.156924 ) +bone_name = "finger_ring_l_end" + +[node name="Pinky" type="BoneAttachment" parent="RootNode/Skeleton" index="5"] +transform = Transform( -0.615435, -0.749373, -0.244295, -0.0354297, 0.335934, -0.941219, 0.787391, -0.570604, -0.233296, -0.0270969, -0.0462902, 0.133467 ) +bone_name = "finger_pinky_l_end" diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_main.gd b/ovr-utils/addons/godot-openvr/scenes/ovr_main.gd new file mode 100644 index 0000000..142f902 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_main.gd @@ -0,0 +1,68 @@ +extends ARVROrigin + +# Add this script to your ARVROrigin node and it will initialise OpenVR for you automatically. + +# Our plugin will now use the first actions.json found in the following locations +# 1) in the actions folder alongside the executable +# 2) in the actions folder within your project folder (i.e. "res://actions/actions.json") +# 3) in the actions folder within the plugin (i.e. "res://addons/godot-openvr/actions/actions.json") +# OpenVR can't read actions files within the exported datapack. + +# The plugin always registers atleast one action set. +# If you have renamed this action set you can specify the name here +export (String) var default_action_set = "/actions/godot" + +# If we render to a custom viewport give our node path here. +export (NodePath) var viewport = null + +# Convenience setting for setting physics update rate to a multiple of our HMDs frame rate (set to 0 to ignore) +export var physics_factor = 2 + +var arvr_interface : ARVRInterface = null +var openvr_config = null + +func get_openvr_config(): + return openvr_config + +func _ready(): + # Load our config before we initialise + openvr_config = preload("res://addons/godot-openvr/OpenVRConfig.gdns"); + if openvr_config: + print("Setup configuration") + openvr_config = openvr_config.new() + + openvr_config.default_action_set = default_action_set + + # Find the interface and initialise + arvr_interface = ARVRServer.find_interface("OpenVR") + if arvr_interface and arvr_interface.initialize(): + # We can't query our HMDs refresh rate just yet so we hardcode this to 90 + var refresh_rate = 90 + + # check our viewport + var vp : Viewport = null + if viewport: + vp = get_node(viewport) + if vp: + # We copy this, while the ARVRServer will resize the size of the viewport automatically + # it can't feed it back into the node. + vp.size = arvr_interface.get_render_targetsize() + + + # No viewport? get our main viewport + if !vp: + vp = get_viewport() + + # switch to ARVR mode + vp.arvr = true + + # keep linear color space, not needed and thus ignored with the GLES2 renderer + vp.keep_3d_linear = true + + # make sure vsync is disabled or we'll be limited to 60fps + OS.vsync_enabled = false + + if physics_factor > 0: + # Set our physics to a multiple of our refresh rate to get in sync with our rendering + Engine.iterations_per_second = refresh_rate * physics_factor + diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_render_model.gd b/ovr-utils/addons/godot-openvr/scenes/ovr_render_model.gd new file mode 100644 index 0000000..09b150b --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_render_model.gd @@ -0,0 +1,53 @@ +extends MeshInstance + +var ovr_render_model +var ws = 0 +var controller_is_loaded = false + +func apply_world_scale(): + var new_ws = ARVRServer.world_scale + if (ws != new_ws): + ws = new_ws + scale = Vector3(ws, ws, ws) + +func _load_controller_mesh(controller_name): + if ovr_render_model.load_model(controller_name.substr(0, controller_name.length()-2)): + return ovr_render_model + + if ovr_render_model.load_model("generic_controller"): + return ovr_render_model + + return Mesh.new() + +# Called when the node enters the scene tree for the first time. +func _ready(): + # instance our render model object + ovr_render_model = preload("res://addons/godot-openvr/OpenVRRenderModel.gdns").new() + + # we haven't loaded it + controller_is_loaded = false + +func _process(delta): + var controller = get_parent(); + if !controller is ARVRController: + return + + if !controller.get_is_active(): + if controller_is_loaded: + mesh = Mesh.new() + controller_is_loaded = false + return + + # always set our world scale, user may end up changing this + apply_world_scale() + + if controller_is_loaded: + return + + # became active? lets handle it... + var controller_name = controller.get_controller_name() + print("Controller " + controller_name + " became active") + + # attempt to load a mesh for this + mesh = _load_controller_mesh(controller_name) + controller_is_loaded = true diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_render_model.tscn b/ovr-utils/addons/godot-openvr/scenes/ovr_render_model.tscn new file mode 100644 index 0000000..7aa7438 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_render_model.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://addons/godot-openvr/scenes/ovr_render_model.gd" type="Script" id=1] + +[node name="OVRRenderModel" type="MeshInstance"] +script = ExtResource( 1 ) diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_right_hand.tscn b/ovr-utils/addons/godot-openvr/scenes/ovr_right_hand.tscn new file mode 100644 index 0000000..fa8bcfc --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_right_hand.tscn @@ -0,0 +1,42 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://addons/godot-openvr/meshes/vr_glove_right_model_slim.glb" type="PackedScene" id=1] +[ext_resource path="res://addons/godot-openvr/meshes/models_hands_vr_glove_vmat.material" type="Material" id=2] +[ext_resource path="res://addons/godot-openvr/OpenVRPose.gdns" type="Script" id=3] +[ext_resource path="res://addons/godot-openvr/OpenVRSkeleton.gdns" type="Script" id=4] + +[node name="ovr_right_hand" instance=ExtResource( 1 )] +script = ExtResource( 3 ) +action = "/actions/godot/in/right_hand" + +[node name="Skeleton" parent="RootNode" index="0"] +bones/5/bound_children = [ NodePath("Thumb") ] +bones/10/bound_children = [ NodePath("Index") ] +bones/15/bound_children = [ NodePath("Middle") ] +bones/20/bound_children = [ NodePath("Ring") ] +bones/25/bound_children = [ NodePath("Pinky") ] +script = ExtResource( 4 ) +action = "/actions/godot/in/right_hand" + +[node name="vr_glove_right_slim" parent="RootNode/Skeleton" index="0"] +material/0 = ExtResource( 2 ) + +[node name="Thumb" type="BoneAttachment" parent="RootNode/Skeleton" index="1"] +transform = Transform( -0.347509, 0.0284256, 0.937246, 0.130949, 0.991217, 0.0184906, -0.928488, 0.129158, -0.348179, 0.0498674, 0.0560921, 0.112777 ) +bone_name = "finger_thumb_r_end" + +[node name="Index" type="BoneAttachment" parent="RootNode/Skeleton" index="2"] +transform = Transform( -0.717079, -0.669965, 0.19221, 0.0761528, 0.19881, 0.977075, -0.69282, 0.715277, -0.0915429, 0.0345977, 0.0355405, 0.164767 ) +bone_name = "finger_index_r_end" + +[node name="Middle" type="BoneAttachment" parent="RootNode/Skeleton" index="3"] +transform = Transform( -0.755126, -0.650532, 0.0812013, 0.0513261, 0.064817, 0.996577, -0.653568, 0.756708, -0.0155557, 0.0321126, 0.00654219, 0.171613 ) +bone_name = "finger_middle_r_end" + +[node name="Ring" type="BoneAttachment" parent="RootNode/Skeleton" index="4"] +transform = Transform( -0.749612, -0.661178, -0.0304372, 0.0961052, -0.154228, 0.98335, -0.654864, 0.734206, 0.179154, 0.0346831, -0.0253934, 0.156924 ) +bone_name = "finger_ring_r_end" + +[node name="Pinky" type="BoneAttachment" parent="RootNode/Skeleton" index="5"] +transform = Transform( -0.615435, -0.749373, -0.244295, 0.0354297, -0.335934, 0.941219, -0.787391, 0.570604, 0.233296, 0.0270969, -0.0462902, 0.133467 ) +bone_name = "finger_pinky_r_end" diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_shader_cache.gd b/ovr-utils/addons/godot-openvr/scenes/ovr_shader_cache.gd new file mode 100644 index 0000000..4484c3e --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_shader_cache.gd @@ -0,0 +1,10 @@ +extends Spatial + +var countdown = 2 + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + countdown = countdown - 1 + if countdown == 0: + visible = false + set_process(false) diff --git a/ovr-utils/addons/godot-openvr/scenes/ovr_shader_cache.tscn b/ovr-utils/addons/godot-openvr/scenes/ovr_shader_cache.tscn new file mode 100644 index 0000000..21547b4 --- /dev/null +++ b/ovr-utils/addons/godot-openvr/scenes/ovr_shader_cache.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://addons/godot-openvr/scenes/ovr_shader_cache.gd" type="Script" id=1] + +[sub_resource type="PlaneMesh" id=1] +size = Vector2( 0.001, 0.001 ) + +[sub_resource type="SpatialMaterial" id=2] + +[node name="ovr_shader_cache" type="Spatial"] +script = ExtResource( 1 ) + +[node name="Controller" type="MeshInstance" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2 ) +mesh = SubResource( 1 ) +material/0 = SubResource( 2 ) diff --git a/ovr-utils/addons/openvr_overlay/OverlayInstance.tscn b/ovr-utils/addons/openvr_overlay/OverlayInstance.tscn index 88e6988..d41c062 100644 --- a/ovr-utils/addons/openvr_overlay/OverlayInstance.tscn +++ b/ovr-utils/addons/openvr_overlay/OverlayInstance.tscn @@ -25,8 +25,4 @@ anchor_right = 1.0 anchor_bottom = 1.0 theme = ExtResource( 5 ) -[node name="Offset" type="Spatial" parent="."] - -[node name="OffsetInv" type="RemoteTransform" parent="."] -use_global_coordinates = false -update_scale = false +[node name="Offset" type="RemoteTransform" parent="."] diff --git a/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd b/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd index 8975b7d..78cb473 100644 --- a/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd +++ b/ovr-utils/addons/openvr_overlay/interaction/overlay_interaction.gd @@ -22,7 +22,7 @@ func _ready() -> void: get_parent().connect("width_changed", self, "_on_width_changed") _on_width_changed(get_parent().width_meters) - get_node("../OffsetInv").remote_path = $Offset.get_path() + get_node("../Offset").remote_path = $Offset.get_path() $Offset.remote_path = $LeftHand/Area.get_path() diff --git a/ovr-utils/addons/openvr_overlay/overlay_init.gd b/ovr-utils/addons/openvr_overlay/overlay_init.gd index 7a9110f..7cf5d76 100644 --- a/ovr-utils/addons/openvr_overlay/overlay_init.gd +++ b/ovr-utils/addons/openvr_overlay/overlay_init.gd @@ -1,10 +1,13 @@ extends Node var ovr_interface: ARVRInterface +var ovr_config := preload("res://addons/godot-openvr/OpenVRConfig.gdns").new() +var left_id = 0 +var right_id = 0 func _init() -> void: - var ovr_config = preload("res://addons/godot-openvr/OpenVRConfig.gdns").new() + ovr_config = preload("res://addons/godot-openvr/OpenVRConfig.gdns").new() ovr_config.set_application_type(2) # Set to OVERLAY MODE = 2, NORMAL MODE = 1 ovr_config.set_tracking_universe(1) # Set to SEATED MODE = 0, STANDING MODE = 1, RAW MODE = 2 @@ -15,7 +18,20 @@ func _init() -> void: func _ready() -> void: + ARVRServer.connect("tracker_added", self, "_tracker_changed") + ARVRServer.connect("tracker_removed", self, "_tracker_changed") + update_hand_ids() + +func _tracker_changed(tracker_name: String, type: int, id: int): + update_hand_ids() + +func update_hand_ids(): for i in ARVRServer.get_tracker_count(): var tracker = ARVRServer.get_tracker(i) print(tracker.get_name(), ": hand ", tracker.get_hand()) + var tracking_id = tracker.get_name().split("_")[-1] + if tracker.get_hand() == 1: + left_id = tracking_id + elif tracker.get_hand() == 2: + right_id = tracking_id diff --git a/ovr-utils/addons/openvr_overlay/overlay_instance.gd b/ovr-utils/addons/openvr_overlay/overlay_instance.gd index 080ee9d..a319697 100644 --- a/ovr-utils/addons/openvr_overlay/overlay_instance.gd +++ b/ovr-utils/addons/openvr_overlay/overlay_instance.gd @@ -48,12 +48,7 @@ func update_tracker_id() -> void: func update_offset() -> void: $Offset.translation = offset_pos - $OffsetInv.translation = offset_pos $Offset.rotation_degrees = offset_rot - $OffsetInv.rotation_degrees = offset_rot - $OffsetInv.rotation_degrees.x *= -1 - $OffsetInv.rotation_degrees.y *= -1 - $OffsetInv.rotation_degrees.z *= -1 # print(_tracker_id) match target: @@ -66,7 +61,7 @@ func update_offset() -> void: func _tracker_changed(tracker_name: String, type: int, id: int): - print("tracker changed: ", tracker_name) +# print("tracker changed: ", tracker_name) update_tracker_id() update_offset() diff --git a/ovr-utils/overlays/BatteryOverlay.tscn b/ovr-utils/overlays/BatteryOverlay.tscn new file mode 100644 index 0000000..a9c391e --- /dev/null +++ b/ovr-utils/overlays/BatteryOverlay.tscn @@ -0,0 +1,50 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://overlays/battery.gd" type="Script" id=1] +[ext_resource path="res://fonts/OpenSans-Regular.ttf" type="DynamicFontData" id=2] + +[sub_resource type="StyleBoxFlat" id=1] +bg_color = Color( 0, 0, 0, 0.705882 ) +expand_margin_left = 8.0 +expand_margin_right = 8.0 +expand_margin_top = 8.0 +expand_margin_bottom = 8.0 + +[sub_resource type="DynamicFont" id=2] +size = 128 +font_data = ExtResource( 2 ) + +[node name="Overlay" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="ColorRect" type="PanelContainer" parent="."] +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -673.0 +margin_top = -87.5 +margin_right = 673.0 +margin_bottom = 87.5 +size_flags_horizontal = 0 +custom_styles/panel = SubResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Label" type="Label" parent="ColorRect"] +margin_right = 1346.0 +margin_bottom = 175.0 +custom_fonts/font = SubResource( 2 ) +text = "Left: 100% Right: 100%" +align = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} diff --git a/ovr-utils/overlays/battery.gd b/ovr-utils/overlays/battery.gd new file mode 100644 index 0000000..9df26f3 --- /dev/null +++ b/ovr-utils/overlays/battery.gd @@ -0,0 +1,26 @@ +extends Label + +var _delay = 0 + + +func _ready() -> void: + pass + +func _process(delta: float) -> void: + _delay += delta + if _delay > 1: + update_text() + _delay = 0 + +func update_text(): + var l = "NaN" + var r = "NaN" + if OverlayInit.left_id: + l = OverlayInit.ovr_config.get_device_battery_percentage(OverlayInit.left_id)*100 + l = str(int(l)) + if OverlayInit.right_id: + r = OverlayInit.ovr_config.get_device_battery_percentage(OverlayInit.right_id)*100 + r = str(int(r)) + if OverlayInit.ovr_config.is_device_charging(OverlayInit.right_id): + r += "+" + text = "Left: " + l + "% Right: " + r + "%"