private void IncludeExternalVelocities(ref Vector3 linearVelocity, ref Vector3 angularVelocity)
        {
            Vector3 extraLinearVelocity, extraAngularVelocity;

            (extraLinearVelocity, extraAngularVelocity) = ThrowInputDevice.GetExternalVelocities();
            float addedExternalSpeed = extraLinearVelocity.magnitude * _externalVelocityInfluence;

            linearVelocity += linearVelocity.normalized * addedExternalSpeed;
            float addedExternalAngularSpeed = extraAngularVelocity.magnitude * _externalVelocityInfluence;

            angularVelocity += angularVelocity.normalized * addedExternalAngularSpeed;
        }
        protected virtual void LateUpdate()
        {
            if (_updateLatency > 0.0f && _lastUpdateTime > 0.0f &&
                (Time.time - _lastUpdateTime) < _updateLatency)
            {
                return;
            }

            Pose referencePose;

            if (!ThrowInputDevice.IsInputValid || !ThrowInputDevice.IsHighConfidence ||
                !ThrowInputDevice.GetRootPose(out referencePose))
            {
                return;
            }

            _lastUpdateTime = Time.time;
            referencePose   = new Pose(
                _referenceOffset + referencePose.position,
                referencePose.rotation);
            CalculateLatestVelocitiesAndUpdateBuffer(Time.deltaTime, referencePose);
        }