@quenty/inputmode 13.18.0 → 13.18.1-canary.545.2374fb2.0

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 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-canary.545.2374fb2.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/inputmode@13.18.0...@quenty/inputmode@13.18.1-canary.545.2374fb2.0) (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.0",
3
+ "version": "13.18.1-canary.545.2374fb2.0",
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.1",
29
- "@quenty/loader": "^10.8.0",
30
- "@quenty/maid": "^3.4.0",
31
- "@quenty/rx": "^13.17.0",
32
- "@quenty/servicebag": "^11.11.1",
33
- "@quenty/signal": "^7.10.0",
34
- "@quenty/table": "^3.7.1",
35
- "@quenty/valueobject": "^13.17.0"
28
+ "@quenty/ducktype": "5.8.2-canary.545.2374fb2.0",
29
+ "@quenty/loader": "10.8.1-canary.545.2374fb2.0",
30
+ "@quenty/maid": "3.4.1-canary.545.2374fb2.0",
31
+ "@quenty/rx": "13.17.1-canary.545.2374fb2.0",
32
+ "@quenty/servicebag": "11.11.2-canary.545.2374fb2.0",
33
+ "@quenty/signal": "7.10.1-canary.545.2374fb2.0",
34
+ "@quenty/table": "3.7.2-canary.545.2374fb2.0",
35
+ "@quenty/valueobject": "13.17.1-canary.545.2374fb2.0"
36
36
  },
37
37
  "publishConfig": {
38
38
  "access": "public"
39
39
  },
40
- "gitHead": "e8ea56930e65322fcffc05a1556d5df988068f0b"
40
+ "gitHead": "2374fb2b043cfbe0e9b507b3316eec46a4e353a0"
41
41
  }
@@ -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:GetLastEnabledTime()
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:GetKeys()
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:IsValid(inputType)
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:Enable()
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:Evaluate(inputObject)
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:Destroy()
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 pairs(inputModes) do
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
- function InputModeProcessor:AddInputMode(inputMode)
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:GetStates()
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:Evaluate(inputObject)
47
- for _, inputMode in pairs(self._inputModes) do
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
- function InputModeServiceClient:Init(serviceBag)
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:GetInputMode(inputModeType)
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:_triggerEnabled()
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 UserInputService.GamepadEnabled
112
+ if
113
+ UserInputService.GamepadEnabled
97
114
  or #UserInputService:GetConnectedGamepads() > 0
98
- or GuiService:IsTenFootInterface() then
115
+ or GuiService:IsTenFootInterface()
116
+ then
99
117
  self:GetInputMode(InputModeTypes.Gamepads):Enable()
100
118
  end
101
119
  end
102
120
 
103
- function InputModeServiceClient:_bindProcessor()
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
- or inputObject.KeyCode == Enum.KeyCode.Thumbstick2 then
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:_shouldProcessMouseMovement(inputObject)
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.magnitude > 0 then
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).magnitude > 0 then
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:Destroy()
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(serviceBag, inputModesTypes)
32
- local self = setmetatable({}, InputModeTypeSelector)
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 pairs(inputModesTypes or InputModeTypeSelector.DEFAULT_MODE_TYPES) do
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(serviceBag, observeInputModesBrio)
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:GetActiveInputType()
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:ObserveActiveInputType()
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:IsActive(inputModeType)
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:ObserveIsActive(inputModeType)
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:__index(index)
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:Bind(updateBindFunction)
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:RemoveInputModeType(inputModeType)
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:AddInputModeType(inputModeType)
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 not self._activeModeType.Value
245
- or inputMode:GetLastEnabledTime() > self._inputModeServiceClient:GetInputMode(self._activeModeType.Value):GetLastEnabledTime() then
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:_pickNewInputMode()
286
+ function InputModeTypeSelector._pickNewInputMode(self: InputModeTypeSelector)
251
287
  local bestEnabledTime = -math.huge
252
288
  local bestModeType
253
- for _, inputModeType in pairs(self._inputModeTypeList) do
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:Destroy()
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 typesAndInputModes { { UserInputType | KeyCode | string | InputMode } }
32
+ @param typesAndInputModeTypes { Enum.UserInputType | Enum.KeyCode | string | InputModeType }
20
33
  @return InputMode
21
34
  ]=]
22
- function InputModeType.new(name, typesAndInputModes)
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(typesAndInputModes)
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:IsValid(inputType)
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:GetKeys()
71
+ function InputModeType.GetKeys(self: InputModeType): { InputModeKey }
59
72
  return self._keys
60
73
  end
61
74
 
62
- function InputModeType:_addValidTypesFromTable(keys)
63
- for _, key in pairs(keys) do
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:_addInputModeType(inputModeType)
90
+ function InputModeType._addInputModeType(self: InputModeType, inputModeType: InputModeType)
78
91
  assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
79
92
 
80
- for _, key in pairs(inputModeType._keys) do
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
- return Table.readonly(InputModeTypes)
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)