Super-Nostalgia-Zone/Player/GoofyMotion.client.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