tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

OpenVRControllerMapper.h (3086B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef GFX_VR_SERVICE_OPENVRCONTROLLERMAPPER_H
      8 #define GFX_VR_SERVICE_OPENVRCONTROLLERMAPPER_H
      9 
     10 #include "openvr.h"
     11 #include "nsString.h"
     12 
     13 #include "moz_external_vr.h"
     14 
     15 namespace mozilla {
     16 namespace gfx {
     17 
     18 struct ControllerAction {
     19  nsCString name;
     20  nsCString type;
     21  vr::VRActionHandle_t handle = vr::k_ulInvalidActionHandle;
     22 
     23  ControllerAction() = default;
     24 
     25  ControllerAction(const char* aName, const char* aType)
     26      : name(aName), type(aType) {}
     27 };
     28 
     29 struct ControllerInfo {
     30  vr::VRInputValueHandle_t mSource = vr::k_ulInvalidInputValueHandle;
     31 
     32  ControllerAction mActionPose;
     33  ControllerAction mActionHaptic;
     34 
     35  ControllerAction mActionTrackpad_Analog;
     36  ControllerAction mActionTrackpad_Pressed;
     37  ControllerAction mActionTrackpad_Touched;
     38 
     39  ControllerAction mActionTrigger_Value;
     40 
     41  ControllerAction mActionGrip_Pressed;
     42  ControllerAction mActionGrip_Touched;
     43  ControllerAction mActionMenu_Pressed;
     44  ControllerAction mActionMenu_Touched;
     45  // It seems like there's no way to get response from a sys. btn.
     46  ControllerAction mActionSystem_Pressed;
     47  ControllerAction mActionSystem_Touched;
     48 
     49  // --- Knuckles & Cosmos
     50  ControllerAction mActionA_Pressed;
     51  ControllerAction mActionA_Touched;
     52  ControllerAction mActionB_Pressed;
     53  ControllerAction mActionB_Touched;
     54 
     55  // --- Knuckles, Cosmos, and WMR
     56  ControllerAction mActionThumbstick_Analog;
     57  ControllerAction mActionThumbstick_Pressed;
     58  ControllerAction mActionThumbstick_Touched;
     59 
     60  // --- Knuckles
     61  ControllerAction mActionFingerIndex_Value;
     62  ControllerAction mActionFingerMiddle_Value;
     63  ControllerAction mActionFingerRing_Value;
     64  ControllerAction mActionFingerPinky_Value;
     65 
     66  // --- Cosmos
     67  ControllerAction mActionBumper_Pressed;
     68 };
     69 
     70 class OpenVRControllerMapper {
     71 public:
     72  OpenVRControllerMapper();
     73  virtual ~OpenVRControllerMapper() = default;
     74 
     75  virtual void UpdateButtons(VRControllerState& aControllerState,
     76                             ControllerInfo& aControllerInfo) = 0;
     77  uint32_t GetButtonCount() { return mNumButtons; }
     78  uint32_t GetAxisCount() { return mNumAxes; }
     79 
     80 protected:
     81  void GetButtonValueFromAction(VRControllerState& aControllerState,
     82                                const ControllerAction& aPressAction,
     83                                const ControllerAction& aTouchAction);
     84  void GetTriggerValueFromAction(VRControllerState& aControllerState,
     85                                 const ControllerAction& aAction);
     86  void GetAxisValueFromAction(VRControllerState& aControllerState,
     87                              const ControllerAction& aAction,
     88                              bool aInvertAxis = false);
     89  uint32_t mNumButtons;
     90  uint32_t mNumAxes;
     91 };
     92 
     93 }  // namespace gfx
     94 }  // namespace mozilla
     95 
     96 #endif  // GFX_VR_SERVICE_OPENVRCONTROLLERMAPPER_H