@epicgames-ps/lib-pixelstreamingfrontend-ue5.5 0.0.5

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 (138) hide show
  1. package/.cspell.json +48 -0
  2. package/.eslintignore +8 -0
  3. package/.eslintrc.js +8 -0
  4. package/.prettierignore +0 -0
  5. package/.prettierrc.json +6 -0
  6. package/dist/lib-pixelstreamingfrontend.esm.js +1 -0
  7. package/dist/lib-pixelstreamingfrontend.js +1 -0
  8. package/jest.config.js +18 -0
  9. package/package.json +48 -0
  10. package/readme.md +15 -0
  11. package/src/AFK/AFKController.test.ts +162 -0
  12. package/src/AFK/AFKController.ts +158 -0
  13. package/src/Config/Config.test.ts +222 -0
  14. package/src/Config/Config.ts +970 -0
  15. package/src/Config/SettingBase.ts +65 -0
  16. package/src/Config/SettingFlag.ts +99 -0
  17. package/src/Config/SettingNumber.ts +111 -0
  18. package/src/Config/SettingOption.ts +124 -0
  19. package/src/Config/SettingText.ts +82 -0
  20. package/src/DataChannel/DataChannelController.ts +138 -0
  21. package/src/DataChannel/DataChannelLatencyTestController.ts +129 -0
  22. package/src/DataChannel/DataChannelLatencyTestResults.ts +67 -0
  23. package/src/DataChannel/DataChannelSender.ts +59 -0
  24. package/src/DataChannel/InitialSettings.ts +61 -0
  25. package/src/DataChannel/LatencyTestResults.ts +76 -0
  26. package/src/FreezeFrame/FreezeFrame.ts +114 -0
  27. package/src/FreezeFrame/FreezeFrameController.ts +114 -0
  28. package/src/Inputs/FakeTouchController.ts +199 -0
  29. package/src/Inputs/GamepadController.ts +314 -0
  30. package/src/Inputs/GamepadTypes.ts +10 -0
  31. package/src/Inputs/HoveringMouseEvents.ts +192 -0
  32. package/src/Inputs/IMouseEvents.ts +64 -0
  33. package/src/Inputs/ITouchController.ts +29 -0
  34. package/src/Inputs/InputClassesFactory.ts +140 -0
  35. package/src/Inputs/KeyboardController.ts +354 -0
  36. package/src/Inputs/LockedMouseEvents.ts +287 -0
  37. package/src/Inputs/MouseButtons.ts +25 -0
  38. package/src/Inputs/MouseController.ts +362 -0
  39. package/src/Inputs/SpecialKeyCodes.ts +16 -0
  40. package/src/Inputs/TouchController.ts +208 -0
  41. package/src/Inputs/XRGamepadController.ts +126 -0
  42. package/src/PeerConnectionController/AggregatedStats.ts +311 -0
  43. package/src/PeerConnectionController/CandidatePairStats.ts +17 -0
  44. package/src/PeerConnectionController/CandidateStat.ts +13 -0
  45. package/src/PeerConnectionController/CodecStats.ts +19 -0
  46. package/src/PeerConnectionController/DataChannelStats.ts +17 -0
  47. package/src/PeerConnectionController/InboundRTPStats.ts +154 -0
  48. package/src/PeerConnectionController/InboundTrackStats.ts +34 -0
  49. package/src/PeerConnectionController/OutBoundRTPStats.ts +26 -0
  50. package/src/PeerConnectionController/PeerConnectionController.ts +563 -0
  51. package/src/PeerConnectionController/SessionStats.ts +10 -0
  52. package/src/PeerConnectionController/StreamStats.ts +11 -0
  53. package/src/PixelStreaming/PixelStreaming.test.ts +626 -0
  54. package/src/PixelStreaming/PixelStreaming.ts +851 -0
  55. package/src/UI/OnScreenKeyboard.ts +97 -0
  56. package/src/UeInstanceMessage/ResponseController.ts +47 -0
  57. package/src/UeInstanceMessage/SendMessageController.ts +154 -0
  58. package/src/UeInstanceMessage/StreamMessageController.ts +233 -0
  59. package/src/UeInstanceMessage/ToStreamerMessagesController.ts +62 -0
  60. package/src/Util/CoordinateConverter.ts +289 -0
  61. package/src/Util/EventEmitter.ts +611 -0
  62. package/src/Util/EventListenerTracker.ts +29 -0
  63. package/src/Util/FileUtil.ts +140 -0
  64. package/src/Util/RTCUtils.ts +41 -0
  65. package/src/Util/WebGLUtils.ts +49 -0
  66. package/src/Util/WebXRUtils.ts +25 -0
  67. package/src/VideoPlayer/StreamController.ts +89 -0
  68. package/src/VideoPlayer/VideoPlayer.ts +246 -0
  69. package/src/WebRtcPlayer/WebRtcPlayerController.ts +2158 -0
  70. package/src/WebXR/WebXRController.ts +319 -0
  71. package/src/__test__/mockMediaStream.ts +124 -0
  72. package/src/__test__/mockRTCPeerConnection.ts +347 -0
  73. package/src/__test__/mockRTCRtpReceiver.ts +22 -0
  74. package/src/__test__/mockWebSocket.ts +136 -0
  75. package/src/pixelstreamingfrontend.ts +46 -0
  76. package/tsconfig.jest.json +8 -0
  77. package/tsconfig.json +24 -0
  78. package/types/AFK/AFKController.d.ts +39 -0
  79. package/types/Config/Config.d.ts +218 -0
  80. package/types/Config/SettingBase.d.ts +30 -0
  81. package/types/Config/SettingFlag.d.ts +33 -0
  82. package/types/Config/SettingNumber.d.ts +45 -0
  83. package/types/Config/SettingOption.d.ts +43 -0
  84. package/types/Config/SettingText.d.ts +29 -0
  85. package/types/DataChannel/DataChannelController.d.ts +59 -0
  86. package/types/DataChannel/DataChannelLatencyTestController.d.ts +26 -0
  87. package/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -0
  88. package/types/DataChannel/DataChannelSender.d.ts +21 -0
  89. package/types/DataChannel/InitialSettings.d.ts +44 -0
  90. package/types/DataChannel/LatencyTestResults.d.ts +31 -0
  91. package/types/FreezeFrame/FreezeFrame.d.ts +36 -0
  92. package/types/FreezeFrame/FreezeFrameController.d.ts +37 -0
  93. package/types/Inputs/FakeTouchController.d.ts +61 -0
  94. package/types/Inputs/GamepadController.d.ts +85 -0
  95. package/types/Inputs/GamepadTypes.d.ts +8 -0
  96. package/types/Inputs/HoveringMouseEvents.d.ts +56 -0
  97. package/types/Inputs/IMouseEvents.d.ts +53 -0
  98. package/types/Inputs/ITouchController.d.ts +24 -0
  99. package/types/Inputs/InputClassesFactory.d.ts +54 -0
  100. package/types/Inputs/KeyboardController.d.ts +62 -0
  101. package/types/Inputs/LockedMouseEvents.d.ts +80 -0
  102. package/types/Inputs/MouseButtons.d.ts +22 -0
  103. package/types/Inputs/MouseController.d.ts +75 -0
  104. package/types/Inputs/SpecialKeyCodes.d.ts +14 -0
  105. package/types/Inputs/TouchController.d.ts +53 -0
  106. package/types/Inputs/XRGamepadController.d.ts +15 -0
  107. package/types/PeerConnectionController/AggregatedStats.d.ts +77 -0
  108. package/types/PeerConnectionController/CandidatePairStats.d.ts +15 -0
  109. package/types/PeerConnectionController/CandidateStat.d.ts +11 -0
  110. package/types/PeerConnectionController/CodecStats.d.ts +14 -0
  111. package/types/PeerConnectionController/DataChannelStats.d.ts +15 -0
  112. package/types/PeerConnectionController/InboundRTPStats.d.ts +141 -0
  113. package/types/PeerConnectionController/InboundTrackStats.d.ts +32 -0
  114. package/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -0
  115. package/types/PeerConnectionController/PeerConnectionController.d.ts +132 -0
  116. package/types/PeerConnectionController/SessionStats.d.ts +8 -0
  117. package/types/PeerConnectionController/StreamStats.d.ts +9 -0
  118. package/types/PixelStreaming/PixelStreaming.d.ts +259 -0
  119. package/types/UI/OnScreenKeyboard.d.ts +31 -0
  120. package/types/UeInstanceMessage/ResponseController.d.ts +19 -0
  121. package/types/UeInstanceMessage/SendMessageController.d.ts +18 -0
  122. package/types/UeInstanceMessage/StreamMessageController.d.ts +29 -0
  123. package/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -0
  124. package/types/Util/CoordinateConverter.d.ts +100 -0
  125. package/types/Util/EventEmitter.d.ts +422 -0
  126. package/types/Util/EventListenerTracker.d.ts +14 -0
  127. package/types/Util/FileUtil.d.ts +32 -0
  128. package/types/Util/RTCUtils.d.ts +8 -0
  129. package/types/Util/WebGLUtils.d.ts +4 -0
  130. package/types/Util/WebXRUtils.d.ts +9 -0
  131. package/types/VideoPlayer/StreamController.d.ts +24 -0
  132. package/types/VideoPlayer/VideoPlayer.d.ts +78 -0
  133. package/types/WebRtcPlayer/WebRtcPlayerController.d.ts +377 -0
  134. package/types/WebXR/WebXRController.d.ts +26 -0
  135. package/types/pixelstreamingfrontend.d.ts +22 -0
  136. package/webpack.common.js +35 -0
  137. package/webpack.dev.js +35 -0
  138. package/webpack.prod.js +36 -0
