local TS = require(
	game:GetService("ReplicatedStorage")
		:WaitForChild("RobloxTS")
		:WaitForChild("Include")
		:WaitForChild("RuntimeLib")
);
local _exports = {};
local _0 = require(TS.getModule("rbx-services", script.Parent));
local UserInputService, RunService, Workspace = _0.UserInputService, _0.RunService, _0.Workspace;
local Camera = Workspace:WaitForChild("Camera");
local InputController;
do
	InputController = {};
	InputController.__index = {
		jumpInput = function(self, event)
			return UserInputService.InputBegan:Connect(function(input)
				if input.KeyCode == Enum.KeyCode.Space or input.KeyCode == Enum.KeyCode.ButtonA then
					event();
				end;
			end);
		end;
		moveInput = function(self, event)
			return RunService.Stepped:Connect(function()
				local moveDirection = Vector3.new();
				if UserInputService:IsKeyDown(Enum.KeyCode.W) then
					moveDirection = (moveDirection + (Camera.CFrame.LookVector));
				end;
				if UserInputService:IsKeyDown(Enum.KeyCode.S) then
					moveDirection = (moveDirection - (Camera.CFrame.LookVector));
				end;
				if UserInputService:IsKeyDown(Enum.KeyCode.D) then
					moveDirection = (moveDirection + (Camera.CFrame.RightVector));
				end;
				if UserInputService:IsKeyDown(Enum.KeyCode.A) then
					moveDirection = (moveDirection - (Camera.CFrame.RightVector));
				end;
				event(moveDirection);
			end);
		end;
		crouchInput = function(self, event)
			return UserInputService.InputBegan:Connect(function(input)
				if input.KeyCode == Enum.KeyCode.LeftShift or input.KeyCode == Enum.KeyCode.ButtonL2 then
					event();
				end;
			end);
		end;
	};
	InputController.new = function(...)
		return InputController.constructor(setmetatable({}, InputController), ...);
	end;
	InputController.constructor = function(self, characterController)
		self.characterController = characterController;
		return self;
	end;
end;
_exports.InputController = InputController;
return _exports;
