Advertisement
LastTalon

PlayerControl

Sep 5th, 2015
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.66 KB | None | 0 0
  1. local Players = game:GetService("Players")
  2. local RunService = game:GetService("RunService")
  3. local UserInputService = game:GetService("UserInputService")
  4. local ContextActionService = game:GetService("ContextActionService")
  5.  
  6. local camera = nil
  7. local cameraUpdateConn = nil
  8. local controlUpdateConn = nil
  9. local inputConn = nil
  10.  
  11. local leftValue = 0
  12. local rightValue = 0
  13. local forwardValue = 0
  14. local backwardValue = 0
  15.  
  16. local function updateCamera()
  17.     if camera.CameraType == Enum.CameraType.Scriptable then
  18.         local subject = camera.CameraSubject
  19.         if subject then
  20.             if subject:IsA("Humanoid") then
  21.                 local root = subject.Torso
  22.                 if root and root:IsA("BasePart") then
  23.                     camera.Focus = CFrame.new(root.CFrame.p)
  24.                     camera.CoordinateFrame = CFrame.new(camera.Focus.p + Vector3.new(0, 30, -5), camera.Focus.p)
  25.                 end
  26.             end
  27.         end
  28.     end
  29. end
  30.  
  31. local function updateControl()
  32.     local player = Players.LocalPlayer
  33.     if player and player.Character then
  34.         player:Move(Vector3.new(leftValue - rightValue, 0, forwardValue - backwardValue))
  35.     end
  36. end
  37.  
  38. local function moveLeft(action, inputState, inputObject)
  39.     if inputState == Enum.UserInputState.Begin then
  40.         leftValue = 1
  41.     elseif inputState == Enum.UserInputState.End then
  42.         leftValue = 0
  43.     end
  44. end
  45.  
  46. local function moveRight(action, inputState, inputObject)
  47.     if inputState == Enum.UserInputState.Begin then
  48.         rightValue = 1
  49.     elseif inputState == Enum.UserInputState.End then
  50.         rightValue = 0
  51.     end
  52. end
  53.  
  54. local function moveForward(action, inputState, inputObject)
  55.     if inputState == Enum.UserInputState.Begin then
  56.         forwardValue = 1
  57.     elseif inputState == Enum.UserInputState.End then
  58.         forwardValue = 0
  59.     end
  60. end
  61.  
  62. local function moveBackward(action, inputState, inputObject)
  63.     if inputState == Enum.UserInputState.Begin then
  64.         backwardValue = 1
  65.     elseif inputState == Enum.UserInputState.End then
  66.         backwardValue = 0
  67.     end
  68. end
  69.  
  70. local function bindCameraUpdate()
  71.     RunService:BindToRenderStep("cameraStep", Enum.RenderPriority.Camera.Value, updateCamera)
  72. end
  73.  
  74. local function bindControlUpdate()
  75.     RunService:BindToRenderStep("controlStep", Enum.RenderPriority.Input.Value, updateControl)
  76. end
  77.  
  78. local function onPlayerAdded()
  79.     local bound = pcall(bindCameraUpdate)
  80.     if not bound then
  81.         if cameraUpdateConn then
  82.             cameraUpdateConn:disconnect()
  83.         end
  84.         cameraUpdateConn = RunService.RenderStepped:connect(updateCamera)
  85.     end
  86.    
  87.     camera = workspace.CurrentCamera
  88.     camera.CameraType = Enum.CameraType.Scriptable.Value
  89. end
  90.  
  91. local function onInputEnabled()
  92.     if not UserInputService.KeyboardEnabled or not UserInputService.MouseEnabled then
  93.         -- TODO: Notify that mouse and keyboard are required.
  94.         if not inputConn then
  95.             inputConn = UserInputService.Changed:connect(onInputEnabled)
  96.         end
  97.     else
  98.         if inputConn then inputConn:disconnect() end
  99.         -- TODO: Remove notification.
  100.        
  101.         local bound = pcall(bindControlUpdate)
  102.         if not bound then
  103.             if controlUpdateConn then
  104.                 controlUpdateConn:disconnect()
  105.             end
  106.             controlUpdateConn = RunService.RenderStepped:connect(updateControl)
  107.         end
  108.        
  109.         ContextActionService:BindActionToInputTypes("forwardMovement", moveForward, false, Enum.PlayerActions.CharacterForward)
  110.         ContextActionService:BindActionToInputTypes("backwardMovement", moveBackward, false, Enum.PlayerActions.CharacterBackward)
  111.         ContextActionService:BindActionToInputTypes("leftMovement", moveLeft, false, Enum.PlayerActions.CharacterLeft)
  112.         ContextActionService:BindActionToInputTypes("rightMovement", moveRight, false, Enum.PlayerActions.CharacterRight)
  113.     end
  114. end
  115.  
  116. while Players.LocalPlayer == nil do wait() end
  117. onPlayerAdded()
  118.  
  119. while not UserInputService.KeyboardEnabled and not UserInputService.TouchEnabled and not UserInputService.GamepadEnabled and not UserInputService.MouseEnabled do wait() end
  120. onInputEnabled()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement