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

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 (169) 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/TouchControllerFake.js +91 -91
  29. package/dist/commonjs/Inputs/XRGamepadController.js +124 -124
  30. package/dist/commonjs/PeerConnectionController/AggregatedStats.js +252 -252
  31. package/dist/commonjs/PeerConnectionController/CandidatePairStats.js +10 -10
  32. package/dist/commonjs/PeerConnectionController/CandidateStat.js +10 -10
  33. package/dist/commonjs/PeerConnectionController/CodecStats.js +10 -10
  34. package/dist/commonjs/PeerConnectionController/DataChannelStats.js +10 -10
  35. package/dist/commonjs/PeerConnectionController/InboundRTPStats.js +22 -22
  36. package/dist/commonjs/PeerConnectionController/InboundTrackStats.js +10 -10
  37. package/dist/commonjs/PeerConnectionController/OutBoundRTPStats.js +16 -16
  38. package/dist/commonjs/PeerConnectionController/PeerConnectionController.js +584 -584
  39. package/dist/commonjs/PeerConnectionController/SessionStats.js +10 -10
  40. package/dist/commonjs/PeerConnectionController/StreamStats.js +10 -10
  41. package/dist/commonjs/PixelStreaming/PixelStreaming.js +607 -607
  42. package/dist/commonjs/UI/OnScreenKeyboard.js +82 -82
  43. package/dist/commonjs/UeInstanceMessage/ResponseController.js +38 -38
  44. package/dist/commonjs/UeInstanceMessage/SendMessageController.js +120 -120
  45. package/dist/commonjs/UeInstanceMessage/StreamMessageController.js +210 -210
  46. package/dist/commonjs/UeInstanceMessage/ToStreamerMessagesController.js +49 -49
  47. package/dist/commonjs/Util/EventEmitter.js +386 -386
  48. package/dist/commonjs/Util/FileUtil.js +108 -108
  49. package/dist/commonjs/Util/IURLSearchParams.js +25 -25
  50. package/dist/commonjs/Util/InputCoordTranslator.js +49 -49
  51. package/dist/commonjs/Util/RTCUtils.js +40 -40
  52. package/dist/commonjs/VideoPlayer/StreamController.js +67 -67
  53. package/dist/commonjs/VideoPlayer/VideoPlayer.js +177 -177
  54. package/dist/commonjs/WebRtcPlayer/WebRtcPlayerController.js +1221 -1221
  55. package/dist/commonjs/WebXR/WebXRController.js +335 -335
  56. package/dist/commonjs/pixelstreamingfrontend.js +70 -70
  57. package/dist/esm/AFK/AFKController.js +105 -105
  58. package/dist/esm/Config/Config.js +551 -551
  59. package/dist/esm/Config/SettingBase.js +94 -94
  60. package/dist/esm/Config/SettingFlag.js +45 -45
  61. package/dist/esm/Config/SettingNumber.js +79 -79
  62. package/dist/esm/Config/SettingOption.js +80 -80
  63. package/dist/esm/Config/SettingText.js +38 -38
  64. package/dist/esm/DataChannel/DataChannelController.js +102 -102
  65. package/dist/esm/DataChannel/DataChannelLatencyTestController.js +90 -90
  66. package/dist/esm/DataChannel/DataChannelLatencyTestResults.js +14 -14
  67. package/dist/esm/DataChannel/DataChannelSender.js +39 -39
  68. package/dist/esm/DataChannel/InitialSettings.js +34 -34
  69. package/dist/esm/DataChannel/LatencyTestResults.js +56 -56
  70. package/dist/esm/FreezeFrame/FreezeFrame.js +89 -89
  71. package/dist/esm/FreezeFrame/FreezeFrameController.js +91 -91
  72. package/dist/esm/Inputs/GamepadController.js +184 -184
  73. package/dist/esm/Inputs/GamepadTypes.js +17 -17
  74. package/dist/esm/Inputs/IInputController.js +1 -1
  75. package/dist/esm/Inputs/InputClassesFactory.js +91 -91
  76. package/dist/esm/Inputs/KeyCodes.js +109 -109
  77. package/dist/esm/Inputs/KeyboardController.js +133 -133
  78. package/dist/esm/Inputs/MouseButtons.js +23 -23
  79. package/dist/esm/Inputs/MouseController.js +93 -93
  80. package/dist/esm/Inputs/MouseControllerHovering.js +89 -89
  81. package/dist/esm/Inputs/MouseControllerLocked.js +149 -149
  82. package/dist/esm/Inputs/SpecialKeyCodes.js +15 -15
  83. package/dist/esm/Inputs/TouchController.js +119 -119
  84. package/dist/esm/Inputs/TouchControllerFake.js +87 -87
  85. package/dist/esm/Inputs/XRGamepadController.js +120 -120
  86. package/dist/esm/PeerConnectionController/AggregatedStats.js +248 -248
  87. package/dist/esm/PeerConnectionController/CandidatePairStats.js +6 -6
  88. package/dist/esm/PeerConnectionController/CandidateStat.js +6 -6
  89. package/dist/esm/PeerConnectionController/CodecStats.js +6 -6
  90. package/dist/esm/PeerConnectionController/DataChannelStats.js +6 -6
  91. package/dist/esm/PeerConnectionController/InboundRTPStats.js +16 -16
  92. package/dist/esm/PeerConnectionController/InboundTrackStats.js +6 -6
  93. package/dist/esm/PeerConnectionController/OutBoundRTPStats.js +11 -11
  94. package/dist/esm/PeerConnectionController/PeerConnectionController.js +580 -580
  95. package/dist/esm/PeerConnectionController/SessionStats.js +6 -6
  96. package/dist/esm/PeerConnectionController/StreamStats.js +6 -6
  97. package/dist/esm/PixelStreaming/PixelStreaming.js +603 -603
  98. package/dist/esm/UI/OnScreenKeyboard.js +78 -78
  99. package/dist/esm/UeInstanceMessage/ResponseController.js +34 -34
  100. package/dist/esm/UeInstanceMessage/SendMessageController.js +116 -116
  101. package/dist/esm/UeInstanceMessage/StreamMessageController.js +205 -205
  102. package/dist/esm/UeInstanceMessage/ToStreamerMessagesController.js +45 -45
  103. package/dist/esm/Util/EventEmitter.js +345 -345
  104. package/dist/esm/Util/FileUtil.js +103 -103
  105. package/dist/esm/Util/IURLSearchParams.js +21 -21
  106. package/dist/esm/Util/InputCoordTranslator.js +45 -45
  107. package/dist/esm/Util/RTCUtils.js +36 -36
  108. package/dist/esm/VideoPlayer/StreamController.js +63 -63
  109. package/dist/esm/VideoPlayer/VideoPlayer.js +173 -173
  110. package/dist/esm/WebRtcPlayer/WebRtcPlayerController.js +1217 -1217
  111. package/dist/esm/WebXR/WebXRController.js +331 -331
  112. package/dist/esm/pixelstreamingfrontend.js +24 -24
  113. package/dist/types/AFK/AFKController.d.ts +38 -38
  114. package/dist/types/Config/Config.d.ts +220 -220
  115. package/dist/types/Config/SettingBase.d.ts +43 -43
  116. package/dist/types/Config/SettingFlag.d.ts +24 -24
  117. package/dist/types/Config/SettingNumber.d.ts +41 -41
  118. package/dist/types/Config/SettingOption.d.ts +41 -41
  119. package/dist/types/Config/SettingText.d.ts +21 -21
  120. package/dist/types/DataChannel/DataChannelController.d.ts +59 -59
  121. package/dist/types/DataChannel/DataChannelLatencyTestController.d.ts +25 -25
  122. package/dist/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -46
  123. package/dist/types/DataChannel/DataChannelSender.d.ts +21 -21
  124. package/dist/types/DataChannel/InitialSettings.d.ts +44 -44
  125. package/dist/types/DataChannel/LatencyTestResults.d.ts +31 -31
  126. package/dist/types/FreezeFrame/FreezeFrame.d.ts +36 -36
  127. package/dist/types/FreezeFrame/FreezeFrameController.d.ts +37 -37
  128. package/dist/types/Inputs/GamepadController.d.ts +61 -61
  129. package/dist/types/Inputs/GamepadTypes.d.ts +15 -15
  130. package/dist/types/Inputs/IInputController.d.ts +16 -16
  131. package/dist/types/Inputs/InputClassesFactory.d.ts +53 -53
  132. package/dist/types/Inputs/KeyCodes.d.ts +5 -5
  133. package/dist/types/Inputs/KeyboardController.d.ts +34 -34
  134. package/dist/types/Inputs/MouseButtons.d.ts +22 -22
  135. package/dist/types/Inputs/MouseController.d.ts +40 -40
  136. package/dist/types/Inputs/MouseControllerHovering.d.ts +26 -26
  137. package/dist/types/Inputs/MouseControllerLocked.d.ts +31 -31
  138. package/dist/types/Inputs/SpecialKeyCodes.d.ts +14 -14
  139. package/dist/types/Inputs/TouchController.d.ts +28 -28
  140. package/dist/types/Inputs/TouchControllerFake.d.ts +29 -29
  141. package/dist/types/Inputs/XRGamepadController.d.ts +15 -15
  142. package/dist/types/PeerConnectionController/AggregatedStats.d.ts +82 -82
  143. package/dist/types/PeerConnectionController/CandidatePairStats.d.ts +22 -22
  144. package/dist/types/PeerConnectionController/CandidateStat.d.ts +13 -13
  145. package/dist/types/PeerConnectionController/CodecStats.d.ts +14 -14
  146. package/dist/types/PeerConnectionController/DataChannelStats.d.ts +15 -15
  147. package/dist/types/PeerConnectionController/InboundRTPStats.d.ts +141 -141
  148. package/dist/types/PeerConnectionController/InboundTrackStats.d.ts +32 -32
  149. package/dist/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -23
  150. package/dist/types/PeerConnectionController/PeerConnectionController.d.ts +143 -143
  151. package/dist/types/PeerConnectionController/SessionStats.d.ts +8 -8
  152. package/dist/types/PeerConnectionController/StreamStats.d.ts +9 -9
  153. package/dist/types/PixelStreaming/PixelStreaming.d.ts +271 -271
  154. package/dist/types/UI/OnScreenKeyboard.d.ts +30 -30
  155. package/dist/types/UeInstanceMessage/ResponseController.d.ts +19 -19
  156. package/dist/types/UeInstanceMessage/SendMessageController.d.ts +18 -18
  157. package/dist/types/UeInstanceMessage/StreamMessageController.d.ts +29 -29
  158. package/dist/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -32
  159. package/dist/types/Util/EventEmitter.d.ts +429 -429
  160. package/dist/types/Util/FileUtil.d.ts +32 -32
  161. package/dist/types/Util/IURLSearchParams.d.ts +9 -9
  162. package/dist/types/Util/InputCoordTranslator.d.ts +29 -29
  163. package/dist/types/Util/RTCUtils.d.ts +8 -8
  164. package/dist/types/VideoPlayer/StreamController.d.ts +22 -22
  165. package/dist/types/VideoPlayer/VideoPlayer.d.ts +78 -78
  166. package/dist/types/WebRtcPlayer/WebRtcPlayerController.d.ts +379 -379
  167. package/dist/types/WebXR/WebXRController.d.ts +42 -42
  168. package/dist/types/pixelstreamingfrontend.d.ts +23 -23
  169. package/package.json +45 -45
@@ -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