@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.3.0 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/dist/commonjs/AFK/AFKController.js +109 -109
  2. package/dist/commonjs/Config/Config.js +559 -559
  3. package/dist/commonjs/Config/SettingBase.js +98 -98
  4. package/dist/commonjs/Config/SettingFlag.js +49 -49
  5. package/dist/commonjs/Config/SettingNumber.js +83 -83
  6. package/dist/commonjs/Config/SettingOption.js +84 -84
  7. package/dist/commonjs/Config/SettingText.js +42 -42
  8. package/dist/commonjs/DataChannel/DataChannelController.js +106 -106
  9. package/dist/commonjs/DataChannel/DataChannelLatencyTestController.js +94 -94
  10. package/dist/commonjs/DataChannel/DataChannelLatencyTestResults.js +18 -18
  11. package/dist/commonjs/DataChannel/DataChannelSender.js +43 -43
  12. package/dist/commonjs/DataChannel/InitialSettings.js +41 -41
  13. package/dist/commonjs/DataChannel/LatencyTestResults.js +60 -60
  14. package/dist/commonjs/FreezeFrame/FreezeFrame.js +93 -93
  15. package/dist/commonjs/FreezeFrame/FreezeFrameController.js +95 -95
  16. package/dist/commonjs/Inputs/GamepadController.js +188 -188
  17. package/dist/commonjs/Inputs/GamepadTypes.js +21 -21
  18. package/dist/commonjs/Inputs/IInputController.js +2 -2
  19. package/dist/commonjs/Inputs/InputClassesFactory.js +96 -96
  20. package/dist/commonjs/Inputs/KeyCodes.js +112 -112
  21. package/dist/commonjs/Inputs/KeyboardController.js +137 -137
  22. package/dist/commonjs/Inputs/MouseButtons.js +28 -28
  23. package/dist/commonjs/Inputs/MouseController.js +97 -97
  24. package/dist/commonjs/Inputs/MouseControllerHovering.js +93 -93
  25. package/dist/commonjs/Inputs/MouseControllerLocked.js +153 -153
  26. package/dist/commonjs/Inputs/SpecialKeyCodes.js +19 -19
  27. package/dist/commonjs/Inputs/TouchController.js +123 -123
  28. package/dist/commonjs/Inputs/TouchController.js.map +1 -1
  29. package/dist/commonjs/Inputs/TouchControllerFake.js +91 -91
  30. package/dist/commonjs/Inputs/XRGamepadController.js +124 -124
  31. package/dist/commonjs/PeerConnectionController/AggregatedStats.js +252 -252
  32. package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +10 -10
  33. package/dist/commonjs/PeerConnectionController/CandidateStat.js +10 -10
  34. package/dist/commonjs/PeerConnectionController/CodecStats.js +10 -10
  35. package/dist/commonjs/PeerConnectionController/DataChannelStats.js +10 -10
  36. package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +22 -22
  37. package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +10 -10
  38. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +16 -16
  39. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +584 -584
  40. package/dist/commonjs/PeerConnectionController/SessionStats.js +10 -10
  41. package/dist/commonjs/PeerConnectionController/StreamStats.js +10 -10
  42. package/dist/commonjs/PixelStreaming/PixelStreaming.js +607 -607
  43. package/dist/commonjs/UI/OnScreenKeyboard.js +82 -82
  44. package/dist/commonjs/UeInstanceMessage/ResponseController.js +38 -38
  45. package/dist/commonjs/UeInstanceMessage/SendMessageController.js +120 -120
  46. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +210 -210
  47. package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +49 -49
  48. package/dist/commonjs/Util/EventEmitter.js +386 -386
  49. package/dist/commonjs/Util/FileUtil.js +108 -108
  50. package/dist/commonjs/Util/IURLSearchParams.js +25 -25
  51. package/dist/commonjs/Util/InputCoordTranslator.js +49 -49
  52. package/dist/commonjs/Util/RTCUtils.js +40 -40
  53. package/dist/commonjs/VideoPlayer/StreamController.js +67 -67
  54. package/dist/commonjs/VideoPlayer/VideoPlayer.js +177 -177
  55. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1221 -1221
  56. package/dist/commonjs/WebXR/WebXRController.js +335 -335
  57. package/dist/commonjs/pixelstreamingfrontend.js +70 -70
  58. package/dist/esm/AFK/AFKController.js +105 -105
  59. package/dist/esm/Config/Config.js +551 -551
  60. package/dist/esm/Config/SettingBase.js +94 -94
  61. package/dist/esm/Config/SettingFlag.js +45 -45
  62. package/dist/esm/Config/SettingNumber.js +79 -79
  63. package/dist/esm/Config/SettingOption.js +80 -80
  64. package/dist/esm/Config/SettingText.js +38 -38
  65. package/dist/esm/DataChannel/DataChannelController.js +102 -102
  66. package/dist/esm/DataChannel/DataChannelLatencyTestController.js +90 -90
  67. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +14 -14
  68. package/dist/esm/DataChannel/DataChannelSender.js +39 -39
  69. package/dist/esm/DataChannel/InitialSettings.js +34 -34
  70. package/dist/esm/DataChannel/LatencyTestResults.js +56 -56
  71. package/dist/esm/FreezeFrame/FreezeFrame.js +89 -89
  72. package/dist/esm/FreezeFrame/FreezeFrameController.js +91 -91
  73. package/dist/esm/Inputs/GamepadController.js +184 -184
  74. package/dist/esm/Inputs/GamepadTypes.js +17 -17
  75. package/dist/esm/Inputs/IInputController.js +1 -1
  76. package/dist/esm/Inputs/InputClassesFactory.js +91 -91
  77. package/dist/esm/Inputs/KeyCodes.js +109 -109
  78. package/dist/esm/Inputs/KeyboardController.js +133 -133
  79. package/dist/esm/Inputs/MouseButtons.js +23 -23
  80. package/dist/esm/Inputs/MouseController.js +93 -93
  81. package/dist/esm/Inputs/MouseControllerHovering.js +89 -89
  82. package/dist/esm/Inputs/MouseControllerLocked.js +149 -149
  83. package/dist/esm/Inputs/SpecialKeyCodes.js +15 -15
  84. package/dist/esm/Inputs/TouchController.js +119 -119
  85. package/dist/esm/Inputs/TouchController.js.map +1 -1
  86. package/dist/esm/Inputs/TouchControllerFake.js +87 -87
  87. package/dist/esm/Inputs/XRGamepadController.js +120 -120
  88. package/dist/esm/PeerConnectionController/AggregatedStats.js +248 -248
  89. package/dist/esm/PeerConnectionController/CandidatePairStats.js +6 -6
  90. package/dist/esm/PeerConnectionController/CandidateStat.js +6 -6
  91. package/dist/esm/PeerConnectionController/CodecStats.js +6 -6
  92. package/dist/esm/PeerConnectionController/DataChannelStats.js +6 -6
  93. package/dist/esm/PeerConnectionController/InboundRTPStats.js +16 -16
  94. package/dist/esm/PeerConnectionController/InboundTrackStats.js +6 -6
  95. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +11 -11
  96. package/dist/esm/PeerConnectionController/PeerConnectionController.js +580 -580
  97. package/dist/esm/PeerConnectionController/SessionStats.js +6 -6
  98. package/dist/esm/PeerConnectionController/StreamStats.js +6 -6
  99. package/dist/esm/PixelStreaming/PixelStreaming.js +603 -603
  100. package/dist/esm/UI/OnScreenKeyboard.js +78 -78
  101. package/dist/esm/UeInstanceMessage/ResponseController.js +34 -34
  102. package/dist/esm/UeInstanceMessage/SendMessageController.js +116 -116
  103. package/dist/esm/UeInstanceMessage/StreamMessageController.js +205 -205
  104. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +45 -45
  105. package/dist/esm/Util/EventEmitter.js +345 -345
  106. package/dist/esm/Util/FileUtil.js +103 -103
  107. package/dist/esm/Util/IURLSearchParams.js +21 -21
  108. package/dist/esm/Util/InputCoordTranslator.js +45 -45
  109. package/dist/esm/Util/RTCUtils.js +36 -36
  110. package/dist/esm/VideoPlayer/StreamController.js +63 -63
  111. package/dist/esm/VideoPlayer/VideoPlayer.js +173 -173
  112. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1217 -1217
  113. package/dist/esm/WebXR/WebXRController.js +331 -331
  114. package/dist/esm/pixelstreamingfrontend.js +24 -24
  115. package/dist/types/AFK/AFKController.d.ts +38 -38
  116. package/dist/types/Config/Config.d.ts +220 -220
  117. package/dist/types/Config/SettingBase.d.ts +43 -43
  118. package/dist/types/Config/SettingFlag.d.ts +24 -24
  119. package/dist/types/Config/SettingNumber.d.ts +41 -41
  120. package/dist/types/Config/SettingOption.d.ts +41 -41
  121. package/dist/types/Config/SettingText.d.ts +21 -21
  122. package/dist/types/DataChannel/DataChannelController.d.ts +59 -59
  123. package/dist/types/DataChannel/DataChannelLatencyTestController.d.ts +25 -25
  124. package/dist/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
  125. package/dist/types/DataChannel/DataChannelSender.d.ts +21 -21
  126. package/dist/types/DataChannel/InitialSettings.d.ts +44 -44
  127. package/dist/types/DataChannel/LatencyTestResults.d.ts +31 -31
  128. package/dist/types/FreezeFrame/FreezeFrame.d.ts +36 -36
  129. package/dist/types/FreezeFrame/FreezeFrameController.d.ts +37 -37
  130. package/dist/types/Inputs/GamepadController.d.ts +61 -61
  131. package/dist/types/Inputs/GamepadTypes.d.ts +15 -15
  132. package/dist/types/Inputs/IInputController.d.ts +16 -16
  133. package/dist/types/Inputs/InputClassesFactory.d.ts +53 -53
  134. package/dist/types/Inputs/KeyCodes.d.ts +5 -5
  135. package/dist/types/Inputs/KeyboardController.d.ts +34 -34
  136. package/dist/types/Inputs/MouseButtons.d.ts +22 -22
  137. package/dist/types/Inputs/MouseController.d.ts +40 -40
  138. package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -26
  139. package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -31
  140. package/dist/types/Inputs/SpecialKeyCodes.d.ts +14 -14
  141. package/dist/types/Inputs/TouchController.d.ts +28 -28
  142. package/dist/types/Inputs/TouchControllerFake.d.ts +29 -29
  143. package/dist/types/Inputs/XRGamepadController.d.ts +15 -15
  144. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +82 -82
  145. package/dist/types/PeerConnectionController/CandidatePairStats.d.ts +22 -22
  146. package/dist/types/PeerConnectionController/CandidateStat.d.ts +13 -13
  147. package/dist/types/PeerConnectionController/CodecStats.d.ts +14 -14
  148. package/dist/types/PeerConnectionController/DataChannelStats.d.ts +15 -15
  149. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +141 -141
  150. package/dist/types/PeerConnectionController/InboundTrackStats.d.ts +32 -32
  151. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
  152. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +143 -143
  153. package/dist/types/PeerConnectionController/SessionStats.d.ts +8 -8
  154. package/dist/types/PeerConnectionController/StreamStats.d.ts +9 -9
  155. package/dist/types/PixelStreaming/PixelStreaming.d.ts +271 -271
  156. package/dist/types/UI/OnScreenKeyboard.d.ts +30 -30
  157. package/dist/types/UeInstanceMessage/ResponseController.d.ts +19 -19
  158. package/dist/types/UeInstanceMessage/SendMessageController.d.ts +18 -18
  159. package/dist/types/UeInstanceMessage/StreamMessageController.d.ts +29 -29
  160. package/dist/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
  161. package/dist/types/Util/EventEmitter.d.ts +429 -429
  162. package/dist/types/Util/FileUtil.d.ts +32 -32
  163. package/dist/types/Util/IURLSearchParams.d.ts +9 -9
  164. package/dist/types/Util/InputCoordTranslator.d.ts +29 -29
  165. package/dist/types/Util/RTCUtils.d.ts +8 -8
  166. package/dist/types/VideoPlayer/StreamController.d.ts +22 -22
  167. package/dist/types/VideoPlayer/VideoPlayer.d.ts +78 -78
  168. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -379
  169. package/dist/types/WebXR/WebXRController.d.ts +42 -42
  170. package/dist/types/pixelstreamingfrontend.d.ts +23 -23
  171. package/package.json +45 -45
  172. package/src/Inputs/TouchController.ts +3 -3
