add gs
This commit is contained in:
+100
@@ -0,0 +1,100 @@
|
||||
--[[
|
||||
Sets whether or not gamepad buttons should be shown, based on recently
|
||||
received inputs
|
||||
]]
|
||||
local CorePackages = game:GetService("CorePackages")
|
||||
local UserInputService = game:GetService("UserInputService")
|
||||
|
||||
local Roact = require(CorePackages.Roact)
|
||||
local ExternalEventConnection = require(script.Parent.ExternalEventConnection)
|
||||
|
||||
local SetGamepadEnabled = require(script.Parent.Parent.Parent.Actions.SetGamepadEnabled)
|
||||
|
||||
local connectToStore = require(script.Parent.Parent.Parent.connectToStore)
|
||||
|
||||
local gamepadInputs = {
|
||||
[Enum.UserInputType.Gamepad1] = true,
|
||||
[Enum.UserInputType.Gamepad2] = true,
|
||||
[Enum.UserInputType.Gamepad3] = true,
|
||||
[Enum.UserInputType.Gamepad4] = true,
|
||||
}
|
||||
|
||||
local thumbstickInputs = {
|
||||
[Enum.KeyCode.Thumbstick1] = true,
|
||||
[Enum.KeyCode.Thumbstick2] = true,
|
||||
}
|
||||
|
||||
--[[
|
||||
Returns whether or not input changed, and what its new value is
|
||||
|
||||
UserInputService.InputChanged event fires very frequently when moving
|
||||
the mouse or thumbsticks: we try to early-out if nothing changed so that
|
||||
we don't send hundreds of dispatches through the store
|
||||
]]
|
||||
local function didInputChange(isGamepadEnabled, inputObject)
|
||||
local newEnabledStatus = nil
|
||||
|
||||
if gamepadInputs[inputObject.UserInputType] then
|
||||
if thumbstickInputs[inputObject.KeyCode] then
|
||||
local position = inputObject.Position
|
||||
|
||||
if math.abs(position.X) > 0.1 or math.abs(position.Z) > 0.1 or math.abs(position.Y) > 0.1 then
|
||||
newEnabledStatus = true
|
||||
end
|
||||
else
|
||||
newEnabledStatus = true
|
||||
end
|
||||
else
|
||||
newEnabledStatus = false
|
||||
end
|
||||
|
||||
if newEnabledStatus ~= nil and newEnabledStatus ~= isGamepadEnabled then
|
||||
return true, newEnabledStatus
|
||||
end
|
||||
|
||||
return false, isGamepadEnabled
|
||||
end
|
||||
|
||||
local function GamepadInputConnector(props)
|
||||
local gamepadEnabled = props.gamepadEnabled
|
||||
local inputChanged = props.inputChanged
|
||||
|
||||
local dispatchOnChange = function (inputObject)
|
||||
local didChange, newEnabledStatus = didInputChange(gamepadEnabled, inputObject)
|
||||
|
||||
if didChange then
|
||||
inputChanged(newEnabledStatus)
|
||||
end
|
||||
end
|
||||
|
||||
return Roact.createElement(ExternalEventConnection, {
|
||||
event = UserInputService.InputChanged,
|
||||
callback = dispatchOnChange,
|
||||
}, {
|
||||
Roact.createElement(ExternalEventConnection, {
|
||||
event = UserInputService.InputBegan,
|
||||
callback = dispatchOnChange,
|
||||
})
|
||||
})
|
||||
end
|
||||
|
||||
local function mapStateToProps(state)
|
||||
return {
|
||||
gamepadEnabled = state.gamepadEnabled,
|
||||
}
|
||||
end
|
||||
|
||||
local function mapDispatchToProps(dispatch)
|
||||
return {
|
||||
inputChanged = function(newEnabledStatus)
|
||||
dispatch(SetGamepadEnabled(newEnabledStatus))
|
||||
end,
|
||||
}
|
||||
end
|
||||
|
||||
GamepadInputConnector = connectToStore(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps
|
||||
)(GamepadInputConnector)
|
||||
|
||||
return GamepadInputConnector
|
||||
Reference in New Issue
Block a user