@@ -0,0 +1,192 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ import { MouseController } from './MouseController';
4
+ import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
5
+ import { IMouseEvents } from './IMouseEvents';
6
+
7
+ /**
8
+ * Video Player mouse Hover handler
9
+ */
10
+ export class HoveringMouseEvents implements IMouseEvents {
11
+ mouseController: MouseController;
12
+
13
+ /**
14
+ * @param mouseController - Mouse Controller instance
15
+ */
16
+ constructor(mouseController: MouseController) {
17
+ this.mouseController = mouseController;
18
+ }
19
+
20
+ /**
21
+ * Unregister event handlers
22
+ */
23
+ unregisterMouseEvents(): void {
24
+ // empty for HoveringMouseEvents implementation
25
+ }
26
+
27
+ /**
28
+ * Handle the mouse move event, sends the mouse data to the UE Instance
29
+ * @param mouseEvent - Mouse Event
30
+ */
31
+ updateMouseMovePosition(mouseEvent: MouseEvent) {
32
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
33
+ return;
34
+ }
35
+ Logger.Log(Logger.GetStackTrace(), 'MouseMove', 6);
36
+ const coord =
37
+ this.mouseController.coordinateConverter.normalizeAndQuantizeUnsigned(
38
+ mouseEvent.offsetX,
39
+ mouseEvent.offsetY
40
+ );
41
+ const delta =
42
+ this.mouseController.coordinateConverter.normalizeAndQuantizeSigned(
43
+ mouseEvent.movementX,
44
+ mouseEvent.movementY
45
+ );
46
+ const toStreamerHandlers =
47
+ this.mouseController.toStreamerMessagesProvider.toStreamerHandlers;
48
+ toStreamerHandlers.get('MouseMove')([
49
+ coord.x,
50
+ coord.y,
51
+ delta.x,
52
+ delta.y
53
+ ]);
54
+ mouseEvent.preventDefault();
55
+ }
56
+
57
+ /**
58
+ * Handle the mouse Down event, sends the mouse data to the UE Instance
59
+ * @param mouseEvent - Mouse Event
60
+ */
61
+ handleMouseDown(mouseEvent: MouseEvent) {
62
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
63
+ return;
64
+ }
65
+ Logger.Log(Logger.GetStackTrace(), 'onMouse Down', 6);
66
+ const coord =
67
+ this.mouseController.coordinateConverter.normalizeAndQuantizeUnsigned(
68
+ mouseEvent.offsetX,
69
+ mouseEvent.offsetY
70
+ );
71
+ const toStreamerHandlers =
72
+ this.mouseController.toStreamerMessagesProvider.toStreamerHandlers;
73
+ toStreamerHandlers.get('MouseDown')([
74
+ mouseEvent.button,
75
+ coord.x,
76
+ coord.y
77
+ ]);
78
+ mouseEvent.preventDefault();
79
+ }
80
+
81
+ /**
82
+ * Handle the mouse Up event, sends the mouse data to the UE Instance
83
+ * @param mouseEvent - Mouse Event
84
+ */
85
+ handleMouseUp(mouseEvent: MouseEvent) {
86
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
87
+ return;
88
+ }
89
+ Logger.Log(Logger.GetStackTrace(), 'onMouse Up', 6);
90
+ const coord =
91
+ this.mouseController.coordinateConverter.normalizeAndQuantizeUnsigned(
92
+ mouseEvent.offsetX,
93
+ mouseEvent.offsetY
94
+ );
95
+ const toStreamerHandlers =
96
+ this.mouseController.toStreamerMessagesProvider.toStreamerHandlers;
97
+ toStreamerHandlers.get('MouseUp')([
98
+ mouseEvent.button,
99
+ coord.x,
100
+ coord.y
101
+ ]);
102
+ mouseEvent.preventDefault();
103
+ }
104
+
105
+ /**
106
+ * Consumes the mouse context event. The UE instance has no equivalent and doesn't need to be informed.
107
+ * @param mouseEvent - Mouse Event
108
+ */
109
+ handleContextMenu(mouseEvent: MouseEvent) {
110
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
111
+ return;
112
+ }
113
+ mouseEvent.preventDefault();
114
+ }
115
+
116
+ /**
117
+ * Handle the mouse wheel event, sends the mouse wheel data to the UE Instance
118
+ * @param wheelEvent - Mouse Event
119
+ */
120
+ handleMouseWheel(wheelEvent: WheelEvent) {
121
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
122
+ return;
123
+ }
124
+ const coord =
125
+ this.mouseController.coordinateConverter.normalizeAndQuantizeUnsigned(
126
+ wheelEvent.offsetX,
127
+ wheelEvent.offsetY
128
+ );
129
+ const toStreamerHandlers =
130
+ this.mouseController.toStreamerMessagesProvider.toStreamerHandlers;
131
+ toStreamerHandlers.get('MouseWheel')([
132
+ wheelEvent.wheelDelta,
133
+ coord.x,
134
+ coord.y
135
+ ]);
136
+ wheelEvent.preventDefault();
137
+ }
138
+
139
+ /**
140
+ * Handle the mouse double click event, sends the mouse data to the UE Instance
141
+ * @param mouseEvent - Mouse Event
142
+ */
143
+ handleMouseDouble(mouseEvent: MouseEvent) {
144
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
145
+ return;
146
+ }
147
+ const coord =
148
+ this.mouseController.coordinateConverter.normalizeAndQuantizeUnsigned(
149
+ mouseEvent.offsetX,
150
+ mouseEvent.offsetY
151
+ );
152
+ const toStreamerHandlers =
153
+ this.mouseController.toStreamerMessagesProvider.toStreamerHandlers;
154
+ toStreamerHandlers.get('MouseDouble')([
155
+ mouseEvent.button,
156
+ coord.x,
157
+ coord.y
158
+ ]);
159
+ }
160
+
161
+ /**
162
+ * Handle the press mouse buttons event, sends the mouse data to the UE Instance
163
+ * @param mouseEvent - Mouse Event
164
+ */
165
+ handlePressMouseButtons(mouseEvent: MouseEvent) {
166
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
167
+ return;
168
+ }
169
+ Logger.Log(Logger.GetStackTrace(), 'onMouse press', 6);
170
+ this.mouseController.pressMouseButtons(
171
+ mouseEvent.buttons,
172
+ mouseEvent.offsetX,
173
+ mouseEvent.offsetY
174
+ );
175
+ }
176
+
177
+ /**
178
+ * Handle the release mouse buttons event, sends the mouse data to the UE Instance
179
+ * @param mouseEvent - Mouse Event
180
+ */
181
+ handleReleaseMouseButtons(mouseEvent: MouseEvent) {
182
+ if (!this.mouseController.videoElementProvider.isVideoReady()) {
183
+ return;
184
+ }
185
+ Logger.Log(Logger.GetStackTrace(), 'onMouse release', 6);
186
+ this.mouseController.releaseMouseButtons(
187
+ mouseEvent.buttons,
188
+ mouseEvent.offsetX,
189
+ mouseEvent.offsetY
190
+ );
191
+ }
192
+ }
@@ -0,0 +1,64 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ /**
4
+ * Interface for Mouse Events
5
+ */
6
+ export interface IMouseEvents {
7
+ /**
8
+ * Handle when the locked state Changed
9
+ */
10
+ lockStateChange?(): void;
11
+
12
+ /**
13
+ * Handle when the mouse move
14
+ * @param mouseEvent - Mouse Event
15
+ */
16
+ updateMouseMovePosition?(mouseEvent: MouseEvent): void;
17
+
18
+ /**
19
+ * Handle when the Button Down
20
+ * @param mouseEvent - Mouse Event
21
+ */
22
+ handleMouseDown(mouseEvent: MouseEvent): void;
23
+
24
+ /**
25
+ * Handle when the button up
26
+ * @param mouseEvent - Mouse Event
27
+ */
28
+ handleMouseUp(mouseEvent: MouseEvent): void;
29
+
30
+ /**
31
+ * Handle when the mouse wheel
32
+ * @param wheelEvent - Mouse wheel
33
+ */
34
+ handleMouseWheel(wheelEvent: WheelEvent): void;
35
+
36
+ /**
37
+ * Handle when the button double click
38
+ * @param mouseEvent - Mouse Event
39
+ */
40
+ handleMouseDouble(mouseEvent: MouseEvent): void;
41
+
42
+ /**
43
+ * Handle the press mouse buttons event, sends the mouse data to the UE Instance
44
+ * @param mouseEvent - Mouse Event
45
+ */
46
+ handlePressMouseButtons(mouseEvent: MouseEvent): void;
47
+
48
+ /**
49
+ * Handle the release mouse buttons event, sends the mouse data to the UE Instance
50
+ * @param mouseEvent - Mouse Event
51
+ */
52
+ handleReleaseMouseButtons(mouseEvent: MouseEvent): void;
53
+
54
+ /**
55
+ * Handle the mouse context menu
56
+ * @param mouseEvent - mouse event
57
+ */
58
+ handleContextMenu?(mouseEvent: MouseEvent): void;
59
+
60
+ /**
61
+ * Unregisters any registered mouse event handlers
62
+ */
63
+ unregisterMouseEvents(): void;
64
+ }
@@ -0,0 +1,29 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ /**
4
+ * Interface for Touch Events
5
+ */
6
+ export interface ITouchController {
7
+ /**
8
+ * Fire when a touch event starts
9
+ * @param touchEvent - Touch Event Data
10
+ */
11
+ onTouchStart(touchEvent: TouchEvent): void;
12
+
13
+ /**
14
+ * Fire when a touch event ends
15
+ * @param touchEvent - Touch Event Data
16
+ */
17
+ onTouchEnd(touchEvent: TouchEvent): void;
18
+
19
+ /**
20
+ * Fire when touch moves
21
+ * @param touchEvent - Touch Event Data
22
+ */
23
+ onTouchMove(touchEvent: TouchEvent): void;
24
+
25
+ /**
26
+ * Unregisters all touch event handlers
27
+ */
28
+ unregisterTouchEvents(): void;
29
+ }
@@ -0,0 +1,140 @@
1
+ // Copyright Epic Games, Inc. All Rights Reserved.
2
+
3
+ import { FakeTouchController } from './FakeTouchController';
4
+ import { KeyboardController } from './KeyboardController';
5
+ import { MouseController } from './MouseController';
6
+ import { TouchController } from './TouchController';
7
+ import { GamePadController } from './GamepadController';
8
+ import { Config, ControlSchemeType } from '../Config/Config';
9
+ import { Logger } from '@epicgames-ps/lib-pixelstreamingcommon-ue5.5';
10
+ import { CoordinateConverter } from '../Util/CoordinateConverter';
11
+ import { StreamMessageController } from '../UeInstanceMessage/StreamMessageController';
12
+ import { VideoPlayer } from '../VideoPlayer/VideoPlayer';
13
+
14
+ /**
15
+ * Class for making and setting up input class types
16
+ */
17
+ export class InputClassesFactory {
18
+ toStreamerMessagesProvider: StreamMessageController;
19
+ videoElementProvider: VideoPlayer;
20
+ coordinateConverter: CoordinateConverter;
21
+ activeKeys: ActiveKeys = new ActiveKeys();
22
+
23
+ /**
24
+ * @param toStreamerMessagesProvider - Stream message instance
25
+ * @param videoElementProvider - Video Player instance
26
+ * @param coordinateConverter - A coordinateConverter instance
27
+ */
28
+ constructor(
29
+ toStreamerMessagesProvider: StreamMessageController,
30
+ videoElementProvider: VideoPlayer,
31
+ coordinateConverter: CoordinateConverter
32
+ ) {
33
+ this.toStreamerMessagesProvider = toStreamerMessagesProvider;
34
+ this.videoElementProvider = videoElementProvider;
35
+ this.coordinateConverter = coordinateConverter;
36
+ }
37
+
38
+ /**
39
+ * Registers browser key events.
40
+ */
41
+ registerKeyBoard(config: Config) {
42
+ Logger.Log(Logger.GetStackTrace(), 'Register Keyboard Events', 7);
43
+ const keyboardController = new KeyboardController(
44
+ this.toStreamerMessagesProvider,
45
+ config,
46
+ this.activeKeys
47
+ );
48
+ keyboardController.registerKeyBoardEvents();
49
+ return keyboardController;
50
+ }
51
+
52
+ /**
53
+ * register mouse events based on a control type
54
+ * @param controlScheme - if the mouse is either hovering or locked
55
+ */
56
+ registerMouse(controlScheme: ControlSchemeType) {
57
+ Logger.Log(Logger.GetStackTrace(), 'Register Mouse Events', 7);
58
+ const mouseController = new MouseController(
59
+ this.toStreamerMessagesProvider,
60
+ this.videoElementProvider,
61
+ this.coordinateConverter,
62
+ this.activeKeys
63
+ );
64
+
65
+ switch (controlScheme) {
66
+ case ControlSchemeType.LockedMouse:
67
+ mouseController.registerLockedMouseEvents(mouseController);
68
+ break;
69
+ case ControlSchemeType.HoveringMouse:
70
+ mouseController.registerHoveringMouseEvents(mouseController);
71
+ break;
72
+ default:
73
+ Logger.Info(
74
+ Logger.GetStackTrace(),
75
+ 'unknown Control Scheme Type Defaulting to Locked Mouse Events'
76
+ );
77
+ mouseController.registerLockedMouseEvents(mouseController);
78
+ break;
79
+ }
80
+
81
+ return mouseController;
82
+ }
83
+
84
+ /**
85
+ * register touch events
86
+ * @param fakeMouseTouch - the faked mouse touch event
87
+ */
88
+ registerTouch(
89
+ fakeMouseTouch: boolean,
90
+ videoElementParentClientRect: DOMRect
91
+ ) {
92
+ Logger.Log(Logger.GetStackTrace(), 'Registering Touch', 6);
93
+ if (fakeMouseTouch) {
94
+ const fakeTouchController = new FakeTouchController(
95
+ this.toStreamerMessagesProvider,
96
+ this.videoElementProvider,
97
+ this.coordinateConverter
98
+ );
99
+ fakeTouchController.setVideoElementParentClientRect(
100
+ videoElementParentClientRect
101
+ );
102
+ return fakeTouchController;
103
+ } else {
104
+ return new TouchController(
105
+ this.toStreamerMessagesProvider,
106
+ this.videoElementProvider,
107
+ this.coordinateConverter
108
+ );
109
+ }
110
+ }
111
+
112
+ /**
113
+ * registers a gamepad
114
+ */
115
+ registerGamePad() {
116
+ Logger.Log(Logger.GetStackTrace(), 'Register Game Pad', 7);
117
+ const gamePadController = new GamePadController(
118
+ this.toStreamerMessagesProvider
119
+ );
120
+ return gamePadController;
121
+ }
122
+ }
123
+
124
+ /**
125
+ * A class that keeps track of current active keys
126
+ */
127
+ export class ActiveKeys {
128
+ activeKeys: Array<number> = [];
129
+ constructor() {
130
+ this.activeKeys = [];
131
+ }
132
+
133
+ /**
134
+ * Get the current array of active keys
135
+ * @returns - an array of active keys
136
+ */
137
+ getActiveKeys(): number[] {
138
+ return this.activeKeys;
139
+ }
140
+ }