summaryrefslogtreecommitdiffstats
path: root/servers/xr
diff options
context:
space:
mode:
authorMalcolm Nixon <Malcolm.nixon@gmail.com>2023-09-01 19:13:54 -0400
committerMalcolm Nixon <Malcolm.nixon@gmail.com>2023-09-03 12:17:16 -0400
commit22de1b31b527a617146e264e6901bb8356f5fffe (patch)
tree47e55585b0a1518ace07190e6cb5f593519af8f5 /servers/xr
parent80bfca20c6577083e9e4070723512ff2c3f32d0b (diff)
downloadredot-engine-22de1b31b527a617146e264e6901bb8356f5fffe.tar.gz
Added XR tracking-state change signals
Add "pose_lost_tracking" signal to XRPositionalTracker. Add "tracking_changed" signal to XRNode3D.
Diffstat (limited to 'servers/xr')
-rw-r--r--servers/xr/xr_positional_tracker.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/servers/xr/xr_positional_tracker.cpp b/servers/xr/xr_positional_tracker.cpp
index 2dacabe588..6c15e4c1b0 100644
--- a/servers/xr/xr_positional_tracker.cpp
+++ b/servers/xr/xr_positional_tracker.cpp
@@ -62,6 +62,7 @@ void XRPositionalTracker::_bind_methods() {
ClassDB::bind_method(D_METHOD("invalidate_pose", "name"), &XRPositionalTracker::invalidate_pose);
ClassDB::bind_method(D_METHOD("set_pose", "name", "transform", "linear_velocity", "angular_velocity", "tracking_confidence"), &XRPositionalTracker::set_pose);
ADD_SIGNAL(MethodInfo("pose_changed", PropertyInfo(Variant::OBJECT, "pose", PROPERTY_HINT_RESOURCE_TYPE, "XRPose")));
+ ADD_SIGNAL(MethodInfo("pose_lost_tracking", PropertyInfo(Variant::OBJECT, "pose", PROPERTY_HINT_RESOURCE_TYPE, "XRPose")));
ClassDB::bind_method(D_METHOD("get_input", "name"), &XRPositionalTracker::get_input);
ClassDB::bind_method(D_METHOD("set_input", "name", "value"), &XRPositionalTracker::set_input);
@@ -146,7 +147,10 @@ void XRPositionalTracker::invalidate_pose(const StringName &p_action_name) {
// only update this if we were tracking this pose
if (poses.has(p_action_name)) {
// We just set tracking data as invalid, we leave our current transform and velocity data as is so controllers don't suddenly jump to origin.
- poses[p_action_name]->set_has_tracking_data(false);
+ Ref<XRPose> pose = poses[p_action_name];
+ pose->set_has_tracking_data(false);
+
+ emit_signal(SNAME("pose_lost_tracking"), pose);
}
}