summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--servers/xr/xr_positional_tracker.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/servers/xr/xr_positional_tracker.cpp b/servers/xr/xr_positional_tracker.cpp
index ffb89fc385..2dacabe588 100644
--- a/servers/xr/xr_positional_tracker.cpp
+++ b/servers/xr/xr_positional_tracker.cpp
@@ -153,7 +153,13 @@ void XRPositionalTracker::invalidate_pose(const StringName &p_action_name) {
void XRPositionalTracker::set_pose(const StringName &p_action_name, const Transform3D &p_transform, const Vector3 &p_linear_velocity, const Vector3 &p_angular_velocity, const XRPose::TrackingConfidence p_tracking_confidence) {
Ref<XRPose> new_pose;
- new_pose.instantiate();
+ if (poses.has(p_action_name)) {
+ new_pose = poses[p_action_name];
+ } else {
+ new_pose.instantiate();
+ poses[p_action_name] = new_pose;
+ }
+
new_pose->set_name(p_action_name);
new_pose->set_has_tracking_data(true);
new_pose->set_transform(p_transform);
@@ -161,7 +167,6 @@ void XRPositionalTracker::set_pose(const StringName &p_action_name, const Transf
new_pose->set_angular_velocity(p_angular_velocity);
new_pose->set_tracking_confidence(p_tracking_confidence);
- poses[p_action_name] = new_pose;
emit_signal(SNAME("pose_changed"), new_pose);
// TODO discuss whether we also want to create and emit an InputEventXRPose event