| 628 | } |
| 629 | |
| 630 | ovrResult InputManager::OculusTouch::SetVibration(XrSession session, ovrControllerType controllerType, float frequency, float amplitude) |
| 631 | { |
| 632 | std::vector<XrPath> subPaths; |
| 633 | if (controllerType & ovrControllerType_LTouch) |
| 634 | subPaths.push_back(s_SubActionPaths[ovrHand_Left]); |
| 635 | if (controllerType & ovrControllerType_RTouch) |
| 636 | subPaths.push_back(s_SubActionPaths[ovrHand_Right]); |
| 637 | |
| 638 | for (XrPath path : subPaths) |
| 639 | { |
| 640 | XrHapticActionInfo info = XR_TYPE(HAPTIC_ACTION_INFO); |
| 641 | info.action = m_Vibration; |
| 642 | info.subactionPath = path; |
| 643 | if (frequency > 0.0f) |
| 644 | { |
| 645 | XrHapticVibration vibration = XR_TYPE(HAPTIC_VIBRATION); |
| 646 | vibration.frequency = XR_FREQUENCY_UNSPECIFIED; |
| 647 | vibration.amplitude = amplitude; |
| 648 | vibration.duration = Runtime::Get().UseHack(Runtime::HACK_MIN_HAPTIC_DURATION) ? |
| 649 | XR_MIN_HAPTIC_DURATION : MAX_VIBRATION_DURATION; |
| 650 | CHK_XR(xrApplyHapticFeedback(session, &info, (XrHapticBaseHeader*)&vibration)); |
| 651 | } |
| 652 | else |
| 653 | { |
| 654 | CHK_XR(xrStopHapticFeedback(session, &info)); |
| 655 | } |
| 656 | } |
| 657 | return ovrSuccess; |
| 658 | } |
| 659 | |
| 660 | void InputManager::OculusTouch::SubmitVibration(ovrControllerType controllerType, const ovrHapticsBuffer* buffer) |
| 661 | { |
no test coverage detected