@@ -1,88 +1,88 @@
1
- // Copyright Epic Games, Inc. All Rights Reserved.
2
- import { MouseButton } from './MouseButtons';
3
- /**
4
- * Allows for the usage of fake touch events
5
- */
6
- export class TouchControllerFake {
7
- constructor(streamMessageController, videoPlayer, coordinateConverter) {
8
- this.streamMessageController = streamMessageController;
9
- this.videoPlayer = videoPlayer;
10
- this.coordinateConverter = coordinateConverter;
11
- this.onTouchStartListener = this.onTouchStart.bind(this);
12
- this.onTouchEndListener = this.onTouchEnd.bind(this);
13
- this.onTouchMoveListener = this.onTouchMove.bind(this);
14
- this.videoElementParentClientRect = this.videoPlayer.getVideoParentElement().getBoundingClientRect();
15
- }
16
- register() {
17
- document.addEventListener('touchstart', this.onTouchStartListener);
18
- document.addEventListener('touchend', this.onTouchEndListener);
19
- document.addEventListener('touchmove', this.onTouchMoveListener);
20
- }
21
- unregister() {
22
- document.removeEventListener('touchstart', this.onTouchStartListener);
23
- document.removeEventListener('touchend', this.onTouchEndListener);
24
- document.removeEventListener('touchmove', this.onTouchMoveListener);
25
- }
26
- onTouchStart(touch) {
27
- if (!this.videoPlayer.isVideoReady() || touch.target !== this.videoPlayer.getVideoElement()) {
28
- return;
29
- }
30
- if (this.fakeTouchFinger == null) {
31
- const first_touch = touch.changedTouches[0];
32
- this.fakeTouchFinger = {
33
- id: first_touch.identifier,
34
- x: first_touch.clientX - this.videoElementParentClientRect.left,
35
- y: first_touch.clientY - this.videoElementParentClientRect.top
36
- };
37
- const videoElementParent = this.videoPlayer.getVideoParentElement();
38
- const mouseEvent = new MouseEvent('mouseenter', first_touch);
39
- videoElementParent.dispatchEvent(mouseEvent);
40
- const coord = this.coordinateConverter.translateUnsigned(this.fakeTouchFinger.x, this.fakeTouchFinger.y);
41
- const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;
42
- toStreamerHandlers.get('MouseDown')([MouseButton.mainButton, coord.x, coord.y]);
43
- }
44
- touch.preventDefault();
45
- }
46
- onTouchEnd(touchEvent) {
47
- if (!this.videoPlayer.isVideoReady() || this.fakeTouchFinger == null) {
48
- return;
49
- }
50
- const videoElementParent = this.videoPlayer.getVideoParentElement();
51
- const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;
52
- for (let t = 0; t < touchEvent.changedTouches.length; t++) {
53
- const touch = touchEvent.changedTouches[t];
54
- if (touch.identifier === this.fakeTouchFinger.id) {
55
- const x = touch.clientX - this.videoElementParentClientRect.left;
56
- const y = touch.clientY - this.videoElementParentClientRect.top;
57
- const coord = this.coordinateConverter.translateUnsigned(x, y);
58
- toStreamerHandlers.get('MouseUp')([MouseButton.mainButton, coord.x, coord.y]);
59
- const mouseEvent = new MouseEvent('mouseleave', touch);
60
- videoElementParent.dispatchEvent(mouseEvent);
61
- this.fakeTouchFinger = null;
62
- break;
63
- }
64
- }
65
- touchEvent.preventDefault();
66
- }
67
- onTouchMove(touchEvent) {
68
- if (!this.videoPlayer.isVideoReady() || this.fakeTouchFinger == null) {
69
- return;
70
- }
71
- const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;
72
- for (let t = 0; t < touchEvent.touches.length; t++) {
73
- const touch = touchEvent.touches[t];
74
- if (touch.identifier === this.fakeTouchFinger.id) {
75
- const x = touch.clientX - this.videoElementParentClientRect.left;
76
- const y = touch.clientY - this.videoElementParentClientRect.top;
77
- const coord = this.coordinateConverter.translateUnsigned(x, y);
78
- const delta = this.coordinateConverter.translateSigned(x - this.fakeTouchFinger.x, y - this.fakeTouchFinger.y);
79
- toStreamerHandlers.get('MouseMove')([coord.x, coord.y, delta.x, delta.y]);
80
- this.fakeTouchFinger.x = x;
81
- this.fakeTouchFinger.y = y;
82
- break;
83
- }
84
- }
85
- touchEvent.preventDefault();
86
- }
87
- }
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+ import { MouseButton } from './MouseButtons';
3
+ /**
4
+ * Allows for the usage of fake touch events
5
+ */
6
+ export class TouchControllerFake {
7
+ constructor(streamMessageController, videoPlayer, coordinateConverter) {
8
+ this.streamMessageController = streamMessageController;
9
+ this.videoPlayer = videoPlayer;
10
+ this.coordinateConverter = coordinateConverter;
11
+ this.onTouchStartListener = this.onTouchStart.bind(this);
12
+ this.onTouchEndListener = this.onTouchEnd.bind(this);
13
+ this.onTouchMoveListener = this.onTouchMove.bind(this);
14
+ this.videoElementParentClientRect = this.videoPlayer.getVideoParentElement().getBoundingClientRect();
15
+ }
16
+ register() {
17
+ document.addEventListener('touchstart', this.onTouchStartListener);
18
+ document.addEventListener('touchend', this.onTouchEndListener);
19
+ document.addEventListener('touchmove', this.onTouchMoveListener);
20
+ }
21
+ unregister() {
22
+ document.removeEventListener('touchstart', this.onTouchStartListener);
23
+ document.removeEventListener('touchend', this.onTouchEndListener);
24
+ document.removeEventListener('touchmove', this.onTouchMoveListener);
25
+ }
26
+ onTouchStart(touch) {
27
+ if (!this.videoPlayer.isVideoReady() || touch.target !== this.videoPlayer.getVideoElement()) {
28
+ return;
29
+ }
30
+ if (this.fakeTouchFinger == null) {
31
+ const first_touch = touch.changedTouches[0];
32
+ this.fakeTouchFinger = {
33
+ id: first_touch.identifier,
34
+ x: first_touch.clientX - this.videoElementParentClientRect.left,
35
+ y: first_touch.clientY - this.videoElementParentClientRect.top
36
+ };
37
+ const videoElementParent = this.videoPlayer.getVideoParentElement();
38
+ const mouseEvent = new MouseEvent('mouseenter', first_touch);
39
+ videoElementParent.dispatchEvent(mouseEvent);
40
+ const coord = this.coordinateConverter.translateUnsigned(this.fakeTouchFinger.x, this.fakeTouchFinger.y);
41
+ const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;
42
+ toStreamerHandlers.get('MouseDown')([MouseButton.mainButton, coord.x, coord.y]);
43
+ }
44
+ touch.preventDefault();
45
+ }
46
+ onTouchEnd(touchEvent) {
47
+ if (!this.videoPlayer.isVideoReady() || this.fakeTouchFinger == null) {
48
+ return;
49
+ }
50
+ const videoElementParent = this.videoPlayer.getVideoParentElement();
51
+ const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;
52
+ for (let t = 0; t < touchEvent.changedTouches.length; t++) {
53
+ const touch = touchEvent.changedTouches[t];
54
+ if (touch.identifier === this.fakeTouchFinger.id) {
55
+ const x = touch.clientX - this.videoElementParentClientRect.left;
56
+ const y = touch.clientY - this.videoElementParentClientRect.top;
57
+ const coord = this.coordinateConverter.translateUnsigned(x, y);
58
+ toStreamerHandlers.get('MouseUp')([MouseButton.mainButton, coord.x, coord.y]);
59
+ const mouseEvent = new MouseEvent('mouseleave', touch);
60
+ videoElementParent.dispatchEvent(mouseEvent);
61
+ this.fakeTouchFinger = null;
62
+ break;
63
+ }
64
+ }
65
+ touchEvent.preventDefault();
66
+ }
67
+ onTouchMove(touchEvent) {
68
+ if (!this.videoPlayer.isVideoReady() || this.fakeTouchFinger == null) {
69
+ return;
70
+ }
71
+ const toStreamerHandlers = this.streamMessageController.toStreamerHandlers;
72
+ for (let t = 0; t < touchEvent.touches.length; t++) {
73
+ const touch = touchEvent.touches[t];
74
+ if (touch.identifier === this.fakeTouchFinger.id) {
75
+ const x = touch.clientX - this.videoElementParentClientRect.left;
76
+ const y = touch.clientY - this.videoElementParentClientRect.top;
77
+ const coord = this.coordinateConverter.translateUnsigned(x, y);
78
+ const delta = this.coordinateConverter.translateSigned(x - this.fakeTouchFinger.x, y - this.fakeTouchFinger.y);
79
+ toStreamerHandlers.get('MouseMove')([coord.x, coord.y, delta.x, delta.y]);
80
+ this.fakeTouchFinger.x = x;
81
+ this.fakeTouchFinger.y = y;
82
+ break;
83
+ }
84
+ }
85
+ touchEvent.preventDefault();
86
+ }
87
+ }
88
88
  //# sourceMappingURL=TouchControllerFake.js.map
