-- Compiled with roblox-ts v3.0.0 local TS = _G[script] local InputService = TS.import(script, TS.getModule(script, "@rbxts", "services")).UserInputService local Destroyable = TS.import(script, TS.getModule(script, "@rbxts", "destroyable").out).default local BaseAction = TS.import(script, script.Parent, "base-action").BaseAction local AxisAction = TS.import(script, script.Parent, "axis-action").AxisAction local gamepadInputs = TS.import(script, script.Parent, "common").gamepadInputs local InputManager do local super = Destroyable InputManager = setmetatable({}, { __tostring = function() return "InputManager" end, __index = super, }) InputManager.__index = InputManager function InputManager.new(...) local self = setmetatable({}, InputManager) return self:constructor(...) or self end function InputManager:constructor(useAllGamepads) if useAllGamepads == nil then useAllGamepads = false end super.constructor(self) self.useAllGamepads = useAllGamepads self.registeredActions = {} self.janitor:Add(function() for action in self.registeredActions do self:unbind(action) end end) self.janitor:Add(InputService.InputBegan:Connect(function(input, processed) return self:handleInput(input, processed) end)) self.janitor:Add(InputService.InputEnded:Connect(function(input, processed) return self:handleInput(input, processed) end)) self.janitor:Add(InputService.InputChanged:Connect(function(input, processed) return self:handleInput(input, processed, true) end)) end function InputManager:getActionByID(actionID, actionType) local _array = {} local _length = #_array for _v in self.registeredActions do _length += 1 _array[_length] = _v end -- ▼ ReadonlyArray.filter ▼ local _newValue = {} local _callback = function(action) return if actionType ~= nil then TS.instanceof(action, actionType) else true end local _length_1 = 0 for _k, _v in _array do if _callback(_v, _k - 1, _array) == true then _length_1 += 1 _newValue[_length_1] = _v end end -- ▲ ReadonlyArray.filter ▲ -- ▼ ReadonlyArray.find ▼ local _callback_1 = function(action) return action.id == actionID end local _result for _i, _v in _newValue do if _callback_1(_v, _i - 1, _newValue) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ return _result end function InputManager:bind(action) local _registeredActions = self.registeredActions local _action = action _registeredActions[_action] = true return self end function InputManager:unbind(actionSpecifier) if TS.instanceof(actionSpecifier, BaseAction) then local _registeredActions = self.registeredActions local _actionSpecifier = actionSpecifier _registeredActions[_actionSpecifier] = nil return self end local _array = {} local _length = #_array for _v in self.registeredActions do _length += 1 _array[_length] = _v end -- ▼ ReadonlyArray.find ▼ local _callback = function(action) return action.id == actionSpecifier end local _result for _i, _v in _array do if _callback(_v, _i - 1, _array) == true then _result = _v break end end -- ▲ ReadonlyArray.find ▲ local action = _result if action == nil then return self end self.registeredActions[action] = nil return self end function InputManager:handleInput(input, processed, inputChanged) if inputChanged == nil then inputChanged = false end local inputType = input.UserInputType if self:isUsingUnknownGamepad(inputType) then return nil end for action in self.registeredActions do if inputChanged and not (TS.instanceof(action, AxisAction)) then continue end action:handleInput(input, processed) end end function InputManager:isUsingUnknownGamepad(inputType) local _inputType = inputType local _condition = table.find(gamepadInputs, _inputType) ~= nil if _condition then _condition = inputType ~= Enum.UserInputType.Gamepad1 and not self.useAllGamepads end return _condition end end return { InputManager = InputManager, }