Advertisement
Guest User

Player Script

a guest
Sep 11th, 2022
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.74 KB | Gaming | 0 0
  1. -----------------------------------------------------------------------------
  2. -- Services
  3. -----------------------------------------------------------------------------
  4. local RepStorage = game:GetService("ReplicatedStorage")
  5. local Players = game:GetService("Players")
  6. local RunService = game:GetService("RunService")
  7.  
  8. -----------------------------------------------------------------------------
  9. -- Modules
  10. -----------------------------------------------------------------------------
  11. local Packages = RepStorage.Packages
  12. local Knit = require(Packages.Knit)
  13. local BaseCharacter = require(Knit.Modules.BaseCharacter)
  14. local ControlsClass = require(Knit.Modules.Controls)
  15.  
  16. -----------------------------------------------------------------------------
  17. -- Constants
  18. -----------------------------------------------------------------------------
  19. local ZERO_VECTOR3 = Vector3.new(0,0,0)
  20.  
  21. -----------------------------------------------------------------------------
  22. -- Variables
  23. -----------------------------------------------------------------------------
  24. local localPlayer = Players.LocalPlayer
  25.  
  26. local PlayerClass = setmetatable({},BaseCharacter)
  27. PlayerClass.__index = PlayerClass
  28.  
  29. function PlayerClass.new()
  30.     print("PlayerClass.new()")
  31.     local self = setmetatable(BaseCharacter.new(),PlayerClass)
  32.    
  33.     self.controls = ControlsClass.new(self)
  34.     self.moveFunction = localPlayer.Move
  35.     self.moveVectorIsCameraRelative = true
  36.    
  37.     localPlayer.CharacterAdded:Connect(function(character)
  38.         self:OnCharacterAdded(character)
  39.     end)
  40.  
  41.     localPlayer.CharacterRemoving:Connect(function(character)
  42.         self:OnCharacterRemoving(character)
  43.     end)
  44.  
  45.     if localPlayer.Character then
  46.         self:OnCharacterAdded(localPlayer.Character)
  47.     end
  48.    
  49.     RunService:BindToRenderStep("Update",Enum.RenderPriority.Input.Value, function(dt)
  50.         self:OnRenderStepped(dt)
  51.     end)
  52.  
  53.     return self
  54. end
  55.  
  56. function PlayerClass:IsMoveVectorCameraRelative(): boolean
  57.     return self.moveVectorIsCameraRelative
  58. end
  59.  
  60. function PlayerClass:OnCharacterAdded(character)
  61.     self:SetModel(character)
  62. end
  63.  
  64. function PlayerClass:OnCharacterRemoving(character)
  65.     self:UnsetModel()
  66. end
  67.  
  68. function PlayerClass:UpdateMovement(inputState)
  69.     local input = self.controls:GetActiveController()
  70.  
  71.     if inputState == Enum.UserInputState.Cancel then
  72.         self.moveVector = ZERO_VECTOR3
  73.     else
  74.         self.moveVector = Vector3.new(input.leftValue + input.rightValue, 0, input.forwardValue + input.backwardValue)
  75.     end    
  76. end
  77.  
  78. function PlayerClass:CalculateRawMoveVector(humanoid: Humanoid, cameraRelativeMoveVector: Vector3): Vector3
  79.     local camera = workspace.CurrentCamera
  80.     if not camera then
  81.         return cameraRelativeMoveVector
  82.     end
  83.  
  84.     if humanoid:GetState() == Enum.HumanoidStateType.Swimming then
  85.         return camera.CFrame:VectorToWorldSpace(cameraRelativeMoveVector)
  86.     end
  87.  
  88.     local cameraCFrame = camera.CFrame
  89.  
  90.     local c, s
  91.     local _, _, _, R00, R01, R02, _, _, R12, _, _, R22 = cameraCFrame:GetComponents()
  92.     if R12 < 1 and R12 > -1 then
  93.         -- X and Z components from back vector.
  94.         c = R22
  95.         s = R02
  96.     else
  97.         -- In this case the camera is looking straight up or straight down.
  98.         -- Use X components from right and up vectors.
  99.         c = R00
  100.         s = -R01*math.sign(R12)
  101.     end
  102.     local norm = math.sqrt(c*c + s*s)
  103.     return Vector3.new(
  104.         (c*cameraRelativeMoveVector.X + s*cameraRelativeMoveVector.Z)/norm,
  105.         0,
  106.         (c*cameraRelativeMoveVector.Z - s*cameraRelativeMoveVector.X)/norm
  107.     )
  108. end
  109.  
  110. function PlayerClass:OnRenderStepped()
  111.     if self.humanoid then
  112.         local moveVector = self:GetMoveVector()
  113.         local cameraRelative = self:IsMoveVectorCameraRelative()
  114.  
  115.         if cameraRelative then
  116.             moveVector = self:CalculateRawMoveVector(self.humanoid, moveVector)
  117.         end
  118.         self.moveFunction(localPlayer, moveVector, false)
  119.     end
  120. end
  121.  
  122. return PlayerClass.new()
  123.  
Tags: Roblox luau
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement