@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.
- package/.cspell.json +48 -0
- package/.eslintignore +8 -0
- package/.eslintrc.js +8 -0
- package/.prettierignore +0 -0
- package/.prettierrc.json +6 -0
- package/dist/lib-pixelstreamingfrontend.esm.js +1 -0
- package/dist/lib-pixelstreamingfrontend.js +1 -0
- package/jest.config.js +18 -0
- package/package.json +48 -0
- package/readme.md +15 -0
- package/src/AFK/AFKController.test.ts +162 -0
- package/src/AFK/AFKController.ts +158 -0
- package/src/Config/Config.test.ts +222 -0
- package/src/Config/Config.ts +970 -0
- package/src/Config/SettingBase.ts +65 -0
- package/src/Config/SettingFlag.ts +99 -0
- package/src/Config/SettingNumber.ts +111 -0
- package/src/Config/SettingOption.ts +124 -0
- package/src/Config/SettingText.ts +82 -0
- package/src/DataChannel/DataChannelController.ts +138 -0
- package/src/DataChannel/DataChannelLatencyTestController.ts +129 -0
- package/src/DataChannel/DataChannelLatencyTestResults.ts +67 -0
- package/src/DataChannel/DataChannelSender.ts +59 -0
- package/src/DataChannel/InitialSettings.ts +61 -0
- package/src/DataChannel/LatencyTestResults.ts +76 -0
- package/src/FreezeFrame/FreezeFrame.ts +114 -0
- package/src/FreezeFrame/FreezeFrameController.ts +114 -0
- package/src/Inputs/FakeTouchController.ts +199 -0
- package/src/Inputs/GamepadController.ts +314 -0
- package/src/Inputs/GamepadTypes.ts +10 -0
- package/src/Inputs/HoveringMouseEvents.ts +192 -0
- package/src/Inputs/IMouseEvents.ts +64 -0
- package/src/Inputs/ITouchController.ts +29 -0
- package/src/Inputs/InputClassesFactory.ts +140 -0
- package/src/Inputs/KeyboardController.ts +354 -0
- package/src/Inputs/LockedMouseEvents.ts +287 -0
- package/src/Inputs/MouseButtons.ts +25 -0
- package/src/Inputs/MouseController.ts +362 -0
- package/src/Inputs/SpecialKeyCodes.ts +16 -0
- package/src/Inputs/TouchController.ts +208 -0
- package/src/Inputs/XRGamepadController.ts +126 -0
- package/src/PeerConnectionController/AggregatedStats.ts +311 -0
- package/src/PeerConnectionController/CandidatePairStats.ts +17 -0
- package/src/PeerConnectionController/CandidateStat.ts +13 -0
- package/src/PeerConnectionController/CodecStats.ts +19 -0
- package/src/PeerConnectionController/DataChannelStats.ts +17 -0
- package/src/PeerConnectionController/InboundRTPStats.ts +154 -0
- package/src/PeerConnectionController/InboundTrackStats.ts +34 -0
- package/src/PeerConnectionController/OutBoundRTPStats.ts +26 -0
- package/src/PeerConnectionController/PeerConnectionController.ts +563 -0
- package/src/PeerConnectionController/SessionStats.ts +10 -0
- package/src/PeerConnectionController/StreamStats.ts +11 -0
- package/src/PixelStreaming/PixelStreaming.test.ts +626 -0
- package/src/PixelStreaming/PixelStreaming.ts +851 -0
- package/src/UI/OnScreenKeyboard.ts +97 -0
- package/src/UeInstanceMessage/ResponseController.ts +47 -0
- package/src/UeInstanceMessage/SendMessageController.ts +154 -0
- package/src/UeInstanceMessage/StreamMessageController.ts +233 -0
- package/src/UeInstanceMessage/ToStreamerMessagesController.ts +62 -0
- package/src/Util/CoordinateConverter.ts +289 -0
- package/src/Util/EventEmitter.ts +611 -0
- package/src/Util/EventListenerTracker.ts +29 -0
- package/src/Util/FileUtil.ts +140 -0
- package/src/Util/RTCUtils.ts +41 -0
- package/src/Util/WebGLUtils.ts +49 -0
- package/src/Util/WebXRUtils.ts +25 -0
- package/src/VideoPlayer/StreamController.ts +89 -0
- package/src/VideoPlayer/VideoPlayer.ts +246 -0
- package/src/WebRtcPlayer/WebRtcPlayerController.ts +2158 -0
- package/src/WebXR/WebXRController.ts +319 -0
- package/src/__test__/mockMediaStream.ts +124 -0
- package/src/__test__/mockRTCPeerConnection.ts +347 -0
- package/src/__test__/mockRTCRtpReceiver.ts +22 -0
- package/src/__test__/mockWebSocket.ts +136 -0
- package/src/pixelstreamingfrontend.ts +46 -0
- package/tsconfig.jest.json +8 -0
- package/tsconfig.json +24 -0
- package/types/AFK/AFKController.d.ts +39 -0
- package/types/Config/Config.d.ts +218 -0
- package/types/Config/SettingBase.d.ts +30 -0
- package/types/Config/SettingFlag.d.ts +33 -0
- package/types/Config/SettingNumber.d.ts +45 -0
- package/types/Config/SettingOption.d.ts +43 -0
- package/types/Config/SettingText.d.ts +29 -0
- package/types/DataChannel/DataChannelController.d.ts +59 -0
- package/types/DataChannel/DataChannelLatencyTestController.d.ts +26 -0
- package/types/DataChannel/DataChannelLatencyTestResults.d.ts +46 -0
- package/types/DataChannel/DataChannelSender.d.ts +21 -0
- package/types/DataChannel/InitialSettings.d.ts +44 -0
- package/types/DataChannel/LatencyTestResults.d.ts +31 -0
- package/types/FreezeFrame/FreezeFrame.d.ts +36 -0
- package/types/FreezeFrame/FreezeFrameController.d.ts +37 -0
- package/types/Inputs/FakeTouchController.d.ts +61 -0
- package/types/Inputs/GamepadController.d.ts +85 -0
- package/types/Inputs/GamepadTypes.d.ts +8 -0
- package/types/Inputs/HoveringMouseEvents.d.ts +56 -0
- package/types/Inputs/IMouseEvents.d.ts +53 -0
- package/types/Inputs/ITouchController.d.ts +24 -0
- package/types/Inputs/InputClassesFactory.d.ts +54 -0
- package/types/Inputs/KeyboardController.d.ts +62 -0
- package/types/Inputs/LockedMouseEvents.d.ts +80 -0
- package/types/Inputs/MouseButtons.d.ts +22 -0
- package/types/Inputs/MouseController.d.ts +75 -0
- package/types/Inputs/SpecialKeyCodes.d.ts +14 -0
- package/types/Inputs/TouchController.d.ts +53 -0
- package/types/Inputs/XRGamepadController.d.ts +15 -0
- package/types/PeerConnectionController/AggregatedStats.d.ts +77 -0
- package/types/PeerConnectionController/CandidatePairStats.d.ts +15 -0
- package/types/PeerConnectionController/CandidateStat.d.ts +11 -0
- package/types/PeerConnectionController/CodecStats.d.ts +14 -0
- package/types/PeerConnectionController/DataChannelStats.d.ts +15 -0
- package/types/PeerConnectionController/InboundRTPStats.d.ts +141 -0
- package/types/PeerConnectionController/InboundTrackStats.d.ts +32 -0
- package/types/PeerConnectionController/OutBoundRTPStats.d.ts +23 -0
- package/types/PeerConnectionController/PeerConnectionController.d.ts +132 -0
- package/types/PeerConnectionController/SessionStats.d.ts +8 -0
- package/types/PeerConnectionController/StreamStats.d.ts +9 -0
- package/types/PixelStreaming/PixelStreaming.d.ts +259 -0
- package/types/UI/OnScreenKeyboard.d.ts +31 -0
- package/types/UeInstanceMessage/ResponseController.d.ts +19 -0
- package/types/UeInstanceMessage/SendMessageController.d.ts +18 -0
- package/types/UeInstanceMessage/StreamMessageController.d.ts +29 -0
- package/types/UeInstanceMessage/ToStreamerMessagesController.d.ts +32 -0
- package/types/Util/CoordinateConverter.d.ts +100 -0
- package/types/Util/EventEmitter.d.ts +422 -0
- package/types/Util/EventListenerTracker.d.ts +14 -0
- package/types/Util/FileUtil.d.ts +32 -0
- package/types/Util/RTCUtils.d.ts +8 -0
- package/types/Util/WebGLUtils.d.ts +4 -0
- package/types/Util/WebXRUtils.d.ts +9 -0
- package/types/VideoPlayer/StreamController.d.ts +24 -0
- package/types/VideoPlayer/VideoPlayer.d.ts +78 -0
- package/types/WebRtcPlayer/WebRtcPlayerController.d.ts +377 -0
- package/types/WebXR/WebXRController.d.ts +26 -0
- package/types/pixelstreamingfrontend.d.ts +22 -0
- package/webpack.common.js +35 -0
- package/webpack.dev.js +35 -0
- 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
|
+
}
|