Browse Source

XR Tracker reuses XR Pose

Faolan 2 years ago
parent
commit
7d8a9d257d
1 changed files with 7 additions and 2 deletions
  1. 7 2
      servers/xr/xr_positional_tracker.cpp

+ 7 - 2
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