@quenty/inputkeymaputils 14.23.3 → 14.23.4-canary.559.339cfa7.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 +17 -0
- package/package.json +19 -19
- package/src/Client/InputKeyMapListUtils.lua +4 -4
- package/src/Client/InputKeyMapServiceClient.lua +9 -5
- package/src/Server/InputKeyMapService.lua +3 -3
- package/src/Shared/InputKeyMap.lua +4 -4
- package/src/Shared/InputKeyMapList.lua +40 -37
- package/src/Shared/InputKeyMapListProvider.lua +11 -11
- package/src/Shared/InputKeyMapRegistryServiceShared.lua +4 -5
- package/src/Shared/InputKeyMapTranslator.lua +1 -1
- package/src/Shared/ProximityPromptInputUtils.lua +9 -6
- package/src/Shared/Types/InputChordUtils.lua +4 -4
- package/src/Shared/Types/InputTypeUtils.lua +1 -1
- package/src/Shared/Types/SlottedTouchButtonUtils.lua +9 -9
- package/test/modules/Shared/TestInputKeyMap.lua +12 -12
- package/test/scripts/Client/ClientMain.client.lua +1 -2
- package/test/scripts/Server/ServerMain.server.lua +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
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
|
+
## [14.23.4-canary.559.339cfa7.0](https://github.com/Quenty/NevermoreEngine/compare/@quenty/inputkeymaputils@14.23.3...@quenty/inputkeymaputils@14.23.4-canary.559.339cfa7.0) (2025-05-10)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* Additional type checking updates ([05ba29a](https://github.com/Quenty/NevermoreEngine/commit/05ba29a03efc9f3feed74b34f1d9dfb237496214))
|
|
12
|
+
* slottedtouchbutton recursion ([#557](https://github.com/Quenty/NevermoreEngine/issues/557)) ([c3e5c89](https://github.com/Quenty/NevermoreEngine/commit/c3e5c8977f9207f1b56489010ce12b204a28f4ae))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* Add even more types ([b31717d](https://github.com/Quenty/NevermoreEngine/commit/b31717d8c9f7620c457f5018a2affa760a65334a))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
## [14.23.3](https://github.com/Quenty/NevermoreEngine/compare/@quenty/inputkeymaputils@14.23.2...@quenty/inputkeymaputils@14.23.3) (2025-04-10)
|
|
7
24
|
|
|
8
25
|
**Note:** Version bump only for package @quenty/inputkeymaputils
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quenty/inputkeymaputils",
|
|
3
|
-
"version": "14.23.
|
|
3
|
+
"version": "14.23.4-canary.559.339cfa7.0",
|
|
4
4
|
"description": "System to define rebindable key bindings and inputs for Roblox.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Roblox",
|
|
@@ -26,26 +26,26 @@
|
|
|
26
26
|
"Quenty"
|
|
27
27
|
],
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@quenty/baseobject": "
|
|
30
|
-
"@quenty/brio": "
|
|
31
|
-
"@quenty/clienttranslator": "
|
|
32
|
-
"@quenty/ducktype": "
|
|
33
|
-
"@quenty/enumutils": "
|
|
34
|
-
"@quenty/inputmode": "
|
|
35
|
-
"@quenty/loader": "
|
|
36
|
-
"@quenty/maid": "
|
|
37
|
-
"@quenty/observablecollection": "
|
|
38
|
-
"@quenty/pseudolocalize": "
|
|
39
|
-
"@quenty/rx": "
|
|
40
|
-
"@quenty/servicebag": "
|
|
41
|
-
"@quenty/statestack": "
|
|
42
|
-
"@quenty/string": "
|
|
43
|
-
"@quenty/table": "
|
|
44
|
-
"@quenty/valuebaseutils": "
|
|
45
|
-
"@quenty/valueobject": "
|
|
29
|
+
"@quenty/baseobject": "10.8.4-canary.559.339cfa7.0",
|
|
30
|
+
"@quenty/brio": "14.17.4-canary.559.339cfa7.0",
|
|
31
|
+
"@quenty/clienttranslator": "14.19.4-canary.559.339cfa7.0",
|
|
32
|
+
"@quenty/ducktype": "5.8.5-canary.559.339cfa7.0",
|
|
33
|
+
"@quenty/enumutils": "3.4.2",
|
|
34
|
+
"@quenty/inputmode": "13.18.4-canary.559.339cfa7.0",
|
|
35
|
+
"@quenty/loader": "10.8.4-canary.559.339cfa7.0",
|
|
36
|
+
"@quenty/maid": "3.4.4-canary.559.339cfa7.0",
|
|
37
|
+
"@quenty/observablecollection": "12.20.4-canary.559.339cfa7.0",
|
|
38
|
+
"@quenty/pseudolocalize": "3.4.3-canary.559.339cfa7.0",
|
|
39
|
+
"@quenty/rx": "13.17.4-canary.559.339cfa7.0",
|
|
40
|
+
"@quenty/servicebag": "11.11.5-canary.559.339cfa7.0",
|
|
41
|
+
"@quenty/statestack": "14.18.4-canary.559.339cfa7.0",
|
|
42
|
+
"@quenty/string": "3.3.3",
|
|
43
|
+
"@quenty/table": "3.7.5-canary.559.339cfa7.0",
|
|
44
|
+
"@quenty/valuebaseutils": "13.17.4-canary.559.339cfa7.0",
|
|
45
|
+
"@quenty/valueobject": "13.17.4-canary.559.339cfa7.0"
|
|
46
46
|
},
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "339cfa778736f08768ed7305041f6221faa35bfc"
|
|
51
51
|
}
|
|
@@ -47,7 +47,7 @@ function InputKeyMapListUtils.observeActiveInputKeyMap(inputKeyMapList, serviceB
|
|
|
47
47
|
else
|
|
48
48
|
return Rx.of(nil)
|
|
49
49
|
end
|
|
50
|
-
end)
|
|
50
|
+
end),
|
|
51
51
|
})
|
|
52
52
|
end
|
|
53
53
|
|
|
@@ -74,8 +74,8 @@ function InputKeyMapListUtils.observeActiveInputTypesList(inputKeyMapList, servi
|
|
|
74
74
|
else
|
|
75
75
|
return Rx.of(nil)
|
|
76
76
|
end
|
|
77
|
-
end)
|
|
78
|
-
Rx.distinct()
|
|
77
|
+
end),
|
|
78
|
+
Rx.distinct(),
|
|
79
79
|
})
|
|
80
80
|
end
|
|
81
81
|
|
|
@@ -104,4 +104,4 @@ function InputKeyMapListUtils.observeActiveInputModeType(inputKeyMapList, servic
|
|
|
104
104
|
end)
|
|
105
105
|
end
|
|
106
106
|
|
|
107
|
-
return InputKeyMapListUtils
|
|
107
|
+
return InputKeyMapListUtils
|
|
@@ -6,12 +6,12 @@ local require = require(script.Parent.loader).load(script)
|
|
|
6
6
|
|
|
7
7
|
local Maid = require("Maid")
|
|
8
8
|
local PseudoLocalize = require("PseudoLocalize")
|
|
9
|
-
local
|
|
9
|
+
local ServiceBag = require("ServiceBag")
|
|
10
10
|
|
|
11
11
|
local InputKeyMapServiceClient = {}
|
|
12
12
|
InputKeyMapServiceClient.ServiceName = "InputKeyMapServiceClient"
|
|
13
13
|
|
|
14
|
-
function InputKeyMapServiceClient:Init(serviceBag:
|
|
14
|
+
function InputKeyMapServiceClient:Init(serviceBag: ServiceBag.ServiceBag)
|
|
15
15
|
assert(not self._serviceBag, "Already initialized")
|
|
16
16
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
17
17
|
self._maid = Maid.new()
|
|
@@ -48,9 +48,13 @@ function InputKeyMapServiceClient:_ensureLocalizationEntries()
|
|
|
48
48
|
local value = text
|
|
49
49
|
|
|
50
50
|
localizationTable:SetEntryValue(key, source, context, localeId, value)
|
|
51
|
-
localizationTable:SetEntryValue(
|
|
51
|
+
localizationTable:SetEntryValue(
|
|
52
|
+
key,
|
|
53
|
+
source,
|
|
54
|
+
context,
|
|
52
55
|
PseudoLocalize.getDefaultPseudoLocaleId(),
|
|
53
|
-
PseudoLocalize.pseudoLocalize(value)
|
|
56
|
+
PseudoLocalize.pseudoLocalize(value)
|
|
57
|
+
)
|
|
54
58
|
end))
|
|
55
59
|
end
|
|
56
60
|
|
|
@@ -58,4 +62,4 @@ function InputKeyMapServiceClient:Destroy()
|
|
|
58
62
|
self._maid:DoCleaning()
|
|
59
63
|
end
|
|
60
64
|
|
|
61
|
-
return InputKeyMapServiceClient
|
|
65
|
+
return InputKeyMapServiceClient
|
|
@@ -4,12 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
local require = require(script.Parent.loader).load(script)
|
|
6
6
|
|
|
7
|
-
local
|
|
7
|
+
local ServiceBag = require("ServiceBag")
|
|
8
8
|
|
|
9
9
|
local InputKeyMapService = {}
|
|
10
10
|
InputKeyMapService.ServiceName = "InputKeyMapService"
|
|
11
11
|
|
|
12
|
-
function InputKeyMapService:Init(serviceBag:
|
|
12
|
+
function InputKeyMapService:Init(serviceBag: ServiceBag.ServiceBag)
|
|
13
13
|
assert(not self._serviceBag, "Already initialized")
|
|
14
14
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
15
15
|
|
|
@@ -18,4 +18,4 @@ function InputKeyMapService:Init(serviceBag: _ServiceBag.ServiceBag)
|
|
|
18
18
|
self._serviceBag:GetService(require("InputKeyMapTranslator"))
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
return InputKeyMapService
|
|
21
|
+
return InputKeyMapService
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
local require = require(script.Parent.loader).load(script)
|
|
12
12
|
|
|
13
13
|
local BaseObject = require("BaseObject")
|
|
14
|
-
local ValueObject = require("ValueObject")
|
|
15
14
|
local InputModeType = require("InputModeType")
|
|
16
15
|
local InputTypeUtils = require("InputTypeUtils")
|
|
17
|
-
local
|
|
16
|
+
local Observable = require("Observable")
|
|
17
|
+
local ValueObject = require("ValueObject")
|
|
18
18
|
|
|
19
19
|
local InputKeyMap = setmetatable({}, BaseObject)
|
|
20
20
|
InputKeyMap.ClassName = "InputKeyMap"
|
|
@@ -113,7 +113,7 @@ end
|
|
|
113
113
|
|
|
114
114
|
@return Observable<{ InputType }>
|
|
115
115
|
]=]
|
|
116
|
-
function InputKeyMap.ObserveInputTypesList(self: InputKeyMap):
|
|
116
|
+
function InputKeyMap.ObserveInputTypesList(self: InputKeyMap): Observable.Observable<{ InputType }>
|
|
117
117
|
return self._inputTypeList:Observe()
|
|
118
118
|
end
|
|
119
119
|
|
|
@@ -126,4 +126,4 @@ function InputKeyMap.GetInputTypesList(self: InputKeyMap): { InputType }
|
|
|
126
126
|
return self._inputTypeList.Value
|
|
127
127
|
end
|
|
128
128
|
|
|
129
|
-
return InputKeyMap
|
|
129
|
+
return InputKeyMap
|
|
@@ -50,16 +50,15 @@ local InputModeType = require("InputModeType")
|
|
|
50
50
|
local InputModeTypes = require("InputModeTypes")
|
|
51
51
|
local InputTypeUtils = require("InputTypeUtils")
|
|
52
52
|
local Maid = require("Maid")
|
|
53
|
+
local Observable = require("Observable")
|
|
53
54
|
local ObservableCountingMap = require("ObservableCountingMap")
|
|
54
55
|
local ObservableMap = require("ObservableMap")
|
|
55
56
|
local Rx = require("Rx")
|
|
56
57
|
local RxBrioUtils = require("RxBrioUtils")
|
|
58
|
+
local Set = require("Set")
|
|
57
59
|
local SlottedTouchButtonUtils = (require :: any)("SlottedTouchButtonUtils")
|
|
58
60
|
local StateStack = require("StateStack")
|
|
59
61
|
local String = require("String")
|
|
60
|
-
local _Observable = require("Observable")
|
|
61
|
-
local _Brio = require("Brio")
|
|
62
|
-
local _Set = require("Set")
|
|
63
62
|
|
|
64
63
|
local InputKeyMapList = setmetatable({}, BaseObject)
|
|
65
64
|
InputKeyMapList.ClassName = "InputKeyMapList"
|
|
@@ -292,8 +291,8 @@ end
|
|
|
292
291
|
Observes a brio with the first value as the InputModeType and the second value as the KeyMapList
|
|
293
292
|
@return Observable<Brio<InputModeType, InputKeyMap>>
|
|
294
293
|
]=]
|
|
295
|
-
function InputKeyMapList.ObservePairsBrio(self: InputKeyMapList):
|
|
296
|
-
|
|
294
|
+
function InputKeyMapList.ObservePairsBrio(self: InputKeyMapList): Observable.Observable<
|
|
295
|
+
Brio.Brio<InputModeType.InputModeType, InputKeyMap.InputKeyMap>
|
|
297
296
|
>
|
|
298
297
|
return self._inputModeTypeToInputKeyMap:ObservePairsBrio()
|
|
299
298
|
end
|
|
@@ -323,7 +322,7 @@ end
|
|
|
323
322
|
]=]
|
|
324
323
|
function InputKeyMapList.ObserveInputKeyMapsBrio(
|
|
325
324
|
self: InputKeyMapList
|
|
326
|
-
):
|
|
325
|
+
): Observable.Observable<Brio.Brio<InputKeyMap.InputKeyMap>>
|
|
327
326
|
return self._inputModeTypeToInputKeyMap:ObserveValuesBrio()
|
|
328
327
|
end
|
|
329
328
|
|
|
@@ -332,7 +331,7 @@ end
|
|
|
332
331
|
]=]
|
|
333
332
|
function InputKeyMapList.ObserveInputModesTypesBrio(
|
|
334
333
|
self: InputKeyMapList
|
|
335
|
-
):
|
|
334
|
+
): Observable.Observable<Brio.Brio<InputModeType.InputModeType>>
|
|
336
335
|
return self._inputModeTypeToInputKeyMap:ObserveKeysBrio()
|
|
337
336
|
end
|
|
338
337
|
|
|
@@ -345,7 +344,7 @@ end
|
|
|
345
344
|
function InputKeyMapList.ObserveInputKeyMapForInputMode(
|
|
346
345
|
self: InputKeyMapList,
|
|
347
346
|
inputModeType: InputModeType.InputModeType
|
|
348
|
-
):
|
|
347
|
+
): Observable.Observable<InputKeyMap.InputKeyMap?>
|
|
349
348
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
350
349
|
|
|
351
350
|
return self._inputModeTypeToInputKeyMap:ObserveValueForKey(inputModeType)
|
|
@@ -356,7 +355,7 @@ end
|
|
|
356
355
|
|
|
357
356
|
@return Observable<boolean>
|
|
358
357
|
]=]
|
|
359
|
-
function InputKeyMapList.ObserveIsTapInWorld(self: InputKeyMapList):
|
|
358
|
+
function InputKeyMapList.ObserveIsTapInWorld(self: InputKeyMapList): Observable.Observable<boolean>
|
|
360
359
|
self:_ensureInit()
|
|
361
360
|
|
|
362
361
|
return self._isTapInWorld:Observe()
|
|
@@ -402,7 +401,7 @@ end
|
|
|
402
401
|
]=]
|
|
403
402
|
function InputKeyMapList.ObserveInputEnumsList(
|
|
404
403
|
self: InputKeyMapList
|
|
405
|
-
):
|
|
404
|
+
): Observable.Observable<{ InputTypeUtils.InputType }>
|
|
406
405
|
self:_ensureInit()
|
|
407
406
|
|
|
408
407
|
return self._inputTypesForBinding:ObserveKeysList()
|
|
@@ -426,7 +425,7 @@ end
|
|
|
426
425
|
]=]
|
|
427
426
|
function InputKeyMapList.ObserveInputEnumsSet(
|
|
428
427
|
self: InputKeyMapList
|
|
429
|
-
):
|
|
428
|
+
): Observable.Observable<Set.Set<InputTypeUtils.InputType>>
|
|
430
429
|
self:_ensureInit()
|
|
431
430
|
|
|
432
431
|
return self._inputTypesForBinding:ObserveKeysSet()
|
|
@@ -479,35 +478,39 @@ function InputKeyMapList._ensureInit(self: InputKeyMapList)
|
|
|
479
478
|
self._isRobloxTouchButton = self._maid:Add(StateStack.new(false, "boolean"))
|
|
480
479
|
|
|
481
480
|
-- Listen
|
|
482
|
-
self._maid:GiveTask(
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
local inputKeyMap: InputKeyMap.InputKeyMap = brio:GetValue()
|
|
489
|
-
|
|
490
|
-
inputKeyMapMaid:GiveTask(inputKeyMap:ObserveInputTypesList():Subscribe(function(inputTypes)
|
|
491
|
-
local maid = Maid.new()
|
|
492
|
-
|
|
493
|
-
for _, inputType in inputTypes do
|
|
494
|
-
-- only emit enum items
|
|
495
|
-
if typeof(inputType) == "EnumItem" then
|
|
496
|
-
maid:GiveTask(countingMap:Add(inputType :: any))
|
|
497
|
-
elseif InputTypeUtils.isTapInWorld(inputType) then
|
|
498
|
-
maid:GiveTask(self._isTapInWorld:PushState(true))
|
|
499
|
-
elseif InputTypeUtils.isRobloxTouchButton(inputType) then
|
|
500
|
-
maid:GiveTask(self._isRobloxTouchButton:PushState(true))
|
|
501
|
-
elseif InputChordUtils.isModifierInputChord(inputType) then
|
|
502
|
-
maid:GiveTask(countingMap:Add((inputType :: any).keyCode))
|
|
481
|
+
self._maid:GiveTask(
|
|
482
|
+
self._inputModeTypeToInputKeyMap
|
|
483
|
+
:ObserveValuesBrio()
|
|
484
|
+
:Subscribe(function(brio: Brio.Brio<InputKeyMap.InputKeyMap>)
|
|
485
|
+
if brio:IsDead() then
|
|
486
|
+
return
|
|
503
487
|
end
|
|
504
|
-
end
|
|
505
488
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
489
|
+
local inputKeyMapMaid = brio:ToMaid()
|
|
490
|
+
local inputKeyMap: InputKeyMap.InputKeyMap = brio:GetValue()
|
|
491
|
+
|
|
492
|
+
inputKeyMapMaid:GiveTask(inputKeyMap:ObserveInputTypesList():Subscribe(function(inputTypes)
|
|
493
|
+
local maid = Maid.new()
|
|
494
|
+
|
|
495
|
+
for _, inputType in inputTypes do
|
|
496
|
+
-- only emit enum items
|
|
497
|
+
if typeof(inputType) == "EnumItem" then
|
|
498
|
+
maid:GiveTask(countingMap:Add(inputType :: any))
|
|
499
|
+
elseif InputTypeUtils.isTapInWorld(inputType) then
|
|
500
|
+
maid:GiveTask(self._isTapInWorld:PushState(true))
|
|
501
|
+
elseif InputTypeUtils.isRobloxTouchButton(inputType) then
|
|
502
|
+
maid:GiveTask(self._isRobloxTouchButton:PushState(true))
|
|
503
|
+
elseif InputChordUtils.isModifierInputChord(inputType) then
|
|
504
|
+
maid:GiveTask(countingMap:Add((inputType :: any).keyCode))
|
|
505
|
+
end
|
|
506
|
+
end
|
|
507
|
+
|
|
508
|
+
inputKeyMapMaid._current = maid
|
|
509
|
+
end))
|
|
510
|
+
end)
|
|
511
|
+
)
|
|
509
512
|
|
|
510
513
|
return self._inputTypesForBinding
|
|
511
514
|
end
|
|
512
515
|
|
|
513
|
-
return InputKeyMapList
|
|
516
|
+
return InputKeyMapList
|
|
@@ -45,26 +45,26 @@ local require = require(script.Parent.loader).load(script)
|
|
|
45
45
|
|
|
46
46
|
local RunService = game:GetService("RunService")
|
|
47
47
|
|
|
48
|
-
local
|
|
48
|
+
local InputKeyMapList = require("InputKeyMapList")
|
|
49
49
|
local InputKeyMapRegistryServiceShared = require("InputKeyMapRegistryServiceShared")
|
|
50
|
+
local Maid = require("Maid")
|
|
50
51
|
local ObservableList = require("ObservableList")
|
|
51
|
-
local
|
|
52
|
-
local _InputKeyMapList = require("InputKeyMapList")
|
|
52
|
+
local ServiceBag = require("ServiceBag")
|
|
53
53
|
|
|
54
54
|
local InputKeyMapListProvider = {}
|
|
55
55
|
InputKeyMapListProvider.ClassName = "InputKeyMapListProvider"
|
|
56
56
|
InputKeyMapListProvider.ServiceName = "InputKeyMapListProvider"
|
|
57
57
|
InputKeyMapListProvider.__index = InputKeyMapListProvider
|
|
58
58
|
|
|
59
|
-
export type CreateDefaultsCallback = (self: InputKeyMapListProvider, serviceBag:
|
|
59
|
+
export type CreateDefaultsCallback = (self: InputKeyMapListProvider, serviceBag: ServiceBag.ServiceBag) -> ()
|
|
60
60
|
export type InputKeyMapListProvider = typeof(setmetatable(
|
|
61
61
|
{} :: {
|
|
62
|
-
_serviceBag:
|
|
62
|
+
_serviceBag: ServiceBag.ServiceBag,
|
|
63
63
|
_maid: Maid.Maid,
|
|
64
64
|
_providerName: string,
|
|
65
65
|
_createDefaults: CreateDefaultsCallback,
|
|
66
|
-
_inputKeyMapLists: { [string]:
|
|
67
|
-
_inputMapLists: any, -- ObservableList.ObservableList<
|
|
66
|
+
_inputKeyMapLists: { [string]: InputKeyMapList.InputKeyMapList },
|
|
67
|
+
_inputMapLists: any, -- ObservableList.ObservableList<InputKeyMapList.InputKeyMapList>,
|
|
68
68
|
},
|
|
69
69
|
{} :: typeof({ __index = InputKeyMapListProvider })
|
|
70
70
|
))
|
|
@@ -91,7 +91,7 @@ function InputKeyMapListProvider.new(
|
|
|
91
91
|
return self
|
|
92
92
|
end
|
|
93
93
|
|
|
94
|
-
function InputKeyMapListProvider.Init(self: InputKeyMapListProvider, serviceBag:
|
|
94
|
+
function InputKeyMapListProvider.Init(self: InputKeyMapListProvider, serviceBag: ServiceBag.ServiceBag)
|
|
95
95
|
assert(not self._serviceBag, "Already initialized")
|
|
96
96
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
97
97
|
self._maid = Maid.new()
|
|
@@ -124,7 +124,7 @@ end
|
|
|
124
124
|
function InputKeyMapListProvider.GetInputKeyMapList(
|
|
125
125
|
self: InputKeyMapListProvider,
|
|
126
126
|
keyMapListName: string
|
|
127
|
-
):
|
|
127
|
+
): InputKeyMapList.InputKeyMapList
|
|
128
128
|
local keyMapList = self:FindInputKeyMapList(keyMapListName)
|
|
129
129
|
if not keyMapList then
|
|
130
130
|
error(string.format("Bad keyMapListName %q", tostring(keyMapListName)))
|
|
@@ -141,7 +141,7 @@ end
|
|
|
141
141
|
function InputKeyMapListProvider.FindInputKeyMapList(
|
|
142
142
|
self: InputKeyMapListProvider,
|
|
143
143
|
keyMapListName: string
|
|
144
|
-
):
|
|
144
|
+
): InputKeyMapList.InputKeyMapList?
|
|
145
145
|
assert(type(keyMapListName) == "string", "Bad keyMapListName")
|
|
146
146
|
|
|
147
147
|
if RunService:IsRunning() and not self._inputKeyMapLists then
|
|
@@ -195,4 +195,4 @@ function InputKeyMapListProvider.Destroy(self: InputKeyMapListProvider)
|
|
|
195
195
|
self._inputKeyMapLists = {}
|
|
196
196
|
end
|
|
197
197
|
|
|
198
|
-
return InputKeyMapListProvider
|
|
198
|
+
return InputKeyMapListProvider
|
|
@@ -12,14 +12,14 @@ local require = require(script.Parent.loader).load(script)
|
|
|
12
12
|
|
|
13
13
|
local Maid = require("Maid")
|
|
14
14
|
local ObservableList = require("ObservableList")
|
|
15
|
-
local RxBrioUtils = require("RxBrioUtils")
|
|
16
15
|
local Rx = require("Rx")
|
|
17
|
-
local
|
|
16
|
+
local RxBrioUtils = require("RxBrioUtils")
|
|
17
|
+
local ServiceBag = require("ServiceBag")
|
|
18
18
|
|
|
19
19
|
local InputKeyMapRegistryServiceShared = {}
|
|
20
20
|
InputKeyMapRegistryServiceShared.ServiceName = "InputKeyMapRegistryServiceShared"
|
|
21
21
|
|
|
22
|
-
function InputKeyMapRegistryServiceShared:Init(serviceBag:
|
|
22
|
+
function InputKeyMapRegistryServiceShared:Init(serviceBag: ServiceBag.ServiceBag)
|
|
23
23
|
assert(not self._serviceBag, "Already initialized")
|
|
24
24
|
self._serviceBag = assert(serviceBag, "No serviceBag")
|
|
25
25
|
self._maid = Maid.new()
|
|
@@ -135,5 +135,4 @@ function InputKeyMapRegistryServiceShared:Destroy()
|
|
|
135
135
|
self._maid:DoCleaning()
|
|
136
136
|
end
|
|
137
137
|
|
|
138
|
-
|
|
139
|
-
return InputKeyMapRegistryServiceShared
|
|
138
|
+
return InputKeyMapRegistryServiceShared
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
local require = require(script.Parent.loader).load(script)
|
|
9
9
|
|
|
10
|
-
local InputKeyMapList = require("InputKeyMapList")
|
|
11
|
-
local InputModeTypes = require("InputModeTypes")
|
|
12
10
|
local InputKeyMap = require("InputKeyMap")
|
|
11
|
+
local InputKeyMapList = require("InputKeyMapList")
|
|
13
12
|
local InputModeType = require("InputModeType")
|
|
13
|
+
local InputModeTypes = require("InputModeTypes")
|
|
14
|
+
local InputTypeUtils = require("InputTypeUtils")
|
|
14
15
|
local SlottedTouchButtonUtils = require("SlottedTouchButtonUtils")
|
|
15
|
-
local _InputTypeUtils = require("InputTypeUtils")
|
|
16
16
|
|
|
17
17
|
local ProximityPromptInputUtils = {}
|
|
18
18
|
|
|
@@ -67,11 +67,14 @@ end
|
|
|
67
67
|
@param inputModeType InputModeType
|
|
68
68
|
@return KeyCode?
|
|
69
69
|
]=]
|
|
70
|
-
function ProximityPromptInputUtils.getFirstInputKeyCode(
|
|
70
|
+
function ProximityPromptInputUtils.getFirstInputKeyCode(
|
|
71
|
+
inputKeyMapList: InputKeyMapList.InputKeyMapList,
|
|
72
|
+
inputModeType: InputModeType.InputModeType
|
|
73
|
+
): Enum.KeyCode?
|
|
71
74
|
assert(type(inputKeyMapList) == "table", "Bad inputKeyMapList")
|
|
72
75
|
assert(InputModeType.isInputModeType(inputModeType), "Bad inputModeType")
|
|
73
76
|
|
|
74
|
-
local inputTypesForInputMode: {
|
|
77
|
+
local inputTypesForInputMode: { InputTypeUtils.InputType } = inputKeyMapList:GetInputTypesList(inputModeType)
|
|
75
78
|
for _, entry in inputTypesForInputMode do
|
|
76
79
|
if typeof(entry) == "EnumItem" and entry.EnumType == Enum.KeyCode then
|
|
77
80
|
return entry :: any
|
|
@@ -81,4 +84,4 @@ function ProximityPromptInputUtils.getFirstInputKeyCode(inputKeyMapList: InputKe
|
|
|
81
84
|
return nil
|
|
82
85
|
end
|
|
83
86
|
|
|
84
|
-
return ProximityPromptInputUtils
|
|
87
|
+
return ProximityPromptInputUtils
|
|
@@ -38,10 +38,10 @@ function InputChordUtils.createModifierInputChord(modifiers, keyCode)
|
|
|
38
38
|
assert(EnumUtils.isOfType(Enum.KeyCode, keyCode), "Bad keyCode")
|
|
39
39
|
|
|
40
40
|
return {
|
|
41
|
-
type = "ModifierInputChord"
|
|
42
|
-
modifiers = modifiers
|
|
43
|
-
keyCode = keyCode
|
|
41
|
+
type = "ModifierInputChord",
|
|
42
|
+
modifiers = modifiers,
|
|
43
|
+
keyCode = keyCode,
|
|
44
44
|
}
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
return InputChordUtils
|
|
47
|
+
return InputChordUtils
|
|
@@ -5,10 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
local require = require(script.Parent.loader).load(script)
|
|
7
7
|
|
|
8
|
-
local
|
|
9
|
-
local
|
|
10
|
-
local _InputKeyMap = require("InputKeyMap")
|
|
11
|
-
local _InputTypeUtils = require("InputTypeUtils")
|
|
8
|
+
local InputKeyMapList = require("InputKeyMapList")
|
|
9
|
+
local InputModeType = require("InputModeType")
|
|
12
10
|
|
|
13
11
|
local SlottedTouchButtonUtils = {}
|
|
14
12
|
|
|
@@ -21,7 +19,7 @@ local SlottedTouchButtonUtils = {}
|
|
|
21
19
|
]=]
|
|
22
20
|
export type SlottedTouchButtonData = {
|
|
23
21
|
slotId: string,
|
|
24
|
-
inputModeType:
|
|
22
|
+
inputModeType: InputModeType.InputModeType,
|
|
25
23
|
}
|
|
26
24
|
|
|
27
25
|
--[=[
|
|
@@ -32,7 +30,7 @@ export type SlottedTouchButtonData = {
|
|
|
32
30
|
@param slotId string
|
|
33
31
|
@return SlottedTouchButton
|
|
34
32
|
]=]
|
|
35
|
-
function SlottedTouchButtonUtils.createSlottedTouchButton(slotId: string):
|
|
33
|
+
function SlottedTouchButtonUtils.createSlottedTouchButton(slotId: string): any
|
|
36
34
|
assert(
|
|
37
35
|
slotId == "primary1"
|
|
38
36
|
or slotId == "primary2"
|
|
@@ -71,7 +69,7 @@ end
|
|
|
71
69
|
]=]
|
|
72
70
|
function SlottedTouchButtonUtils.createTouchButtonData(
|
|
73
71
|
slotId: string,
|
|
74
|
-
inputModeType:
|
|
72
|
+
inputModeType: InputModeType.InputModeType
|
|
75
73
|
): SlottedTouchButtonData
|
|
76
74
|
return {
|
|
77
75
|
slotId = slotId,
|
|
@@ -85,13 +83,15 @@ end
|
|
|
85
83
|
@param inputKeyMapList InputKeyMapList
|
|
86
84
|
@return { SlottedTouchButtonData }
|
|
87
85
|
]=]
|
|
88
|
-
function SlottedTouchButtonUtils.getSlottedTouchButtonData(
|
|
86
|
+
function SlottedTouchButtonUtils.getSlottedTouchButtonData(
|
|
87
|
+
inputKeyMapList: InputKeyMapList.InputKeyMapList
|
|
88
|
+
): { SlottedTouchButtonData }
|
|
89
89
|
local slottedTouchButtons: { SlottedTouchButtonData } = {}
|
|
90
90
|
|
|
91
91
|
for _, inputKeyMap: any in inputKeyMapList:GetInputKeyMaps() do
|
|
92
92
|
for _, touchButtonData in inputKeyMap:GetInputTypesList() do
|
|
93
93
|
if SlottedTouchButtonUtils.isSlottedTouchButton(touchButtonData) then
|
|
94
|
-
local slottedButtonData
|
|
94
|
+
local slottedButtonData = touchButtonData :: any
|
|
95
95
|
table.insert(
|
|
96
96
|
slottedTouchButtons,
|
|
97
97
|
SlottedTouchButtonUtils.createTouchButtonData(
|
|
@@ -4,28 +4,28 @@
|
|
|
4
4
|
]=]
|
|
5
5
|
local require = require(script.Parent.loader).load(script)
|
|
6
6
|
|
|
7
|
-
local InputModeTypes = require("InputModeTypes")
|
|
8
7
|
local InputKeyMap = require("InputKeyMap")
|
|
9
8
|
local InputKeyMapList = require("InputKeyMapList")
|
|
10
9
|
local InputKeyMapListProvider = require("InputKeyMapListProvider")
|
|
10
|
+
local InputModeTypes = require("InputModeTypes")
|
|
11
11
|
local SlottedTouchButtonUtils = require("SlottedTouchButtonUtils")
|
|
12
12
|
|
|
13
13
|
return InputKeyMapListProvider.new(script.Name, function(self)
|
|
14
14
|
self:Add(InputKeyMapList.new("JUMP", {
|
|
15
|
-
InputKeyMap.new(InputModeTypes.KeyboardAndMouse, { Enum.KeyCode.Q })
|
|
16
|
-
InputKeyMap.new(InputModeTypes.Gamepads, { Enum.KeyCode.ButtonY })
|
|
17
|
-
InputKeyMap.new(InputModeTypes.Touch, { SlottedTouchButtonUtils.createSlottedTouchButton("primary3") })
|
|
15
|
+
InputKeyMap.new(InputModeTypes.KeyboardAndMouse, { Enum.KeyCode.Q }),
|
|
16
|
+
InputKeyMap.new(InputModeTypes.Gamepads, { Enum.KeyCode.ButtonY }),
|
|
17
|
+
InputKeyMap.new(InputModeTypes.Touch, { SlottedTouchButtonUtils.createSlottedTouchButton("primary3") }),
|
|
18
18
|
}, {
|
|
19
|
-
bindingName = "Jump"
|
|
20
|
-
rebindable = true
|
|
19
|
+
bindingName = "Jump",
|
|
20
|
+
rebindable = true,
|
|
21
21
|
}))
|
|
22
22
|
|
|
23
23
|
self:Add(InputKeyMapList.new("HONK", {
|
|
24
|
-
InputKeyMap.new(InputModeTypes.KeyboardAndMouse, { Enum.KeyCode.H })
|
|
25
|
-
InputKeyMap.new(InputModeTypes.Gamepads, { Enum.KeyCode.ButtonL1 })
|
|
26
|
-
InputKeyMap.new(InputModeTypes.Touch, { SlottedTouchButtonUtils.createSlottedTouchButton("primary2") })
|
|
24
|
+
InputKeyMap.new(InputModeTypes.KeyboardAndMouse, { Enum.KeyCode.H }),
|
|
25
|
+
InputKeyMap.new(InputModeTypes.Gamepads, { Enum.KeyCode.ButtonL1 }),
|
|
26
|
+
InputKeyMap.new(InputModeTypes.Touch, { SlottedTouchButtonUtils.createSlottedTouchButton("primary2") }),
|
|
27
27
|
}, {
|
|
28
|
-
bindingName = "Honk"
|
|
29
|
-
rebindable = true
|
|
28
|
+
bindingName = "Honk",
|
|
29
|
+
rebindable = true,
|
|
30
30
|
}))
|
|
31
|
-
end)
|
|
31
|
+
end)
|