babylon.gearVRController.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. module BABYLON {
  2. export class GearVRController extends WebVRController {
  3. public static MODEL_BASE_URL:string = 'https://controllers.babylonjs.com/generic/';
  4. public static MODEL_FILENAME:string = 'generic.babylon';
  5. public static readonly GAMEPAD_ID_PREFIX: string = 'Gear VR'; // id is 'Gear VR Controller'
  6. private readonly _buttonIndexToObservableNameMap = [
  7. 'onTrackpadChangedObservable', // Trackpad
  8. 'onTriggerStateChangedObservable' // Trigger
  9. ]
  10. constructor(vrGamepad: any) {
  11. super(vrGamepad);
  12. this.controllerType = PoseEnabledControllerType.GEAR_VR;
  13. }
  14. public initControllerMesh(scene: Scene, meshLoaded?: (mesh: AbstractMesh) => void) {
  15. SceneLoader.ImportMesh("", GearVRController.MODEL_BASE_URL, GearVRController.MODEL_FILENAME, scene, (newMeshes) => {
  16. this._defaultModel = newMeshes[1];
  17. this.attachToMesh(this._defaultModel);
  18. if (meshLoaded) {
  19. meshLoaded(this._defaultModel);
  20. }
  21. });
  22. }
  23. protected _handleButtonChange(buttonIdx: number, state: ExtendedGamepadButton, changes: GamepadButtonChanges) {
  24. if (buttonIdx < this._buttonIndexToObservableNameMap.length) {
  25. const observableName : string = this._buttonIndexToObservableNameMap[buttonIdx];
  26. // Only emit events for buttons that we know how to map from index to observable
  27. let observable = (<any>this)[observableName];
  28. if (observable) {
  29. observable.notifyObservers(state);
  30. }
  31. }
  32. }
  33. }
  34. }