72 lines
1.7 KiB
Lua
72 lines
1.7 KiB
Lua
local RunService = game:GetService("RunService")
|
|
local GameSettings = UserSettings():GetService("UserGameSettings")
|
|
|
|
local char = script.Parent
|
|
local humanoid = char:WaitForChild("Humanoid")
|
|
local climbing = char:WaitForChild("Climbing")
|
|
local rootPart = humanoid.RootPart
|
|
|
|
local c = workspace.CurrentCamera
|
|
local blankV3 = Vector3.new()
|
|
local xz = Vector3.new(1,0,1)
|
|
local bg = rootPart:FindFirstChild("FirstPersonGyro")
|
|
|
|
local runState = Enum.HumanoidStateType.Running
|
|
|
|
if not bg then
|
|
bg = Instance.new("BodyGyro")
|
|
bg.Name = "FirstPersonGyro"
|
|
bg.MaxTorque = Vector3.new(0,10e6,0)
|
|
bg.D = 100
|
|
end
|
|
|
|
local function toRotation(dir)
|
|
return CFrame.new(blankV3,dir)
|
|
end
|
|
|
|
local velocityThreshold = 200
|
|
spawn(function ()
|
|
local threshold = char:WaitForChild("VelocityThreshold",5)
|
|
if threshold then
|
|
velocityThreshold = threshold.Value
|
|
end
|
|
end)
|
|
|
|
local function update()
|
|
local zoom = (c.Focus.Position - c.CFrame.Position).Magnitude
|
|
local rotationType = GameSettings.RotationType
|
|
local seatPart = humanoid.SeatPart
|
|
|
|
if rotationType.Name == "CameraRelative" and not seatPart then
|
|
local dir
|
|
|
|
if zoom <= 1.5 then
|
|
dir = c.CFrame.lookVector
|
|
else
|
|
bg.Parent = nil
|
|
end
|
|
|
|
if dir then
|
|
bg.CFrame = toRotation(dir * xz)
|
|
bg.Parent = rootPart
|
|
end
|
|
|
|
humanoid.AutoRotate = false
|
|
else
|
|
local state = humanoid:GetState()
|
|
local isRunning = (state == runState)
|
|
local isClimbing = climbing.Value
|
|
humanoid.AutoRotate = (isRunning or isClimbing)
|
|
bg.Parent = nil
|
|
end
|
|
|
|
if rootPart.Velocity.Magnitude > velocityThreshold and not seatPart then
|
|
humanoid:ChangeState("FallingDown")
|
|
end
|
|
end
|
|
|
|
humanoid.AutoRotate = false
|
|
humanoid:SetStateEnabled("Climbing",false)
|
|
RunService:BindToRenderStep("GoofyMotion", 400, update)
|
|
|
|
c.FieldOfView = 65 |