mirror of
https://github.com/CrispyPin/ovr-utils.git
synced 2024-11-21 23:20:25 +01:00
apply fallbacks when tracker unavailable, cleanup
This commit is contained in:
parent
70892dcb7b
commit
1b1902cadd
3 changed files with 68 additions and 42 deletions
|
@ -3,8 +3,12 @@ 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
|
||||
var trackers = {
|
||||
"head": 0,
|
||||
"left": -1,
|
||||
"right": -1,
|
||||
"world": 63,
|
||||
}
|
||||
|
||||
func _init() -> void:
|
||||
ovr_config = preload("res://addons/godot-openvr/OpenVRConfig.gdns").new()
|
||||
|
@ -14,24 +18,39 @@ func _init() -> void:
|
|||
# Find the OpenVR interface and initialise it
|
||||
ovr_interface = ARVRServer.find_interface("OpenVR")
|
||||
if ovr_interface and ovr_interface.initialize():
|
||||
pass
|
||||
print("OpenVR Initialized.")
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
ARVRServer.connect("tracker_added", self, "_tracker_changed")
|
||||
ARVRServer.connect("tracker_removed", self, "_tracker_changed")
|
||||
ARVRServer.connect("tracker_added", self, "_tracker_added")
|
||||
ARVRServer.connect("tracker_removed", self, "_tracker_removed")
|
||||
update_hand_ids()
|
||||
|
||||
func _tracker_changed(tracker_name: String, type: int, id: int):
|
||||
|
||||
func _tracker_added(tracker_name: String, type: int, id: int):
|
||||
update_hand_ids()
|
||||
|
||||
|
||||
func _tracker_removed(tracker_name: String, type: int, id: int):
|
||||
match id:
|
||||
1:
|
||||
trackers.left = -1
|
||||
2:
|
||||
trackers.right = -1
|
||||
|
||||
|
||||
func update_hand_ids():
|
||||
trackers.left = -1
|
||||
trackers.right = -1
|
||||
for i in ARVRServer.get_tracker_count():
|
||||
var tracker = ARVRServer.get_tracker(i)
|
||||
# print(tracker.get_name(), ": hand ", tracker.get_hand())
|
||||
var t = ARVRServer.get_tracker(i)
|
||||
var tracking_id = get_id(t)
|
||||
match t.get_hand():
|
||||
1:
|
||||
trackers.left = tracking_id
|
||||
2:
|
||||
trackers.right = tracking_id
|
||||
|
||||
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
|
||||
|
||||
static func get_id(tracker) -> int:
|
||||
return int(tracker.get_name().split("_")[-1])
|
||||
|
|
|
@ -22,6 +22,7 @@ var offsets:Dictionary = {
|
|||
|
||||
# what's actually tracking
|
||||
var current_target: String = "world" setget _set_current_target# most of the time the actual target, but will fall back
|
||||
var fallback = ["left", "right", "head"]
|
||||
|
||||
var _tracker_id: int = 0
|
||||
|
||||
|
@ -49,17 +50,19 @@ func _ready() -> void:
|
|||
|
||||
func load_settings():
|
||||
if Settings.s.overlays.has(name):
|
||||
target = Settings.s.overlays[name].target
|
||||
# TODO target fallback
|
||||
update_current_target()
|
||||
if Settings.s.overlays[name].has("fallback"):
|
||||
fallback = Settings.s.overlays[name].fallback
|
||||
set_target(Settings.s.overlays[name].target)
|
||||
|
||||
set_width_in_meters(Settings.s.overlays[name].width)
|
||||
|
||||
for t_key in Settings.s.overlays[name].offsets:
|
||||
var t_offset = Settings.s.overlays[name].offsets[t_key]
|
||||
offsets[t_key].pos = t_offset.pos
|
||||
offsets[t_key].rot = t_offset.rot
|
||||
update_offset()
|
||||
else:
|
||||
#TEMP defaults
|
||||
#TEMP defaults (remove when dragging any overlay is possible)
|
||||
offsets[current_target].pos = translation
|
||||
offsets[current_target].rot = transform.basis.get_rotation_quat()
|
||||
update_offset()
|
||||
|
@ -72,6 +75,7 @@ func load_settings():
|
|||
func save_settings():
|
||||
Settings.s.overlays[name].target = target
|
||||
Settings.s.overlays[name].width = width_meters
|
||||
Settings.s.overlays[name].fallback = fallback
|
||||
|
||||
if not Settings.s.overlays[name].has("offsets"):
|
||||
Settings.s.overlays[name]["offsets"] = {}
|
||||
|
@ -87,16 +91,17 @@ func save_settings():
|
|||
|
||||
func update_tracker_id() -> void:
|
||||
_tracker_id = -1
|
||||
if current_target in ["left", "right"]: # target is a controller
|
||||
var target_id = TARGETS.find(current_target)
|
||||
|
||||
for i in ARVRServer.get_tracker_count():
|
||||
var tracker = ARVRServer.get_tracker(i)
|
||||
if tracker.get_hand() == target_id:
|
||||
_tracker_id = int(tracker.get_name().split("_")[-1])
|
||||
match current_target:
|
||||
"left":
|
||||
_tracker_id = OverlayInit.trackers.left
|
||||
"right":
|
||||
_tracker_id = OverlayInit.trackers.right
|
||||
_:
|
||||
return
|
||||
|
||||
if _tracker_id == -1:
|
||||
# could not find controller, overlay will revert to fallback
|
||||
# could not find controller, fallback
|
||||
print("Missing controller ", current_target, " ", target, " ", fallback, " - ", name)
|
||||
_tracker_id = 63 # highest tracker id (unused, at origin)
|
||||
|
||||
|
||||
|
@ -114,22 +119,24 @@ func update_offset() -> void:
|
|||
|
||||
|
||||
func update_current_target():
|
||||
if OverlayInit.trackers[target] != -1:
|
||||
_set_current_target(target)
|
||||
# TODO fallback if not found
|
||||
else: # fallback if not found
|
||||
for f in fallback:
|
||||
if OverlayInit.trackers[f] != -1:
|
||||
_set_current_target(f)
|
||||
break
|
||||
update_tracker_id()
|
||||
|
||||
|
||||
|
||||
func _tracker_changed(tracker_name: String, type: int, id: int):
|
||||
update_tracker_id()
|
||||
update_current_target()
|
||||
update_offset()
|
||||
|
||||
|
||||
func get_tracker_id() -> int:
|
||||
return _tracker_id
|
||||
|
||||
|
||||
func set_target(new: String):
|
||||
target = new
|
||||
update_tracker_id()
|
||||
call_deferred("update_offset")
|
||||
update_current_target()
|
||||
|
||||
|
|
|
@ -14,16 +14,16 @@ func update_text():
|
|||
var l = "??"
|
||||
var r = "??"
|
||||
|
||||
if OverlayInit.left_id:
|
||||
l = OverlayInit.ovr_config.get_device_battery_percentage(OverlayInit.left_id)
|
||||
if OverlayInit.trackers.left != -1:
|
||||
l = OverlayInit.ovr_config.get_device_battery_percentage(OverlayInit.trackers.left)
|
||||
l = str(int(l * 100))
|
||||
if OverlayInit.ovr_config.is_device_charging(OverlayInit.left_id):
|
||||
if OverlayInit.ovr_config.is_device_charging(OverlayInit.trackers.left):
|
||||
l += "+"
|
||||
|
||||
if OverlayInit.right_id:
|
||||
r = OverlayInit.ovr_config.get_device_battery_percentage(OverlayInit.right_id)
|
||||
if OverlayInit.trackers.right != -1:
|
||||
r = OverlayInit.ovr_config.get_device_battery_percentage(OverlayInit.trackers.right)
|
||||
r = str(int(r * 100))
|
||||
if OverlayInit.ovr_config.is_device_charging(OverlayInit.right_id):
|
||||
if OverlayInit.ovr_config.is_device_charging(OverlayInit.trackers.right):
|
||||
r += "+"
|
||||
|
||||
text = "L: " + l + "% R: " + r + "%"
|
||||
|
|
Loading…
Reference in a new issue