better proxying of data into the receivers
This commit is contained in:
parent
4da8618746
commit
b54c78da19
3 changed files with 54 additions and 15 deletions
|
@ -12,12 +12,14 @@ and immediatly made available. Minimal or no internal state keeping!
|
||||||
- first collect names and ids of message_types and senders (stored in session)
|
- first collect names and ids of message_types and senders (stored in session)
|
||||||
- register listeners in session
|
- register listeners in session
|
||||||
- listeners inject captured data with signals
|
- listeners inject captured data with signals
|
||||||
|
|
||||||
- keep naming "classic" ??? ... above session is a tracker with a sender with sensors
|
- keep naming "classic" ??? ... above session is a tracker with a sender with sensors
|
||||||
|
|
||||||
# Todo
|
# Todo
|
||||||
- [x] Testset for Quaternion rotations
|
- [x] Testset for Quaternion rotations
|
||||||
- [x] Axis as subscene
|
- [x] Axis as subscene
|
||||||
|
- [ ] make global/local a choice
|
||||||
|
- [ ] add velocity and acceleration
|
||||||
|
- [ ] add buttons
|
||||||
|
|
||||||
# Internal Notes
|
# Internal Notes
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ extends Node
|
||||||
class_name VRPN
|
class_name VRPN
|
||||||
|
|
||||||
# tracking associated data
|
# tracking associated data
|
||||||
enum TrackingData { POS_QUAT, VELOCITY, ACCELERATION }
|
enum TrackingDataType { POS_QUAT, VELOCITY, ACCELERATION }
|
||||||
|
|
||||||
# magic cookie
|
# magic cookie
|
||||||
const magic_cookie_start : String = "vrpn: ver."
|
const magic_cookie_start : String = "vrpn: ver."
|
||||||
|
@ -176,18 +176,53 @@ static func marshall_body(data : PackedByteArray,message_type : int, sender_id:
|
||||||
var quat = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized()
|
var quat = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized()
|
||||||
# submit to listener
|
# submit to listener
|
||||||
for r in session.tracker_receivers:
|
for r in session.tracker_receivers:
|
||||||
r._on_pos_quat({
|
r._on_tracker({
|
||||||
|
"type" : TrackingDataType.POS_QUAT,
|
||||||
"tracker" : session.sensors[sender_id],
|
"tracker" : session.sensors[sender_id],
|
||||||
"sensor" : sensor_id,
|
"sensor" : sensor_id,
|
||||||
"position" : pos,
|
"position" : pos,
|
||||||
"rotation" : quat
|
"rotation" : quat
|
||||||
})
|
})
|
||||||
'vrpn_Tracker Velocity':
|
'vrpn_Tracker Velocity':
|
||||||
pass
|
# get id
|
||||||
|
var sensor_id = body.get_32()
|
||||||
|
var padding = body.get_32() # padding
|
||||||
|
# position
|
||||||
|
var vel = Vector3(body.get_double(),body.get_double(),body.get_double())
|
||||||
|
# VRPN quat layout and Godot Quaternion c'tor identical with x,y,z,w
|
||||||
|
var vel_rot = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized()
|
||||||
|
# submit to listener
|
||||||
|
for r in session.tracker_receivers:
|
||||||
|
r._on_tracker({
|
||||||
|
"type" : TrackingDataType.VELOCITY,
|
||||||
|
"tracker" : session.sensors[sender_id],
|
||||||
|
"sensor" : sensor_id,
|
||||||
|
"velocity_linear" : vel,
|
||||||
|
"velocity_rotation" : vel_rot
|
||||||
|
})
|
||||||
|
'vrpn_Tracker Acceleration':
|
||||||
|
# get id
|
||||||
|
var sensor_id = body.get_32()
|
||||||
|
var padding = body.get_32() # padding
|
||||||
|
# position
|
||||||
|
var acc = Vector3(body.get_double(),body.get_double(),body.get_double())
|
||||||
|
# VRPN quat layout and Godot Quaternion c'tor identical with x,y,z,w
|
||||||
|
var acc_rot = Quaternion(body.get_double(),body.get_double(),body.get_double(),body.get_double()).normalized()
|
||||||
|
|
||||||
|
var acc_dt = body.get_double() # padding
|
||||||
|
# submit to listener
|
||||||
|
for r in session.tracker_receivers:
|
||||||
|
r._on_tracker({
|
||||||
|
"type" : TrackingDataType.ACCELERATION,
|
||||||
|
"tracker" : session.sensors[sender_id],
|
||||||
|
"sensor" : sensor_id,
|
||||||
|
"acceleration_linear" : acc,
|
||||||
|
"acceleration_rotation" : acc_rot,
|
||||||
|
"acceleration_dt" : acc_dt
|
||||||
|
})
|
||||||
_:
|
_:
|
||||||
pass
|
pass
|
||||||
#print("unhandled message type {0}".format([message_type]))
|
|
||||||
|
|
||||||
|
|
||||||
static func aligned_size(actual_size : int, alignment : int = 8) -> int:
|
static func aligned_size(actual_size : int, alignment : int = 8) -> int:
|
||||||
return (actual_size + alignment - 1) & ~(alignment - 1)
|
return (actual_size + alignment - 1) & ~(alignment - 1)
|
||||||
|
|
|
@ -7,12 +7,14 @@ class_name VRPN_Receiver
|
||||||
@export var tracker_use_position : bool = true
|
@export var tracker_use_position : bool = true
|
||||||
@export var tracker_use_rotation : bool = true
|
@export var tracker_use_rotation : bool = true
|
||||||
|
|
||||||
|
func _on_tracker(tracker_data : Dictionary):
|
||||||
func _on_pos_quat(tracker_data : Dictionary):
|
match tracker_data['type'] as VRPN.TrackingDataType:
|
||||||
|
VRPN.TrackingDataType.POS_QUAT:
|
||||||
if tracker_data['tracker'] == tracker_name and tracker_data['sensor'] == tracker_sensor:
|
if tracker_data['tracker'] == tracker_name and tracker_data['sensor'] == tracker_sensor:
|
||||||
if tracker_use_position:
|
if tracker_use_position:
|
||||||
self.global_position = tracker_data['position']
|
self.global_position = tracker_data['position']
|
||||||
if tracker_use_rotation:
|
if tracker_use_rotation:
|
||||||
var rotation := tracker_data['rotation'] as Quaternion
|
var rotation := tracker_data['rotation'] as Quaternion
|
||||||
self.global_basis = Basis(rotation)
|
self.global_basis = Basis(rotation)
|
||||||
|
_:
|
||||||
|
push_warning("unknown tracker datatype")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue