function Gamepad.Enable(s)local e=0 local n=0 local T=0 local G=0 local X=LocalPlayer.Move local d=UserInputService.GamepadSupports local t=function(s,e,n)if n.UserInputType~=Enum.UserInputType.Gamepad1 then return end if n.KeyCode~=Enum.KeyCode.Thumbstick1 then return end if hasCancelType and e==Enum.UserInputState.Cancel then MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(0,0,0)return end if n.Position.magnitude>thumbstickDeadzone then MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(n.Position.X,0,-n.Position.Y)MasterControl:AddToPlayerMovement(currentMoveVector)else MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(0,0,0)end end local l=function(s,e,n)if n.UserInputType~=Enum.UserInputType.Gamepad1 then return end if n.KeyCode~=Enum.KeyCode.ButtonA then return end if hasCancelType and e==Enum.UserInputState.Cancel then MasterControl:SetIsJumping(false)return end MasterControl:SetIsJumping(n.UserInputState==Enum.UserInputState.Begin)end local Q=function()if not d(UserInputService,Enum.UserInputType.Gamepad1,Enum.KeyCode.Thumbstick1)then if LocalPlayer and LocalPlayer.Character then MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(T+G,0,e+n)MasterControl:AddToPlayerMovement(currentMoveVector)end end end local g=function(s,n,T)if n==Enum.UserInputState.End then e=-1 elseif n==Enum.UserInputState.Begin or hasCancelType and n==Enum.UserInputState.Cancel then e=0 end Q()end local Y=function(s,e,T)if e==Enum.UserInputState.End then n=1 elseif e==Enum.UserInputState.Begin or hasCancelType and e==Enum.UserInputState.Cancel then n=0 end Q()end local c=function(s,e,n)if e==Enum.UserInputState.End then T=-1 elseif e==Enum.UserInputState.Begin or hasCancelType and e==Enum.UserInputState.Cancel then T=0 end Q()end local a=function(s,e,n)if e==Enum.UserInputState.End then G=1 elseif e==Enum.UserInputState.Begin or hasCancelType and e==Enum.UserInputState.Cancel then G=0 end Q()end ContextActionService:BindAction("\074\117\109\112\066\117\116\116\111\110",l,false,Enum.KeyCode.ButtonA)ContextActionService:BindAction("\077\111\118\101\084\104\117\109\098\115\116\105\099\107",t,false,Enum.KeyCode.Thumbstick1)ContextActionService:BindAction("\102\111\114\119\097\114\100\068\112\097\100",g,false,Enum.KeyCode.DPadUp)ContextActionService:BindAction("\098\097\099\107\119\097\114\100\068\112\097\100",Y,false,Enum.KeyCode.DPadDown)ContextActionService:BindAction("\108\101\102\116\068\112\097\100",c,false,Enum.KeyCode.DPadLeft)ContextActionService:BindAction("\114\105\103\104\116\068\112\097\100",a,false,Enum.KeyCode.DPadRight)ContextActionService:BindActivate(Enum.UserInputType.Gamepad1,Enum.KeyCode.ButtonR2)UserInputService.GamepadDisconnected:connect(function(s)if s~=Enum.UserInputType.Gamepad1 then return end MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(0,0,0)end)UserInputService.GamepadConnected:connect(function(s)if s~=Enum.UserInputType.Gamepad1 then return end MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(0,0,0)end)end function Gamepad.Disable(s)ContextActionService:UnbindAction("\102\111\114\119\097\114\100\068\112\097\100")ContextActionService:UnbindAction("\098\097\099\107\119\097\114\100\068\112\097\100")ContextActionService:UnbindAction("\108\101\102\116\068\112\097\100")ContextActionService:UnbindAction("\114\105\103\104\116\068\112\097\100")ContextActionService:UnbindAction("\077\111\118\101\084\104\117\109\098\115\116\105\099\107")ContextActionService:UnbindAction("\074\117\109\112\066\117\116\116\111\110")ContextActionService:UnbindActivate(Enum.UserInputType.Gamepad1,Enum.KeyCode.ButtonR2)MasterControl:AddToPlayerMovement(-currentMoveVector)currentMoveVector=Vector3.new(0,0,0)end return Gamepad
--[[ Public API ]]
--
function Gamepad:Enable()
	local forwardValue = 0
	local backwardValue = 0
	local leftValue = 0
	local rightValue = 0

	local moveFunc = LocalPlayer.Move
	local gamepadSupports = UserInputService.GamepadSupports

	local controlCharacterGamepad1 = function(actionName, inputState, inputObject)
		if inputObject.UserInputType ~= Enum.UserInputType.Gamepad1 then
			return
		end
		if inputObject.KeyCode ~= Enum.KeyCode.Thumbstick1 then
			return
		end

		if hasCancelType and inputState == Enum.UserInputState.Cancel then
			MasterControl:AddToPlayerMovement(-currentMoveVector)
			currentMoveVector = Vector3.new(0, 0, 0)
			return
		end

		if inputObject.Position.magnitude > thumbstickDeadzone then
			MasterControl:AddToPlayerMovement(-currentMoveVector)
			currentMoveVector = Vector3.new(inputObject.Position.X, 0, -inputObject.Position.Y)
			MasterControl:AddToPlayerMovement(currentMoveVector)
		else
			MasterControl:AddToPlayerMovement(-currentMoveVector)
			currentMoveVector = Vector3.new(0, 0, 0)
		end
	end

	local jumpCharacterGamepad1 = function(actionName, inputState, inputObject)
		if inputObject.UserInputType ~= Enum.UserInputType.Gamepad1 then
			return
		end
		if inputObject.KeyCode ~= Enum.KeyCode.ButtonA then
			return
		end

		if hasCancelType and inputState == Enum.UserInputState.Cancel then
			MasterControl:SetIsJumping(false)
			return
		end

		MasterControl:SetIsJumping(inputObject.UserInputState == Enum.UserInputState.Begin)
	end

	local doDpadMoveUpdate = function()
		if not gamepadSupports(UserInputService, Enum.UserInputType.Gamepad1, Enum.KeyCode.Thumbstick1) then
			if LocalPlayer and LocalPlayer.Character then
				MasterControl:AddToPlayerMovement(-currentMoveVector)
				currentMoveVector = Vector3.new(leftValue + rightValue, 0, forwardValue + backwardValue)
				MasterControl:AddToPlayerMovement(currentMoveVector)
			end
		end
	end

	local moveForwardFunc = function(actionName, inputState, inputObject)
		if inputState == Enum.UserInputState.End then
			forwardValue = -1
		elseif
			inputState == Enum.UserInputState.Begin or (hasCancelType and inputState == Enum.UserInputState.Cancel)
		then
			forwardValue = 0
		end

		doDpadMoveUpdate()
	end

	local moveBackwardFunc = function(actionName, inputState, inputObject)
		if inputState == Enum.UserInputState.End then
			backwardValue = 1
		elseif
			inputState == Enum.UserInputState.Begin or (hasCancelType and inputState == Enum.UserInputState.Cancel)
		then
			backwardValue = 0
		end

		doDpadMoveUpdate()
	end

	local moveLeftFunc = function(actionName, inputState, inputObject)
		if inputState == Enum.UserInputState.End then
			leftValue = -1
		elseif
			inputState == Enum.UserInputState.Begin or (hasCancelType and inputState == Enum.UserInputState.Cancel)
		then
			leftValue = 0
		end

		doDpadMoveUpdate()
	end

	local moveRightFunc = function(actionName, inputState, inputObject)
		if inputState == Enum.UserInputState.End then
			rightValue = 1
		elseif
			inputState == Enum.UserInputState.Begin or (hasCancelType and inputState == Enum.UserInputState.Cancel)
		then
			rightValue = 0
		end

		doDpadMoveUpdate()
	end

	ContextActionService:BindAction("JumpButton", jumpCharacterGamepad1, false, Enum.KeyCode.ButtonA)
	ContextActionService:BindAction("MoveThumbstick", controlCharacterGamepad1, false, Enum.KeyCode.Thumbstick1)

	ContextActionService:BindAction("forwardDpad", moveForwardFunc, false, Enum.KeyCode.DPadUp)
	ContextActionService:BindAction("backwardDpad", moveBackwardFunc, false, Enum.KeyCode.DPadDown)
	ContextActionService:BindAction("leftDpad", moveLeftFunc, false, Enum.KeyCode.DPadLeft)
	ContextActionService:BindAction("rightDpad", moveRightFunc, false, Enum.KeyCode.DPadRight)

	ContextActionService:BindActivate(Enum.UserInputType.Gamepad1, Enum.KeyCode.ButtonR2)

	UserInputService.GamepadDisconnected:connect(function(gamepadEnum)
		if gamepadEnum ~= Enum.UserInputType.Gamepad1 then
			return
		end

		MasterControl:AddToPlayerMovement(-currentMoveVector)
		currentMoveVector = Vector3.new(0, 0, 0)
	end)

	UserInputService.GamepadConnected:connect(function(gamepadEnum)
		if gamepadEnum ~= Enum.UserInputType.Gamepad1 then
			return
		end

		MasterControl:AddToPlayerMovement(-currentMoveVector)
		currentMoveVector = Vector3.new(0, 0, 0)
	end)
end

function Gamepad:Disable()
	ContextActionService:UnbindAction("forwardDpad")
	ContextActionService:UnbindAction("backwardDpad")
	ContextActionService:UnbindAction("leftDpad")
	ContextActionService:UnbindAction("rightDpad")

	ContextActionService:UnbindAction("MoveThumbstick")
	ContextActionService:UnbindAction("JumpButton")
	ContextActionService:UnbindActivate(Enum.UserInputType.Gamepad1, Enum.KeyCode.ButtonR2)

	MasterControl:AddToPlayerMovement(-currentMoveVector)
	currentMoveVector = Vector3.new(0, 0, 0)
end

return Gamepad