@@ -1,121 +1,121 @@
1
- // Copyright Epic Games, Inc. All Rights Reserved.
2
- import { deepCopyGamepad } from './GamepadTypes';
3
- /**
4
- * The class that handles the functionality of XR gamepads and controllers.
5
- */
6
- export class XRGamepadController {
7
- /**
8
- * @param toStreamerMessagesProvider - Stream message instance
9
- */
10
- constructor(toStreamerMessagesProvider) {
11
- this.toStreamerMessagesProvider = toStreamerMessagesProvider;
12
- this.controllers = [];
13
- }
14
- updateStatus(source, frame, refSpace) {
15
- if (source.gamepad) {
16
- const gamepadPose = frame.getPose(source.gripSpace, refSpace);
17
- if (!gamepadPose) {
18
- return;
19
- }
20
- let system = 0;
21
- if (source.profiles.includes('htc-vive')) {
22
- system = 1;
23
- }
24
- else if (source.profiles.includes('oculus-touch')) {
25
- system = 2;
26
- }
27
- // TODO (william.belcher): Add other profiles (Quest, Microsoft Mixed Reality, etc)
28
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRSystem')([system]);
29
- // Default: AnyHand (2)
30
- let handedness = 2;
31
- switch (source.handedness) {
32
- case 'left':
33
- handedness = 0;
34
- break;
35
- case 'right':
36
- handedness = 1;
37
- break;
38
- }
39
- // Send controller transform
40
- const matrix = gamepadPose.transform.matrix;
41
- const mat = [];
42
- for (let i = 0; i < 16; i++) {
43
- mat[i] = new Float32Array([matrix[i]])[0];
44
- }
45
- // prettier-ignore
46
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRControllerTransform')([
47
- mat[0], mat[4], mat[8], mat[12],
48
- mat[1], mat[5], mat[9], mat[13],
49
- mat[2], mat[6], mat[10], mat[14],
50
- mat[3], mat[7], mat[11], mat[15],
51
- handedness
52
- ]);
53
- // Handle controller buttons and axes
54
- if (this.controllers[handedness] === undefined) {
55
- this.controllers[handedness] = {
56
- prevState: undefined,
57
- currentState: undefined,
58
- id: undefined
59
- };
60
- this.controllers[handedness].prevState = deepCopyGamepad(source.gamepad);
61
- }
62
- this.controllers[handedness].currentState = deepCopyGamepad(source.gamepad);
63
- const controller = this.controllers[handedness];
64
- const currState = controller.currentState;
65
- const prevState = controller.prevState;
66
- // Iterate over buttons
67
- for (let i = 0; i < currState.buttons.length; i++) {
68
- const currButton = currState.buttons[i];
69
- const prevButton = prevState.buttons[i];
70
- if (currButton.pressed) {
71
- // press
72
- const isRepeat = prevButton.pressed ? 1 : 0;
73
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonPressed')([
74
- handedness,
75
- i,
76
- isRepeat,
77
- currButton.value
78
- ]);
79
- }
80
- else if (prevButton.pressed) {
81
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonReleased')([
82
- handedness,
83
- i,
84
- 0
85
- ]);
86
- }
87
- if (currButton.touched) {
88
- // touched
89
- const isRepeat = prevButton.touched ? 1 : 0;
90
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonTouched')([
91
- handedness,
92
- i,
93
- isRepeat
94
- ]);
95
- }
96
- else if (prevButton.touched) {
97
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonTouchReleased')([
98
- handedness,
99
- i,
100
- 0
101
- ]);
102
- }
103
- }
104
- // Iterate over gamepad axes
105
- for (let i = 0; i < currState.axes.length; i++) {
106
- const curAxisValue = currState.axes[i];
107
- const prevAxisValue = prevState.axes[i];
108
- // Only send axis update if there is a change
109
- if (curAxisValue != prevAxisValue) {
110
- this.toStreamerMessagesProvider.toStreamerHandlers.get('XRAnalog')([
111
- handedness,
112
- i,
113
- curAxisValue
114
- ]);
115
- }
116
- }
117
- this.controllers[handedness].prevState = currState;
118
- }
119
- }
120
- }
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+ import { deepCopyGamepad } from './GamepadTypes';
3
+ /**
4
+ * The class that handles the functionality of XR gamepads and controllers.
5
+ */
6
+ export class XRGamepadController {
7
+ /**
8
+ * @param toStreamerMessagesProvider - Stream message instance
9
+ */
10
+ constructor(toStreamerMessagesProvider) {
11
+ this.toStreamerMessagesProvider = toStreamerMessagesProvider;
12
+ this.controllers = [];
13
+ }
14
+ updateStatus(source, frame, refSpace) {
15
+ if (source.gamepad) {
16
+ const gamepadPose = frame.getPose(source.gripSpace, refSpace);
17
+ if (!gamepadPose) {
18
+ return;
19
+ }
20
+ let system = 0;
21
+ if (source.profiles.includes('htc-vive')) {
22
+ system = 1;
23
+ }
24
+ else if (source.profiles.includes('oculus-touch')) {
25
+ system = 2;
26
+ }
27
+ // TODO (william.belcher): Add other profiles (Quest, Microsoft Mixed Reality, etc)
28
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRSystem')([system]);
29
+ // Default: AnyHand (2)
30
+ let handedness = 2;
31
+ switch (source.handedness) {
32
+ case 'left':
33
+ handedness = 0;
34
+ break;
35
+ case 'right':
36
+ handedness = 1;
37
+ break;
38
+ }
39
+ // Send controller transform
40
+ const matrix = gamepadPose.transform.matrix;
41
+ const mat = [];
42
+ for (let i = 0; i < 16; i++) {
43
+ mat[i] = new Float32Array([matrix[i]])[0];
44
+ }
45
+ // prettier-ignore
46
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRControllerTransform')([
47
+ mat[0], mat[4], mat[8], mat[12],
48
+ mat[1], mat[5], mat[9], mat[13],
49
+ mat[2], mat[6], mat[10], mat[14],
50
+ mat[3], mat[7], mat[11], mat[15],
51
+ handedness
52
+ ]);
53
+ // Handle controller buttons and axes
54
+ if (this.controllers[handedness] === undefined) {
55
+ this.controllers[handedness] = {
56
+ prevState: undefined,
57
+ currentState: undefined,
58
+ id: undefined
59
+ };
60
+ this.controllers[handedness].prevState = deepCopyGamepad(source.gamepad);
61
+ }
62
+ this.controllers[handedness].currentState = deepCopyGamepad(source.gamepad);
63
+ const controller = this.controllers[handedness];
64
+ const currState = controller.currentState;
65
+ const prevState = controller.prevState;
66
+ // Iterate over buttons
67
+ for (let i = 0; i < currState.buttons.length; i++) {
68
+ const currButton = currState.buttons[i];
69
+ const prevButton = prevState.buttons[i];
70
+ if (currButton.pressed) {
71
+ // press
72
+ const isRepeat = prevButton.pressed ? 1 : 0;
73
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonPressed')([
74
+ handedness,
75
+ i,
76
+ isRepeat,
77
+ currButton.value
78
+ ]);
79
+ }
80
+ else if (prevButton.pressed) {
81
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonReleased')([
82
+ handedness,
83
+ i,
84
+ 0
85
+ ]);
86
+ }
87
+ if (currButton.touched) {
88
+ // touched
89
+ const isRepeat = prevButton.touched ? 1 : 0;
90
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonTouched')([
91
+ handedness,
92
+ i,
93
+ isRepeat
94
+ ]);
95
+ }
96
+ else if (prevButton.touched) {
97
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRButtonTouchReleased')([
98
+ handedness,
99
+ i,
100
+ 0
101
+ ]);
102
+ }
103
+ }
104
+ // Iterate over gamepad axes
105
+ for (let i = 0; i < currState.axes.length; i++) {
106
+ const curAxisValue = currState.axes[i];
107
+ const prevAxisValue = prevState.axes[i];
108
+ // Only send axis update if there is a change
109
+ if (curAxisValue != prevAxisValue) {
110
+ this.toStreamerMessagesProvider.toStreamerHandlers.get('XRAnalog')([
111
+ handedness,
112
+ i,
113
+ curAxisValue
114
+ ]);
115
+ }
116
+ }
117
+ this.controllers[handedness].prevState = currState;
118
+ }
119
+ }
120
+ }
121
121
  //# sourceMappingURL=XRGamepadController.js.map