@quenty/inputmode 13.18.0 → 13.18.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.
- package/CHANGELOG.md +11 -0
- package/package.json +10 -10
- package/src/Client/InputMode.lua +20 -11
- package/src/Client/InputModeProcessor.lua +21 -6
- package/src/Client/InputModeServiceClient.lua +46 -27
- package/src/Client/InputModeTypeSelector.lua +70 -34
- package/src/Shared/InputModeType.lua +24 -13
- package/src/Shared/InputModeTypes.lua +202 -188
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [13.18.1](https://github.com/Quenty/NevermoreEngine/compare/@quenty/inputmode@13.18.0...@quenty/inputmode@13.18.1) (2025-04-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Add types to packages ([2374fb2](https://github.com/Quenty/NevermoreEngine/commit/2374fb2b043cfbe0e9b507b3316eec46a4e353a0))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [13.18.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/inputmode@13.17.2...@quenty/inputmode@13.18.0) (2025-04-02)
|
|
7
18
|
|
|
8
19
|
**Note:** Version bump only for package @quenty/inputmode
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/inputmode",
|
|
3
|
-
"version": "13.18.
|
|
3
|
+
"version": "13.18.1",
|
|
4
4
|
"description": "Trace input mode state and trigger changes correctly",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -25,17 +25,17 @@
|
|
|
25
25
|
"Quenty"
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@quenty/ducktype": "^5.8.
|
|
29
|
-
"@quenty/loader": "^10.8.
|
|
30
|
-
"@quenty/maid": "^3.4.
|
|
31
|
-
"@quenty/rx": "^13.17.
|
|
32
|
-
"@quenty/servicebag": "^11.11.
|
|
33
|
-
"@quenty/signal": "^7.10.
|
|
34
|
-
"@quenty/table": "^3.7.
|
|
35
|
-
"@quenty/valueobject": "^13.17.
|
|
28
|
+
"@quenty/ducktype": "^5.8.2",
|
|
29
|
+
"@quenty/loader": "^10.8.1",
|
|
30
|
+
"@quenty/maid": "^3.4.1",
|
|
31
|
+
"@quenty/rx": "^13.17.1",
|
|
32
|
+
"@quenty/servicebag": "^11.11.2",
|
|
33
|
+
"@quenty/signal": "^7.10.1",
|
|
34
|
+
"@quenty/table": "^3.7.2",
|
|
35
|
+
"@quenty/valueobject": "^13.17.1"
|
|
36
36
|
},
|
|
37
37
|
"publishConfig": {
|
|
38
38
|
"access": "public"
|
|
39
39
|
},
|
|
40
|
-
"gitHead": "
|
|
40
|
+
"gitHead": "78c3ac0ab08dd18085b6e6e6e4f745e76ed99f68"
|
|
41
41
|
}
|
package/src/Client/InputMode.lua
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Trace input mode state and trigger changes correctly. See [InputModeSelector] for details
|
|
3
4
|
on how to select between these. See [InputModeTypeTypes] for predefined modes.
|
|
@@ -9,6 +10,7 @@ local require = require(script.Parent.loader).load(script)
|
|
|
9
10
|
|
|
10
11
|
local Signal = require("Signal")
|
|
11
12
|
local DuckTypeUtils = require("DuckTypeUtils")
|
|
13
|
+
local _InputModeType = require("InputModeType")
|
|
12
14
|
|
|
13
15
|
--[=[
|
|
14
16
|
Fires off when the mode is enabled
|
|
@@ -26,13 +28,22 @@ local InputMode = {}
|
|
|
26
28
|
InputMode.__index = InputMode
|
|
27
29
|
InputMode.ClassName = "InputMode"
|
|
28
30
|
|
|
31
|
+
export type InputMode = typeof(setmetatable(
|
|
32
|
+
{} :: {
|
|
33
|
+
_inputModeType: _InputModeType.InputModeType,
|
|
34
|
+
_lastEnabled: number,
|
|
35
|
+
Enabled: Signal.Signal<()>,
|
|
36
|
+
},
|
|
37
|
+
InputMode
|
|
38
|
+
))
|
|
39
|
+
|
|
29
40
|
--[=[
|
|
30
41
|
Constructs a new InputMode. This inherits data from the name.
|
|
31
42
|
|
|
32
43
|
@param inputModeType InputModeType
|
|
33
44
|
@return InputMode
|
|
34
45
|
]=]
|
|
35
|
-
function InputMode.new(inputModeType)
|
|
46
|
+
function InputMode.new(inputModeType: _InputModeType.InputModeType): InputMode
|
|
36
47
|
local self = setmetatable({}, InputMode)
|
|
37
48
|
|
|
38
49
|
self._inputModeType = assert(inputModeType, "Bad inputModeType")
|
|
@@ -50,7 +61,7 @@ end
|
|
|
50
61
|
@param value any
|
|
51
62
|
@return boolean
|
|
52
63
|
]=]
|
|
53
|
-
function InputMode.isInputMode(value)
|
|
64
|
+
function InputMode.isInputMode(value: any): boolean
|
|
54
65
|
return DuckTypeUtils.isImplementation(InputMode, value)
|
|
55
66
|
end
|
|
56
67
|
|
|
@@ -58,7 +69,7 @@ end
|
|
|
58
69
|
Checks the last point this input mode was used.
|
|
59
70
|
@return number
|
|
60
71
|
]=]
|
|
61
|
-
function InputMode
|
|
72
|
+
function InputMode.GetLastEnabledTime(self: InputMode): number
|
|
62
73
|
return self._lastEnabled
|
|
63
74
|
end
|
|
64
75
|
|
|
@@ -66,7 +77,7 @@ end
|
|
|
66
77
|
Returns all keys defining the input mode.
|
|
67
78
|
@return { UserInputType | KeyCode | string }
|
|
68
79
|
]=]
|
|
69
|
-
function InputMode
|
|
80
|
+
function InputMode.GetKeys(self: InputMode): { Enum.UserInputType | Enum.KeyCode | string }
|
|
70
81
|
return self._inputModeType:GetKeys()
|
|
71
82
|
end
|
|
72
83
|
|
|
@@ -75,7 +86,7 @@ end
|
|
|
75
86
|
@param inputType { UserInputType | KeyCode | string }
|
|
76
87
|
@return boolean
|
|
77
88
|
]=]
|
|
78
|
-
function InputMode
|
|
89
|
+
function InputMode.IsValid(self: InputMode, inputType: _InputModeType.InputModeKey): boolean
|
|
79
90
|
assert(inputType, "Must send in inputType")
|
|
80
91
|
|
|
81
92
|
return self._inputModeType:IsValid(inputType)
|
|
@@ -84,7 +95,7 @@ end
|
|
|
84
95
|
--[=[
|
|
85
96
|
Enables the mode
|
|
86
97
|
]=]
|
|
87
|
-
function InputMode
|
|
98
|
+
function InputMode.Enable(self: InputMode)
|
|
88
99
|
self._lastEnabled = os.clock()
|
|
89
100
|
self.Enabled:Fire()
|
|
90
101
|
end
|
|
@@ -93,10 +104,8 @@ end
|
|
|
93
104
|
Evaluates the input object, and if it's valid, enables the mode
|
|
94
105
|
@param inputObject InputObject
|
|
95
106
|
]=]
|
|
96
|
-
function InputMode
|
|
97
|
-
if self._inputModeType:IsValid(inputObject.UserInputType)
|
|
98
|
-
or self._inputModeType:IsValid(inputObject.KeyCode) then
|
|
99
|
-
|
|
107
|
+
function InputMode.Evaluate(self: InputMode, inputObject: InputObject)
|
|
108
|
+
if self._inputModeType:IsValid(inputObject.UserInputType) or self._inputModeType:IsValid(inputObject.KeyCode) then
|
|
100
109
|
self:Enable()
|
|
101
110
|
end
|
|
102
111
|
end
|
|
@@ -104,7 +113,7 @@ end
|
|
|
104
113
|
--[=[
|
|
105
114
|
Cleans up the input mode
|
|
106
115
|
]=]
|
|
107
|
-
function InputMode
|
|
116
|
+
function InputMode.Destroy(self: InputMode)
|
|
108
117
|
self.Enabled:Destroy()
|
|
109
118
|
end
|
|
110
119
|
|
|
@@ -4,22 +4,33 @@
|
|
|
4
4
|
@class InputModeProcessor
|
|
5
5
|
]=]
|
|
6
6
|
|
|
7
|
+
local require = require(script.Parent.loader).load(script)
|
|
8
|
+
|
|
9
|
+
local _InputMode = require("InputMode")
|
|
10
|
+
|
|
7
11
|
local InputModeProcessor = {}
|
|
8
12
|
InputModeProcessor.__index = InputModeProcessor
|
|
9
13
|
InputModeProcessor.ClassName = InputModeProcessor
|
|
10
14
|
|
|
15
|
+
export type InputModeProcessor = typeof(setmetatable(
|
|
16
|
+
{} :: {
|
|
17
|
+
_inputModes: { _InputMode.InputMode },
|
|
18
|
+
},
|
|
19
|
+
InputModeProcessor
|
|
20
|
+
))
|
|
21
|
+
|
|
11
22
|
--[=[
|
|
12
23
|
Construtcs a new inputModeProcessor
|
|
13
24
|
@param inputModes { InputMode }?
|
|
14
25
|
@return InputModeProcessor
|
|
15
26
|
]=]
|
|
16
|
-
function InputModeProcessor.new(inputModes)
|
|
27
|
+
function InputModeProcessor.new(inputModes: { _InputMode.InputMode }?): InputModeProcessor
|
|
17
28
|
local self = setmetatable({}, InputModeProcessor)
|
|
18
29
|
|
|
19
30
|
self._inputModes = {}
|
|
20
31
|
|
|
21
32
|
if inputModes then
|
|
22
|
-
for _, inputMode in
|
|
33
|
+
for _, inputMode in inputModes do
|
|
23
34
|
self:AddInputMode(inputMode)
|
|
24
35
|
end
|
|
25
36
|
end
|
|
@@ -27,7 +38,11 @@ function InputModeProcessor.new(inputModes)
|
|
|
27
38
|
return self
|
|
28
39
|
end
|
|
29
40
|
|
|
30
|
-
|
|
41
|
+
--[=[
|
|
42
|
+
Adds an input mode to the inputModeProcessor
|
|
43
|
+
@param inputMode InputMode
|
|
44
|
+
]=]
|
|
45
|
+
function InputModeProcessor.AddInputMode(self: InputModeProcessor, inputMode: _InputMode.InputMode)
|
|
31
46
|
table.insert(self._inputModes, inputMode)
|
|
32
47
|
end
|
|
33
48
|
|
|
@@ -35,7 +50,7 @@ end
|
|
|
35
50
|
Gets all input mode inputModes being used
|
|
36
51
|
@return { InputMode }
|
|
37
52
|
]=]
|
|
38
|
-
function InputModeProcessor
|
|
53
|
+
function InputModeProcessor.GetStates(self: InputModeProcessor): { _InputMode.InputMode }
|
|
39
54
|
return self._inputModes
|
|
40
55
|
end
|
|
41
56
|
|
|
@@ -43,8 +58,8 @@ end
|
|
|
43
58
|
Applies the inputObject as an evaluation for the inputm odes
|
|
44
59
|
@param inputObject InputObject
|
|
45
60
|
]=]
|
|
46
|
-
function InputModeProcessor
|
|
47
|
-
for _, inputMode in
|
|
61
|
+
function InputModeProcessor.Evaluate(self: InputModeProcessor, inputObject: InputObject)
|
|
62
|
+
for _, inputMode in self._inputModes do
|
|
48
63
|
inputMode:Evaluate(inputObject)
|
|
49
64
|
end
|
|
50
65
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Centralized
|
|
3
4
|
@class InputModeServiceClient
|
|
@@ -14,13 +15,25 @@ local Maid = require("Maid")
|
|
|
14
15
|
local InputModeProcessor = require("InputModeProcessor")
|
|
15
16
|
local InputModeTypes = require("InputModeTypes")
|
|
16
17
|
local InputMode = require("InputMode")
|
|
18
|
+
local _ServiceBag = require("ServiceBag")
|
|
17
19
|
|
|
18
20
|
local THUMBSTICK_DEADZONE = 0.14
|
|
19
21
|
|
|
20
22
|
local InputModeServiceClient = {}
|
|
21
23
|
InputModeServiceClient.ServiceName = "InputModeServiceClient"
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
export type InputModeServiceClient = typeof(setmetatable(
|
|
26
|
+
{} :: {
|
|
27
|
+
_maid: Maid.Maid,
|
|
28
|
+
_inputModes: { [InputModeType.InputModeType]: InputMode.InputMode },
|
|
29
|
+
_inputModeProcessor: InputModeProcessor.InputModeProcessor,
|
|
30
|
+
_lastMousePosition: Vector3?,
|
|
31
|
+
_serviceBag: _ServiceBag.ServiceBag,
|
|
32
|
+
},
|
|
33
|
+
{ __index = InputModeServiceClient }
|
|
34
|
+
))
|
|
35
|
+
|
|
36
|
+
function InputModeServiceClient.Init(self: InputModeServiceClient, serviceBag: _ServiceBag.ServiceBag)
|
|
24
37
|
assert(not self._serviceBag, "Already initialized")
|
|
25
38
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
26
39
|
|
|
@@ -31,22 +44,25 @@ function InputModeServiceClient:Init(serviceBag)
|
|
|
31
44
|
|
|
32
45
|
-- order semi-matters. general should come first, to non-specific. that way, specific stuff has
|
|
33
46
|
-- priority over non-specific input modes.
|
|
34
|
-
self:GetInputMode(InputModeTypes.KeyboardAndMouse)
|
|
35
|
-
self:GetInputMode(InputModeTypes.Gamepads)
|
|
36
|
-
self:GetInputMode(InputModeTypes.Keyboard)
|
|
37
|
-
self:GetInputMode(InputModeTypes.Touch)
|
|
38
|
-
self:GetInputMode(InputModeTypes.Mouse)
|
|
39
|
-
self:GetInputMode(InputModeTypes.ArrowKeys)
|
|
40
|
-
self:GetInputMode(InputModeTypes.Keypad)
|
|
41
|
-
self:GetInputMode(InputModeTypes.WASD)
|
|
42
|
-
self:GetInputMode(InputModeTypes.DPad)
|
|
47
|
+
self:GetInputMode(InputModeTypes.KeyboardAndMouse)
|
|
48
|
+
self:GetInputMode(InputModeTypes.Gamepads)
|
|
49
|
+
self:GetInputMode(InputModeTypes.Keyboard)
|
|
50
|
+
self:GetInputMode(InputModeTypes.Touch)
|
|
51
|
+
self:GetInputMode(InputModeTypes.Mouse)
|
|
52
|
+
self:GetInputMode(InputModeTypes.ArrowKeys)
|
|
53
|
+
self:GetInputMode(InputModeTypes.Keypad)
|
|
54
|
+
self:GetInputMode(InputModeTypes.WASD)
|
|
55
|
+
self:GetInputMode(InputModeTypes.DPad)
|
|
43
56
|
-- Don't add InputModeTypes.Thumbsticks, we handle it seperately
|
|
44
57
|
|
|
45
58
|
self:_triggerEnabled()
|
|
46
59
|
self:_bindProcessor()
|
|
47
60
|
end
|
|
48
61
|
|
|
49
|
-
function InputModeServiceClient
|
|
62
|
+
function InputModeServiceClient.GetInputMode(
|
|
63
|
+
self: InputModeServiceClient,
|
|
64
|
+
inputModeType: InputModeType.InputModeType
|
|
65
|
+
): InputMode.InputMode
|
|
50
66
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
51
67
|
|
|
52
68
|
if not RunService:IsRunning() then
|
|
@@ -80,7 +96,7 @@ function InputModeServiceClient:GetInputMode(inputModeType)
|
|
|
80
96
|
return inputMode
|
|
81
97
|
end
|
|
82
98
|
|
|
83
|
-
function InputModeServiceClient
|
|
99
|
+
function InputModeServiceClient._triggerEnabled(self: InputModeServiceClient)
|
|
84
100
|
if UserInputService.MouseEnabled then
|
|
85
101
|
self:GetInputMode(InputModeTypes.Mouse):Enable()
|
|
86
102
|
end
|
|
@@ -93,25 +109,25 @@ function InputModeServiceClient:_triggerEnabled()
|
|
|
93
109
|
if UserInputService.KeyboardEnabled and UserInputService.MouseEnabled then
|
|
94
110
|
self:GetInputMode(InputModeTypes.KeyboardAndMouse):Enable()
|
|
95
111
|
end
|
|
96
|
-
if
|
|
112
|
+
if
|
|
113
|
+
UserInputService.GamepadEnabled
|
|
97
114
|
or #UserInputService:GetConnectedGamepads() > 0
|
|
98
|
-
or GuiService:IsTenFootInterface()
|
|
115
|
+
or GuiService:IsTenFootInterface()
|
|
116
|
+
then
|
|
99
117
|
self:GetInputMode(InputModeTypes.Gamepads):Enable()
|
|
100
118
|
end
|
|
101
119
|
end
|
|
102
120
|
|
|
103
|
-
function InputModeServiceClient
|
|
104
|
-
self._maid:GiveTask(UserInputService.InputBegan:Connect(function(inputObject)
|
|
121
|
+
function InputModeServiceClient._bindProcessor(self: InputModeServiceClient)
|
|
122
|
+
self._maid:GiveTask(UserInputService.InputBegan:Connect(function(inputObject: InputObject)
|
|
105
123
|
self._inputModeProcessor:Evaluate(inputObject)
|
|
106
124
|
end))
|
|
107
|
-
self._maid:GiveTask(UserInputService.InputEnded:Connect(function(inputObject)
|
|
125
|
+
self._maid:GiveTask(UserInputService.InputEnded:Connect(function(inputObject: InputObject)
|
|
108
126
|
self._inputModeProcessor:Evaluate(inputObject)
|
|
109
127
|
end))
|
|
110
|
-
self._maid:GiveTask(UserInputService.InputChanged:Connect(function(inputObject)
|
|
111
|
-
if inputObject.KeyCode == Enum.KeyCode.Thumbstick1
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
if inputObject.Position.magnitude > THUMBSTICK_DEADZONE then
|
|
128
|
+
self._maid:GiveTask(UserInputService.InputChanged:Connect(function(inputObject: InputObject)
|
|
129
|
+
if inputObject.KeyCode == Enum.KeyCode.Thumbstick1 or inputObject.KeyCode == Enum.KeyCode.Thumbstick2 then
|
|
130
|
+
if inputObject.Position.Magnitude > THUMBSTICK_DEADZONE then
|
|
115
131
|
self._inputModeProcessor:Evaluate(inputObject)
|
|
116
132
|
self:GetInputMode(InputModeTypes.Thumbsticks):Enable()
|
|
117
133
|
end
|
|
@@ -134,13 +150,16 @@ function InputModeServiceClient:_bindProcessor()
|
|
|
134
150
|
end))
|
|
135
151
|
end
|
|
136
152
|
|
|
137
|
-
function InputModeServiceClient
|
|
153
|
+
function InputModeServiceClient._shouldProcessMouseMovement(
|
|
154
|
+
self: InputModeServiceClient,
|
|
155
|
+
inputObject: InputObject
|
|
156
|
+
): boolean
|
|
138
157
|
-- Prevent mouse movement from flickering
|
|
139
158
|
local position = inputObject.Position
|
|
140
|
-
local lastMousePosition = self._lastMousePosition
|
|
159
|
+
local lastMousePosition: Vector3? = self._lastMousePosition
|
|
141
160
|
self._lastMousePosition = position
|
|
142
161
|
|
|
143
|
-
if inputObject.Delta.
|
|
162
|
+
if inputObject.Delta.Magnitude > 0 then
|
|
144
163
|
return true
|
|
145
164
|
end
|
|
146
165
|
|
|
@@ -148,14 +167,14 @@ function InputModeServiceClient:_shouldProcessMouseMovement(inputObject)
|
|
|
148
167
|
return true
|
|
149
168
|
end
|
|
150
169
|
|
|
151
|
-
if (lastMousePosition - position).
|
|
170
|
+
if (lastMousePosition - position).Magnitude > 0 then
|
|
152
171
|
return true
|
|
153
172
|
end
|
|
154
173
|
|
|
155
174
|
return false
|
|
156
175
|
end
|
|
157
176
|
|
|
158
|
-
function InputModeServiceClient
|
|
177
|
+
function InputModeServiceClient.Destroy(self: InputModeServiceClient)
|
|
159
178
|
self._maid:DoCleaning()
|
|
160
179
|
end
|
|
161
180
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Selects the most recent input mode and attempts to identify the best state from it.
|
|
3
4
|
@class InputModeTypeSelector
|
|
@@ -12,14 +13,31 @@ local InputModeServiceClient = require("InputModeServiceClient")
|
|
|
12
13
|
local ServiceBag = require("ServiceBag")
|
|
13
14
|
local Rx = require("Rx")
|
|
14
15
|
local InputModeType = require("InputModeType")
|
|
16
|
+
local _Observable = require("Observable")
|
|
17
|
+
local _Signal = require("Signal")
|
|
18
|
+
local _Brio = require("Brio")
|
|
15
19
|
|
|
16
20
|
local InputModeTypeSelector = {}
|
|
17
21
|
InputModeTypeSelector.ClassName = "InputModeTypeSelector"
|
|
18
22
|
InputModeTypeSelector.DEFAULT_MODE_TYPES = {
|
|
19
23
|
InputModeTypes.Gamepads,
|
|
20
24
|
InputModeTypes.Keyboard,
|
|
21
|
-
InputModeTypes.Touch
|
|
22
|
-
}
|
|
25
|
+
InputModeTypes.Touch,
|
|
26
|
+
} :: { InputModeType.InputModeType }
|
|
27
|
+
|
|
28
|
+
export type InputModeTypeSelector = typeof(setmetatable(
|
|
29
|
+
{} :: {
|
|
30
|
+
_maid: Maid.Maid,
|
|
31
|
+
_inputModeTypeList: { InputModeType.InputModeType },
|
|
32
|
+
_activeModeType: ValueObject.ValueObject<InputModeType.InputModeType>,
|
|
33
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
34
|
+
_inputModeServiceClient: InputModeServiceClient.InputModeServiceClient,
|
|
35
|
+
|
|
36
|
+
Value: InputModeType.InputModeType?,
|
|
37
|
+
Changed: _Signal.Signal<InputModeType.InputModeType, InputModeType.InputModeType>,
|
|
38
|
+
},
|
|
39
|
+
{ __index = InputModeTypeSelector }
|
|
40
|
+
))
|
|
23
41
|
|
|
24
42
|
--[=[
|
|
25
43
|
Constructs a new InputModeTypeSelector
|
|
@@ -28,8 +46,11 @@ InputModeTypeSelector.DEFAULT_MODE_TYPES = {
|
|
|
28
46
|
@param inputModesTypes { InputModeType }
|
|
29
47
|
@return InputModeTypeSelector
|
|
30
48
|
]=]
|
|
31
|
-
function InputModeTypeSelector.new(
|
|
32
|
-
|
|
49
|
+
function InputModeTypeSelector.new(
|
|
50
|
+
serviceBag: ServiceBag.ServiceBag,
|
|
51
|
+
inputModesTypes: { InputModeType.InputModeType }
|
|
52
|
+
): InputModeTypeSelector
|
|
53
|
+
local self: any = setmetatable({}, InputModeTypeSelector)
|
|
33
54
|
|
|
34
55
|
assert(ServiceBag.isServiceBag(serviceBag), "Bad serviceBag")
|
|
35
56
|
|
|
@@ -44,14 +65,14 @@ function InputModeTypeSelector.new(serviceBag, inputModesTypes)
|
|
|
44
65
|
|
|
45
66
|
self._activeModeType = self._maid:Add(ValueObject.new())
|
|
46
67
|
|
|
47
|
-
--[=[
|
|
68
|
+
--[=[
|
|
48
69
|
Event that fires whenever the active mode changes.
|
|
49
70
|
@prop Changed Signal<InputModeType, InputModeType> -- newMode, oldMode
|
|
50
71
|
@within InputModeTypeSelector
|
|
51
72
|
]=]
|
|
52
73
|
self.Changed = self._activeModeType.Changed
|
|
53
74
|
|
|
54
|
-
for _, inputModeType in
|
|
75
|
+
for _, inputModeType in inputModesTypes or InputModeTypeSelector.DEFAULT_MODE_TYPES do
|
|
55
76
|
self:AddInputModeType(inputModeType)
|
|
56
77
|
end
|
|
57
78
|
|
|
@@ -65,7 +86,10 @@ end
|
|
|
65
86
|
@param observeInputModesBrio Observable<Brio<InputModeType>>
|
|
66
87
|
@return InputModeTypeSelector
|
|
67
88
|
]=]
|
|
68
|
-
function InputModeTypeSelector.fromObservableBrio(
|
|
89
|
+
function InputModeTypeSelector.fromObservableBrio(
|
|
90
|
+
serviceBag: ServiceBag.ServiceBag,
|
|
91
|
+
observeInputModesBrio: _Observable.Observable<_Brio.Brio<InputModeType.InputModeType>>
|
|
92
|
+
): InputModeTypeSelector
|
|
69
93
|
local selector = InputModeTypeSelector.new(serviceBag, {})
|
|
70
94
|
|
|
71
95
|
selector._maid:GiveTask(observeInputModesBrio:Subscribe(function(brio)
|
|
@@ -91,16 +115,16 @@ end
|
|
|
91
115
|
Returns the current active mode
|
|
92
116
|
@return InputModeType
|
|
93
117
|
]=]
|
|
94
|
-
function InputModeTypeSelector
|
|
95
|
-
return rawget(self, "_activeModeType").Value
|
|
118
|
+
function InputModeTypeSelector.GetActiveInputType(self: InputModeTypeSelector)
|
|
119
|
+
return rawget(self :: any, "_activeModeType").Value
|
|
96
120
|
end
|
|
97
121
|
|
|
98
122
|
--[=[
|
|
99
123
|
Observes the current active mode
|
|
100
124
|
@return Observable<InputModeType>
|
|
101
125
|
]=]
|
|
102
|
-
function InputModeTypeSelector
|
|
103
|
-
return rawget(self, "_activeModeType"):Observe()
|
|
126
|
+
function InputModeTypeSelector.ObserveActiveInputType(self: InputModeTypeSelector)
|
|
127
|
+
return rawget(self :: any, "_activeModeType"):Observe()
|
|
104
128
|
end
|
|
105
129
|
|
|
106
130
|
--[=[
|
|
@@ -109,10 +133,10 @@ end
|
|
|
109
133
|
@param inputModeType InputModeType
|
|
110
134
|
@return boolean
|
|
111
135
|
]=]
|
|
112
|
-
function InputModeTypeSelector
|
|
136
|
+
function InputModeTypeSelector.IsActive(self: InputModeTypeSelector, inputModeType: InputModeType.InputModeType)
|
|
113
137
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
114
138
|
|
|
115
|
-
return rawget(self, "_activeModeType").Value == inputModeType
|
|
139
|
+
return rawget(self :: any, "_activeModeType").Value == inputModeType
|
|
116
140
|
end
|
|
117
141
|
|
|
118
142
|
--[=[
|
|
@@ -121,14 +145,17 @@ end
|
|
|
121
145
|
@param inputModeType InputModeType
|
|
122
146
|
@return Observable<boolean>
|
|
123
147
|
]=]
|
|
124
|
-
function InputModeTypeSelector
|
|
148
|
+
function InputModeTypeSelector.ObserveIsActive(
|
|
149
|
+
self: InputModeTypeSelector,
|
|
150
|
+
inputModeType: InputModeType.InputModeType
|
|
151
|
+
): _Observable.Observable<boolean>
|
|
125
152
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
126
153
|
|
|
127
154
|
return self:ObserveActiveInputType():Pipe({
|
|
128
|
-
Rx.map(function(inputType)
|
|
155
|
+
Rx.map(function(inputType: InputModeType.InputModeType)
|
|
129
156
|
return inputType == inputModeType
|
|
130
|
-
end)
|
|
131
|
-
Rx.distinct()
|
|
157
|
+
end) :: any,
|
|
158
|
+
Rx.distinct(),
|
|
132
159
|
})
|
|
133
160
|
end
|
|
134
161
|
|
|
@@ -137,13 +164,13 @@ end
|
|
|
137
164
|
@prop Value InputModeType?
|
|
138
165
|
@within InputModeTypeSelector
|
|
139
166
|
]=]
|
|
140
|
-
function InputModeTypeSelector
|
|
167
|
+
function InputModeTypeSelector.__index(self: InputModeTypeSelector, index)
|
|
141
168
|
if index == "Value" then
|
|
142
|
-
return rawget(self, "_activeModeType").Value
|
|
169
|
+
return rawget(self :: any, "_activeModeType").Value
|
|
143
170
|
elseif InputModeTypeSelector[index] then
|
|
144
171
|
return InputModeTypeSelector[index]
|
|
145
172
|
else
|
|
146
|
-
local value = rawget(self, index)
|
|
173
|
+
local value = rawget(self :: any, index)
|
|
147
174
|
if value then
|
|
148
175
|
return value
|
|
149
176
|
else
|
|
@@ -176,9 +203,12 @@ end
|
|
|
176
203
|
@param updateBindFunction (newMode: InputModeType, modeMaid: Maid) -> ()
|
|
177
204
|
@return InputModeTypeSelector
|
|
178
205
|
]=]
|
|
179
|
-
function InputModeTypeSelector
|
|
206
|
+
function InputModeTypeSelector.Bind(
|
|
207
|
+
self: InputModeTypeSelector,
|
|
208
|
+
updateBindFunction: (InputModeType.InputModeType, Maid.Maid) -> ()
|
|
209
|
+
): InputModeTypeSelector
|
|
180
210
|
local maid = Maid.new()
|
|
181
|
-
self._maid[updateBindFunction] = maid
|
|
211
|
+
self._maid[updateBindFunction :: any] = maid
|
|
182
212
|
|
|
183
213
|
local function onChange(newMode, _)
|
|
184
214
|
maid._modeMaid = nil
|
|
@@ -203,10 +233,13 @@ end
|
|
|
203
233
|
Removes the input mode
|
|
204
234
|
@param inputModeType InputModeType
|
|
205
235
|
]=]
|
|
206
|
-
function InputModeTypeSelector
|
|
236
|
+
function InputModeTypeSelector.RemoveInputModeType(
|
|
237
|
+
self: InputModeTypeSelector,
|
|
238
|
+
inputModeType: InputModeType.InputModeType
|
|
239
|
+
)
|
|
207
240
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
208
241
|
|
|
209
|
-
if not self._maid[inputModeType] then
|
|
242
|
+
if not self._maid[inputModeType :: any] then
|
|
210
243
|
return
|
|
211
244
|
end
|
|
212
245
|
|
|
@@ -217,7 +250,7 @@ function InputModeTypeSelector:RemoveInputModeType(inputModeType)
|
|
|
217
250
|
warn("[InputModeTypeSelector] - Failed to find inputModeType")
|
|
218
251
|
end
|
|
219
252
|
|
|
220
|
-
self._maid[inputModeType] = nil
|
|
253
|
+
self._maid[inputModeType :: any] = nil
|
|
221
254
|
|
|
222
255
|
if self._activeModeType.Value == inputModeType then
|
|
223
256
|
self:_pickNewInputMode()
|
|
@@ -228,29 +261,32 @@ end
|
|
|
228
261
|
Adds a new input mode
|
|
229
262
|
@param inputModeType InputModeType
|
|
230
263
|
]=]
|
|
231
|
-
function InputModeTypeSelector
|
|
264
|
+
function InputModeTypeSelector.AddInputModeType(self: InputModeTypeSelector, inputModeType: InputModeType.InputModeType)
|
|
232
265
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
233
266
|
|
|
234
|
-
if self._maid[inputModeType] then
|
|
267
|
+
if self._maid[inputModeType :: any] then
|
|
235
268
|
return
|
|
236
269
|
end
|
|
237
270
|
|
|
238
271
|
table.insert(self._inputModeTypeList, inputModeType)
|
|
239
272
|
local inputMode = self._inputModeServiceClient:GetInputMode(inputModeType)
|
|
240
|
-
self._maid[inputModeType] = inputMode.Enabled:Connect(function()
|
|
273
|
+
self._maid[inputModeType :: any] = inputMode.Enabled:Connect(function()
|
|
241
274
|
self._activeModeType.Value = inputModeType
|
|
242
275
|
end)
|
|
243
276
|
|
|
244
|
-
if
|
|
245
|
-
|
|
277
|
+
if
|
|
278
|
+
not self._activeModeType.Value
|
|
279
|
+
or inputMode:GetLastEnabledTime()
|
|
280
|
+
> self._inputModeServiceClient:GetInputMode(self._activeModeType.Value):GetLastEnabledTime()
|
|
281
|
+
then
|
|
246
282
|
self._activeModeType.Value = inputModeType
|
|
247
283
|
end
|
|
248
284
|
end
|
|
249
285
|
|
|
250
|
-
function InputModeTypeSelector
|
|
286
|
+
function InputModeTypeSelector._pickNewInputMode(self: InputModeTypeSelector)
|
|
251
287
|
local bestEnabledTime = -math.huge
|
|
252
288
|
local bestModeType
|
|
253
|
-
for _, inputModeType in
|
|
289
|
+
for _, inputModeType in self._inputModeTypeList do
|
|
254
290
|
local enableTime = self._inputModeServiceClient:GetInputMode(inputModeType):GetLastEnabledTime()
|
|
255
291
|
if enableTime >= bestEnabledTime then
|
|
256
292
|
bestEnabledTime = enableTime
|
|
@@ -268,9 +304,9 @@ end
|
|
|
268
304
|
This should be called whenever the mode selector is done being used.
|
|
269
305
|
:::
|
|
270
306
|
]=]
|
|
271
|
-
function InputModeTypeSelector
|
|
307
|
+
function InputModeTypeSelector.Destroy(self: InputModeTypeSelector)
|
|
272
308
|
self._maid:DoCleaning()
|
|
273
|
-
setmetatable(self, nil)
|
|
309
|
+
setmetatable(self :: any, nil)
|
|
274
310
|
end
|
|
275
311
|
|
|
276
312
|
return InputModeTypeSelector
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Type specification for input modes, which is static. Separated out from InputMode which is dynamic.
|
|
3
4
|
|
|
@@ -12,21 +13,33 @@ local InputModeType = {}
|
|
|
12
13
|
InputModeType.ClassName = "InputModeType"
|
|
13
14
|
InputModeType.__index = InputModeType
|
|
14
15
|
|
|
16
|
+
export type InputModeType = typeof(setmetatable(
|
|
17
|
+
{} :: {
|
|
18
|
+
_keys: { any },
|
|
19
|
+
_valid: { [any]: boolean },
|
|
20
|
+
Name: string,
|
|
21
|
+
},
|
|
22
|
+
InputModeType
|
|
23
|
+
))
|
|
24
|
+
|
|
25
|
+
export type InputModeKey = Enum.UserInputType | Enum.KeyCode | string
|
|
26
|
+
export type InputModeTypeDefinition = { InputModeType | InputModeKey }
|
|
27
|
+
|
|
15
28
|
--[=[
|
|
16
29
|
Constructs a new InputModeType
|
|
17
30
|
|
|
18
31
|
@param name string
|
|
19
|
-
@param
|
|
32
|
+
@param typesAndInputModeTypes { Enum.UserInputType | Enum.KeyCode | string | InputModeType }
|
|
20
33
|
@return InputMode
|
|
21
34
|
]=]
|
|
22
|
-
function InputModeType.new(name,
|
|
35
|
+
function InputModeType.new(name: string, typesAndInputModeTypes: InputModeTypeDefinition)
|
|
23
36
|
local self = setmetatable({}, InputModeType)
|
|
24
37
|
|
|
25
38
|
self._valid = {}
|
|
26
39
|
self._keys = {}
|
|
27
40
|
self.Name = name or "Unnamed"
|
|
28
41
|
|
|
29
|
-
self:_addValidTypesFromTable(
|
|
42
|
+
self:_addValidTypesFromTable(typesAndInputModeTypes)
|
|
30
43
|
|
|
31
44
|
return self
|
|
32
45
|
end
|
|
@@ -36,7 +49,7 @@ end
|
|
|
36
49
|
@param value any
|
|
37
50
|
@return boolean
|
|
38
51
|
]=]
|
|
39
|
-
function InputModeType.isInputModeType(value)
|
|
52
|
+
function InputModeType.isInputModeType(value: any): boolean
|
|
40
53
|
return DuckTypeUtils.isImplementation(InputModeType, value)
|
|
41
54
|
end
|
|
42
55
|
|
|
@@ -45,7 +58,7 @@ end
|
|
|
45
58
|
@param inputType { UserInputType | KeyCode | string }
|
|
46
59
|
@return boolean
|
|
47
60
|
]=]
|
|
48
|
-
function InputModeType
|
|
61
|
+
function InputModeType.IsValid(self: InputModeType, inputType: InputModeKey): boolean
|
|
49
62
|
assert(inputType, "Must send in inputType")
|
|
50
63
|
|
|
51
64
|
return self._valid[inputType]
|
|
@@ -55,29 +68,29 @@ end
|
|
|
55
68
|
Returns all keys defining the input mode.
|
|
56
69
|
@return { UserInputType | KeyCode | string }
|
|
57
70
|
]=]
|
|
58
|
-
function InputModeType
|
|
71
|
+
function InputModeType.GetKeys(self: InputModeType): { InputModeKey }
|
|
59
72
|
return self._keys
|
|
60
73
|
end
|
|
61
74
|
|
|
62
|
-
function InputModeType
|
|
63
|
-
for _, key in
|
|
75
|
+
function InputModeType._addValidTypesFromTable(self: InputModeType, keys: { InputModeKey | InputModeType })
|
|
76
|
+
for _, key in keys do
|
|
64
77
|
if typeof(key) == "EnumItem" then
|
|
65
78
|
if not self._valid[key] then
|
|
66
79
|
self._valid[key] = true
|
|
67
80
|
table.insert(self._keys, key)
|
|
68
81
|
end
|
|
69
82
|
elseif InputModeType.isInputModeType(key) then
|
|
70
|
-
self:_addInputModeType(key)
|
|
83
|
+
self:_addInputModeType(key :: any)
|
|
71
84
|
else
|
|
72
85
|
warn(string.format("[InputModeType] - Invalid key of value %q of type %s", tostring(key), typeof(key)))
|
|
73
86
|
end
|
|
74
87
|
end
|
|
75
88
|
end
|
|
76
89
|
|
|
77
|
-
function InputModeType
|
|
90
|
+
function InputModeType._addInputModeType(self: InputModeType, inputModeType: InputModeType)
|
|
78
91
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
79
92
|
|
|
80
|
-
for _, key in
|
|
93
|
+
for _, key in inputModeType._keys do
|
|
81
94
|
if not self._valid[key] then
|
|
82
95
|
self._valid[key] = true
|
|
83
96
|
table.insert(self._keys, key)
|
|
@@ -85,6 +98,4 @@ function InputModeType:_addInputModeType(inputModeType)
|
|
|
85
98
|
end
|
|
86
99
|
end
|
|
87
100
|
|
|
88
|
-
|
|
89
|
-
|
|
90
101
|
return InputModeType
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
--!strict
|
|
1
2
|
--[=[
|
|
2
3
|
Holds all the input mode type configuration, accessible on both the server and the client for keybinding validations.
|
|
3
4
|
@class InputModeTypes
|
|
@@ -17,23 +18,23 @@ local InputModeTypes = {}
|
|
|
17
18
|
@within InputModeTypes
|
|
18
19
|
]=]
|
|
19
20
|
InputModeTypes.Keypad = InputModeType.new("Keypad", {
|
|
20
|
-
Enum.KeyCode.KeypadZero
|
|
21
|
-
Enum.KeyCode.KeypadOne
|
|
22
|
-
Enum.KeyCode.KeypadTwo
|
|
23
|
-
Enum.KeyCode.KeypadThree
|
|
24
|
-
Enum.KeyCode.KeypadFour
|
|
25
|
-
Enum.KeyCode.KeypadFive
|
|
26
|
-
Enum.KeyCode.KeypadSix
|
|
27
|
-
Enum.KeyCode.KeypadSeven
|
|
28
|
-
Enum.KeyCode.KeypadEight
|
|
29
|
-
Enum.KeyCode.KeypadNine
|
|
30
|
-
Enum.KeyCode.KeypadPeriod
|
|
31
|
-
Enum.KeyCode.KeypadDivide
|
|
32
|
-
Enum.KeyCode.KeypadMultiply
|
|
33
|
-
Enum.KeyCode.KeypadMinus
|
|
34
|
-
Enum.KeyCode.KeypadPlus
|
|
35
|
-
Enum.KeyCode.KeypadEnter
|
|
36
|
-
Enum.KeyCode.KeypadEquals
|
|
21
|
+
Enum.KeyCode.KeypadZero,
|
|
22
|
+
Enum.KeyCode.KeypadOne,
|
|
23
|
+
Enum.KeyCode.KeypadTwo,
|
|
24
|
+
Enum.KeyCode.KeypadThree,
|
|
25
|
+
Enum.KeyCode.KeypadFour,
|
|
26
|
+
Enum.KeyCode.KeypadFive,
|
|
27
|
+
Enum.KeyCode.KeypadSix,
|
|
28
|
+
Enum.KeyCode.KeypadSeven,
|
|
29
|
+
Enum.KeyCode.KeypadEight,
|
|
30
|
+
Enum.KeyCode.KeypadNine,
|
|
31
|
+
Enum.KeyCode.KeypadPeriod,
|
|
32
|
+
Enum.KeyCode.KeypadDivide,
|
|
33
|
+
Enum.KeyCode.KeypadMultiply,
|
|
34
|
+
Enum.KeyCode.KeypadMinus,
|
|
35
|
+
Enum.KeyCode.KeypadPlus,
|
|
36
|
+
Enum.KeyCode.KeypadEnter,
|
|
37
|
+
Enum.KeyCode.KeypadEquals,
|
|
37
38
|
})
|
|
38
39
|
|
|
39
40
|
--[=[
|
|
@@ -43,134 +44,134 @@ InputModeTypes.Keypad = InputModeType.new("Keypad", {
|
|
|
43
44
|
@within InputModeTypes
|
|
44
45
|
]=]
|
|
45
46
|
InputModeTypes.Keyboard = InputModeType.new("Keyboard", {
|
|
46
|
-
Enum.UserInputType.Keyboard
|
|
47
|
+
Enum.UserInputType.Keyboard,
|
|
47
48
|
|
|
48
49
|
-- Other input modes
|
|
49
|
-
InputModeTypes.Keypad
|
|
50
|
+
InputModeTypes.Keypad,
|
|
50
51
|
|
|
51
52
|
-- Valid KeyCodes for input binding
|
|
52
|
-
Enum.KeyCode.Backspace
|
|
53
|
-
Enum.KeyCode.Tab
|
|
54
|
-
Enum.KeyCode.Clear
|
|
55
|
-
Enum.KeyCode.Return
|
|
56
|
-
Enum.KeyCode.Pause
|
|
57
|
-
Enum.KeyCode.Escape
|
|
58
|
-
Enum.KeyCode.Space
|
|
59
|
-
Enum.KeyCode.QuotedDouble
|
|
60
|
-
Enum.KeyCode.Hash
|
|
61
|
-
Enum.KeyCode.Dollar
|
|
62
|
-
Enum.KeyCode.Percent
|
|
63
|
-
Enum.KeyCode.Ampersand
|
|
64
|
-
Enum.KeyCode.Quote
|
|
65
|
-
Enum.KeyCode.LeftParenthesis
|
|
66
|
-
Enum.KeyCode.RightParenthesis
|
|
67
|
-
Enum.KeyCode.Asterisk
|
|
68
|
-
Enum.KeyCode.Plus
|
|
69
|
-
Enum.KeyCode.Comma
|
|
70
|
-
Enum.KeyCode.Minus
|
|
71
|
-
Enum.KeyCode.Period
|
|
72
|
-
Enum.KeyCode.Slash
|
|
73
|
-
Enum.KeyCode.Zero
|
|
74
|
-
Enum.KeyCode.One
|
|
75
|
-
Enum.KeyCode.Two
|
|
76
|
-
Enum.KeyCode.Three
|
|
77
|
-
Enum.KeyCode.Four
|
|
78
|
-
Enum.KeyCode.Five
|
|
79
|
-
Enum.KeyCode.Six
|
|
80
|
-
Enum.KeyCode.Seven
|
|
81
|
-
Enum.KeyCode.Eight
|
|
82
|
-
Enum.KeyCode.Nine
|
|
83
|
-
Enum.KeyCode.Colon
|
|
84
|
-
Enum.KeyCode.Semicolon
|
|
85
|
-
Enum.KeyCode.LessThan
|
|
86
|
-
Enum.KeyCode.Equals
|
|
87
|
-
Enum.KeyCode.GreaterThan
|
|
88
|
-
Enum.KeyCode.Question
|
|
89
|
-
Enum.KeyCode.At
|
|
90
|
-
Enum.KeyCode.LeftBracket
|
|
91
|
-
Enum.KeyCode.BackSlash
|
|
92
|
-
Enum.KeyCode.RightBracket
|
|
93
|
-
Enum.KeyCode.Caret
|
|
94
|
-
Enum.KeyCode.Underscore
|
|
95
|
-
Enum.KeyCode.Backquote
|
|
96
|
-
Enum.KeyCode.A
|
|
97
|
-
Enum.KeyCode.B
|
|
98
|
-
Enum.KeyCode.C
|
|
99
|
-
Enum.KeyCode.D
|
|
100
|
-
Enum.KeyCode.E
|
|
101
|
-
Enum.KeyCode.F
|
|
102
|
-
Enum.KeyCode.G
|
|
103
|
-
Enum.KeyCode.H
|
|
104
|
-
Enum.KeyCode.I
|
|
105
|
-
Enum.KeyCode.J
|
|
106
|
-
Enum.KeyCode.K
|
|
107
|
-
Enum.KeyCode.L
|
|
108
|
-
Enum.KeyCode.M
|
|
109
|
-
Enum.KeyCode.N
|
|
110
|
-
Enum.KeyCode.O
|
|
111
|
-
Enum.KeyCode.P
|
|
112
|
-
Enum.KeyCode.Q
|
|
113
|
-
Enum.KeyCode.R
|
|
114
|
-
Enum.KeyCode.S
|
|
115
|
-
Enum.KeyCode.T
|
|
116
|
-
Enum.KeyCode.U
|
|
117
|
-
Enum.KeyCode.V
|
|
118
|
-
Enum.KeyCode.W
|
|
119
|
-
Enum.KeyCode.X
|
|
120
|
-
Enum.KeyCode.Y
|
|
121
|
-
Enum.KeyCode.Z
|
|
122
|
-
Enum.KeyCode.LeftCurly
|
|
123
|
-
Enum.KeyCode.Pipe
|
|
124
|
-
Enum.KeyCode.RightCurly
|
|
125
|
-
Enum.KeyCode.Tilde
|
|
126
|
-
Enum.KeyCode.Delete
|
|
127
|
-
Enum.KeyCode.Up
|
|
128
|
-
Enum.KeyCode.Down
|
|
129
|
-
Enum.KeyCode.Right
|
|
130
|
-
Enum.KeyCode.Left
|
|
131
|
-
Enum.KeyCode.Insert
|
|
132
|
-
Enum.KeyCode.Home
|
|
133
|
-
Enum.KeyCode.End
|
|
134
|
-
Enum.KeyCode.PageUp
|
|
135
|
-
Enum.KeyCode.PageDown
|
|
136
|
-
Enum.KeyCode.F1
|
|
137
|
-
Enum.KeyCode.F2
|
|
138
|
-
Enum.KeyCode.F3
|
|
139
|
-
Enum.KeyCode.F4
|
|
140
|
-
Enum.KeyCode.F5
|
|
141
|
-
Enum.KeyCode.F6
|
|
142
|
-
Enum.KeyCode.F7
|
|
143
|
-
Enum.KeyCode.F8
|
|
144
|
-
Enum.KeyCode.F9
|
|
145
|
-
Enum.KeyCode.F10
|
|
146
|
-
Enum.KeyCode.F11
|
|
147
|
-
Enum.KeyCode.F12
|
|
148
|
-
Enum.KeyCode.F13
|
|
149
|
-
Enum.KeyCode.F14
|
|
150
|
-
Enum.KeyCode.F15
|
|
151
|
-
Enum.KeyCode.NumLock
|
|
152
|
-
Enum.KeyCode.CapsLock
|
|
153
|
-
Enum.KeyCode.ScrollLock
|
|
154
|
-
Enum.KeyCode.RightShift
|
|
155
|
-
Enum.KeyCode.LeftShift
|
|
156
|
-
Enum.KeyCode.RightControl
|
|
157
|
-
Enum.KeyCode.LeftControl
|
|
158
|
-
Enum.KeyCode.RightAlt
|
|
159
|
-
Enum.KeyCode.LeftAlt
|
|
160
|
-
Enum.KeyCode.RightMeta
|
|
161
|
-
Enum.KeyCode.LeftMeta
|
|
162
|
-
Enum.KeyCode.LeftSuper
|
|
163
|
-
Enum.KeyCode.RightSuper
|
|
164
|
-
Enum.KeyCode.Mode
|
|
165
|
-
Enum.KeyCode.Compose
|
|
166
|
-
Enum.KeyCode.Help
|
|
167
|
-
Enum.KeyCode.Print
|
|
168
|
-
Enum.KeyCode.SysReq
|
|
169
|
-
Enum.KeyCode.Break
|
|
170
|
-
Enum.KeyCode.Menu
|
|
171
|
-
Enum.KeyCode.Power
|
|
172
|
-
Enum.KeyCode.Euro
|
|
173
|
-
Enum.KeyCode.Undo
|
|
53
|
+
Enum.KeyCode.Backspace,
|
|
54
|
+
Enum.KeyCode.Tab,
|
|
55
|
+
Enum.KeyCode.Clear,
|
|
56
|
+
Enum.KeyCode.Return,
|
|
57
|
+
Enum.KeyCode.Pause,
|
|
58
|
+
Enum.KeyCode.Escape,
|
|
59
|
+
Enum.KeyCode.Space,
|
|
60
|
+
Enum.KeyCode.QuotedDouble,
|
|
61
|
+
Enum.KeyCode.Hash,
|
|
62
|
+
Enum.KeyCode.Dollar,
|
|
63
|
+
Enum.KeyCode.Percent,
|
|
64
|
+
Enum.KeyCode.Ampersand,
|
|
65
|
+
Enum.KeyCode.Quote,
|
|
66
|
+
Enum.KeyCode.LeftParenthesis,
|
|
67
|
+
Enum.KeyCode.RightParenthesis,
|
|
68
|
+
Enum.KeyCode.Asterisk,
|
|
69
|
+
Enum.KeyCode.Plus,
|
|
70
|
+
Enum.KeyCode.Comma,
|
|
71
|
+
Enum.KeyCode.Minus,
|
|
72
|
+
Enum.KeyCode.Period,
|
|
73
|
+
Enum.KeyCode.Slash,
|
|
74
|
+
Enum.KeyCode.Zero,
|
|
75
|
+
Enum.KeyCode.One,
|
|
76
|
+
Enum.KeyCode.Two,
|
|
77
|
+
Enum.KeyCode.Three,
|
|
78
|
+
Enum.KeyCode.Four,
|
|
79
|
+
Enum.KeyCode.Five,
|
|
80
|
+
Enum.KeyCode.Six,
|
|
81
|
+
Enum.KeyCode.Seven,
|
|
82
|
+
Enum.KeyCode.Eight,
|
|
83
|
+
Enum.KeyCode.Nine,
|
|
84
|
+
Enum.KeyCode.Colon,
|
|
85
|
+
Enum.KeyCode.Semicolon,
|
|
86
|
+
Enum.KeyCode.LessThan,
|
|
87
|
+
Enum.KeyCode.Equals,
|
|
88
|
+
Enum.KeyCode.GreaterThan,
|
|
89
|
+
Enum.KeyCode.Question,
|
|
90
|
+
Enum.KeyCode.At,
|
|
91
|
+
Enum.KeyCode.LeftBracket,
|
|
92
|
+
Enum.KeyCode.BackSlash,
|
|
93
|
+
Enum.KeyCode.RightBracket,
|
|
94
|
+
Enum.KeyCode.Caret,
|
|
95
|
+
Enum.KeyCode.Underscore,
|
|
96
|
+
Enum.KeyCode.Backquote,
|
|
97
|
+
Enum.KeyCode.A,
|
|
98
|
+
Enum.KeyCode.B,
|
|
99
|
+
Enum.KeyCode.C,
|
|
100
|
+
Enum.KeyCode.D,
|
|
101
|
+
Enum.KeyCode.E,
|
|
102
|
+
Enum.KeyCode.F,
|
|
103
|
+
Enum.KeyCode.G,
|
|
104
|
+
Enum.KeyCode.H,
|
|
105
|
+
Enum.KeyCode.I,
|
|
106
|
+
Enum.KeyCode.J,
|
|
107
|
+
Enum.KeyCode.K,
|
|
108
|
+
Enum.KeyCode.L,
|
|
109
|
+
Enum.KeyCode.M,
|
|
110
|
+
Enum.KeyCode.N,
|
|
111
|
+
Enum.KeyCode.O,
|
|
112
|
+
Enum.KeyCode.P,
|
|
113
|
+
Enum.KeyCode.Q,
|
|
114
|
+
Enum.KeyCode.R,
|
|
115
|
+
Enum.KeyCode.S,
|
|
116
|
+
Enum.KeyCode.T,
|
|
117
|
+
Enum.KeyCode.U,
|
|
118
|
+
Enum.KeyCode.V,
|
|
119
|
+
Enum.KeyCode.W,
|
|
120
|
+
Enum.KeyCode.X,
|
|
121
|
+
Enum.KeyCode.Y,
|
|
122
|
+
Enum.KeyCode.Z,
|
|
123
|
+
Enum.KeyCode.LeftCurly,
|
|
124
|
+
Enum.KeyCode.Pipe,
|
|
125
|
+
Enum.KeyCode.RightCurly,
|
|
126
|
+
Enum.KeyCode.Tilde,
|
|
127
|
+
Enum.KeyCode.Delete,
|
|
128
|
+
Enum.KeyCode.Up,
|
|
129
|
+
Enum.KeyCode.Down,
|
|
130
|
+
Enum.KeyCode.Right,
|
|
131
|
+
Enum.KeyCode.Left,
|
|
132
|
+
Enum.KeyCode.Insert,
|
|
133
|
+
Enum.KeyCode.Home,
|
|
134
|
+
Enum.KeyCode.End,
|
|
135
|
+
Enum.KeyCode.PageUp,
|
|
136
|
+
Enum.KeyCode.PageDown,
|
|
137
|
+
Enum.KeyCode.F1,
|
|
138
|
+
Enum.KeyCode.F2,
|
|
139
|
+
Enum.KeyCode.F3,
|
|
140
|
+
Enum.KeyCode.F4,
|
|
141
|
+
Enum.KeyCode.F5,
|
|
142
|
+
Enum.KeyCode.F6,
|
|
143
|
+
Enum.KeyCode.F7,
|
|
144
|
+
Enum.KeyCode.F8,
|
|
145
|
+
Enum.KeyCode.F9,
|
|
146
|
+
Enum.KeyCode.F10,
|
|
147
|
+
Enum.KeyCode.F11,
|
|
148
|
+
Enum.KeyCode.F12,
|
|
149
|
+
Enum.KeyCode.F13,
|
|
150
|
+
Enum.KeyCode.F14,
|
|
151
|
+
Enum.KeyCode.F15,
|
|
152
|
+
Enum.KeyCode.NumLock,
|
|
153
|
+
Enum.KeyCode.CapsLock,
|
|
154
|
+
Enum.KeyCode.ScrollLock,
|
|
155
|
+
Enum.KeyCode.RightShift,
|
|
156
|
+
Enum.KeyCode.LeftShift,
|
|
157
|
+
Enum.KeyCode.RightControl,
|
|
158
|
+
Enum.KeyCode.LeftControl,
|
|
159
|
+
Enum.KeyCode.RightAlt,
|
|
160
|
+
Enum.KeyCode.LeftAlt,
|
|
161
|
+
Enum.KeyCode.RightMeta,
|
|
162
|
+
Enum.KeyCode.LeftMeta,
|
|
163
|
+
Enum.KeyCode.LeftSuper,
|
|
164
|
+
Enum.KeyCode.RightSuper,
|
|
165
|
+
Enum.KeyCode.Mode,
|
|
166
|
+
Enum.KeyCode.Compose,
|
|
167
|
+
Enum.KeyCode.Help,
|
|
168
|
+
Enum.KeyCode.Print,
|
|
169
|
+
Enum.KeyCode.SysReq,
|
|
170
|
+
Enum.KeyCode.Break,
|
|
171
|
+
Enum.KeyCode.Menu,
|
|
172
|
+
Enum.KeyCode.Power,
|
|
173
|
+
Enum.KeyCode.Euro,
|
|
174
|
+
Enum.KeyCode.Undo,
|
|
174
175
|
})
|
|
175
176
|
|
|
176
177
|
--[=[
|
|
@@ -180,10 +181,10 @@ InputModeTypes.Keyboard = InputModeType.new("Keyboard", {
|
|
|
180
181
|
@within InputModeTypes
|
|
181
182
|
]=]
|
|
182
183
|
InputModeTypes.ArrowKeys = InputModeType.new("ArrowKeys", {
|
|
183
|
-
Enum.KeyCode.Left
|
|
184
|
-
Enum.KeyCode.Right
|
|
185
|
-
Enum.KeyCode.Up
|
|
186
|
-
Enum.KeyCode.Down
|
|
184
|
+
Enum.KeyCode.Left,
|
|
185
|
+
Enum.KeyCode.Right,
|
|
186
|
+
Enum.KeyCode.Up,
|
|
187
|
+
Enum.KeyCode.Down,
|
|
187
188
|
})
|
|
188
189
|
|
|
189
190
|
--[=[
|
|
@@ -193,10 +194,10 @@ InputModeTypes.ArrowKeys = InputModeType.new("ArrowKeys", {
|
|
|
193
194
|
@within InputModeTypes
|
|
194
195
|
]=]
|
|
195
196
|
InputModeTypes.WASD = InputModeType.new("WASD", {
|
|
196
|
-
Enum.KeyCode.W
|
|
197
|
-
Enum.KeyCode.A
|
|
198
|
-
Enum.KeyCode.S
|
|
199
|
-
Enum.KeyCode.D
|
|
197
|
+
Enum.KeyCode.W,
|
|
198
|
+
Enum.KeyCode.A,
|
|
199
|
+
Enum.KeyCode.S,
|
|
200
|
+
Enum.KeyCode.D,
|
|
200
201
|
})
|
|
201
202
|
|
|
202
203
|
--[=[
|
|
@@ -206,11 +207,11 @@ InputModeTypes.WASD = InputModeType.new("WASD", {
|
|
|
206
207
|
@within InputModeTypes
|
|
207
208
|
]=]
|
|
208
209
|
InputModeTypes.Mouse = InputModeType.new("Mouse", {
|
|
209
|
-
Enum.UserInputType.MouseButton1
|
|
210
|
-
Enum.UserInputType.MouseButton2
|
|
211
|
-
Enum.UserInputType.MouseButton3
|
|
212
|
-
Enum.UserInputType.MouseWheel
|
|
213
|
-
Enum.UserInputType.MouseMovement
|
|
210
|
+
Enum.UserInputType.MouseButton1,
|
|
211
|
+
Enum.UserInputType.MouseButton2,
|
|
212
|
+
Enum.UserInputType.MouseButton3,
|
|
213
|
+
Enum.UserInputType.MouseWheel,
|
|
214
|
+
Enum.UserInputType.MouseMovement,
|
|
214
215
|
})
|
|
215
216
|
|
|
216
217
|
--[=[
|
|
@@ -220,8 +221,8 @@ InputModeTypes.Mouse = InputModeType.new("Mouse", {
|
|
|
220
221
|
@within InputModeTypes
|
|
221
222
|
]=]
|
|
222
223
|
InputModeTypes.KeyboardAndMouse = InputModeType.new("KeyboardAndMouse", {
|
|
223
|
-
InputModeTypes.Mouse
|
|
224
|
-
InputModeTypes.Keyboard
|
|
224
|
+
InputModeTypes.Mouse,
|
|
225
|
+
InputModeTypes.Keyboard,
|
|
225
226
|
})
|
|
226
227
|
|
|
227
228
|
--[=[
|
|
@@ -231,7 +232,7 @@ InputModeTypes.KeyboardAndMouse = InputModeType.new("KeyboardAndMouse", {
|
|
|
231
232
|
@within InputModeTypes
|
|
232
233
|
]=]
|
|
233
234
|
InputModeTypes.Touch = InputModeType.new("Touch", {
|
|
234
|
-
Enum.UserInputType.Touch
|
|
235
|
+
Enum.UserInputType.Touch,
|
|
235
236
|
})
|
|
236
237
|
|
|
237
238
|
--[=[
|
|
@@ -240,10 +241,10 @@ InputModeTypes.Touch = InputModeType.new("Touch", {
|
|
|
240
241
|
@within InputModeTypes
|
|
241
242
|
]=]
|
|
242
243
|
InputModeTypes.DPad = InputModeType.new("DPad", {
|
|
243
|
-
Enum.KeyCode.DPadLeft
|
|
244
|
-
Enum.KeyCode.DPadRight
|
|
245
|
-
Enum.KeyCode.DPadUp
|
|
246
|
-
Enum.KeyCode.DPadDown
|
|
244
|
+
Enum.KeyCode.DPadLeft,
|
|
245
|
+
Enum.KeyCode.DPadRight,
|
|
246
|
+
Enum.KeyCode.DPadUp,
|
|
247
|
+
Enum.KeyCode.DPadDown,
|
|
247
248
|
})
|
|
248
249
|
|
|
249
250
|
--[=[
|
|
@@ -253,8 +254,8 @@ InputModeTypes.DPad = InputModeType.new("DPad", {
|
|
|
253
254
|
@within InputModeTypes
|
|
254
255
|
]=]
|
|
255
256
|
InputModeTypes.Thumbsticks = InputModeType.new("Thumbsticks", {
|
|
256
|
-
Enum.KeyCode.Thumbstick1
|
|
257
|
-
Enum.KeyCode.Thumbstick2
|
|
257
|
+
Enum.KeyCode.Thumbstick1,
|
|
258
|
+
Enum.KeyCode.Thumbstick2,
|
|
258
259
|
})
|
|
259
260
|
|
|
260
261
|
--[=[
|
|
@@ -264,32 +265,45 @@ InputModeTypes.Thumbsticks = InputModeType.new("Thumbsticks", {
|
|
|
264
265
|
@within InputModeTypes
|
|
265
266
|
]=]
|
|
266
267
|
InputModeTypes.Gamepads = InputModeType.new("Gamepads", {
|
|
267
|
-
Enum.UserInputType.Gamepad1
|
|
268
|
-
Enum.UserInputType.Gamepad2
|
|
269
|
-
Enum.UserInputType.Gamepad3
|
|
270
|
-
Enum.UserInputType.Gamepad4
|
|
271
|
-
Enum.UserInputType.Gamepad5
|
|
272
|
-
Enum.UserInputType.Gamepad6
|
|
273
|
-
Enum.UserInputType.Gamepad7
|
|
274
|
-
Enum.UserInputType.Gamepad8
|
|
268
|
+
Enum.UserInputType.Gamepad1,
|
|
269
|
+
Enum.UserInputType.Gamepad2,
|
|
270
|
+
Enum.UserInputType.Gamepad3,
|
|
271
|
+
Enum.UserInputType.Gamepad4,
|
|
272
|
+
Enum.UserInputType.Gamepad5,
|
|
273
|
+
Enum.UserInputType.Gamepad6,
|
|
274
|
+
Enum.UserInputType.Gamepad7,
|
|
275
|
+
Enum.UserInputType.Gamepad8,
|
|
275
276
|
|
|
276
277
|
-- Valid KeyCodes for input binding
|
|
277
|
-
Enum.KeyCode.ButtonX
|
|
278
|
-
Enum.KeyCode.ButtonY
|
|
279
|
-
Enum.KeyCode.ButtonA
|
|
280
|
-
Enum.KeyCode.ButtonB
|
|
281
|
-
Enum.KeyCode.ButtonR1
|
|
282
|
-
Enum.KeyCode.ButtonL1
|
|
283
|
-
Enum.KeyCode.ButtonR2
|
|
284
|
-
Enum.KeyCode.ButtonL2
|
|
285
|
-
Enum.KeyCode.ButtonR3
|
|
286
|
-
Enum.KeyCode.ButtonL3
|
|
287
|
-
Enum.KeyCode.ButtonStart
|
|
288
|
-
Enum.KeyCode.ButtonSelect
|
|
289
|
-
Enum.KeyCode.DPadLeft
|
|
290
|
-
Enum.KeyCode.DPadRight
|
|
291
|
-
Enum.KeyCode.DPadUp
|
|
292
|
-
Enum.KeyCode.DPadDown
|
|
278
|
+
Enum.KeyCode.ButtonX,
|
|
279
|
+
Enum.KeyCode.ButtonY,
|
|
280
|
+
Enum.KeyCode.ButtonA,
|
|
281
|
+
Enum.KeyCode.ButtonB,
|
|
282
|
+
Enum.KeyCode.ButtonR1,
|
|
283
|
+
Enum.KeyCode.ButtonL1,
|
|
284
|
+
Enum.KeyCode.ButtonR2,
|
|
285
|
+
Enum.KeyCode.ButtonL2,
|
|
286
|
+
Enum.KeyCode.ButtonR3,
|
|
287
|
+
Enum.KeyCode.ButtonL3,
|
|
288
|
+
Enum.KeyCode.ButtonStart,
|
|
289
|
+
Enum.KeyCode.ButtonSelect,
|
|
290
|
+
Enum.KeyCode.DPadLeft,
|
|
291
|
+
Enum.KeyCode.DPadRight,
|
|
292
|
+
Enum.KeyCode.DPadUp,
|
|
293
|
+
Enum.KeyCode.DPadDown,
|
|
293
294
|
})
|
|
294
295
|
|
|
295
|
-
|
|
296
|
+
export type InputModeTypes = {
|
|
297
|
+
Keypad: InputModeType.InputModeType,
|
|
298
|
+
Keyboard: InputModeType.InputModeType,
|
|
299
|
+
ArrowKeys: InputModeType.InputModeType,
|
|
300
|
+
WASD: InputModeType.InputModeType,
|
|
301
|
+
Mouse: InputModeType.InputModeType,
|
|
302
|
+
KeyboardAndMouse: InputModeType.InputModeType,
|
|
303
|
+
Touch: InputModeType.InputModeType,
|
|
304
|
+
DPad: InputModeType.InputModeType,
|
|
305
|
+
Thumbsticks: InputModeType.InputModeType,
|
|
306
|
+
Gamepads: InputModeType.InputModeType,
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return Table.readonly(InputModeTypes :: InputModeTypes)
|