local b=false local E=game:GetService("\085\115\101\114\073\110\112\117\116\083\101\114\118\105\099\101")local p=0 local l=0 local m=0 local M=0 local D=0 local z=0 local F=0 local k=0 local i=0 local C=0 local B=0 function DealWithInput(E,U)if b then if E.KeyCode==Enum.KeyCode.ButtonX then if E.UserInputState==Enum.UserInputState.Begin then z=1 elseif E.UserInputState==Enum.UserInputState.End then z=0 end elseif E.KeyCode==Enum.KeyCode.ButtonY then if E.UserInputState==Enum.UserInputState.Begin then F=1 elseif E.UserInputState==Enum.UserInputState.End then F=0 end elseif E.KeyCode==Enum.KeyCode.ButtonL1 then if E.UserInputState==Enum.UserInputState.Begin then k=1 elseif E.UserInputState==Enum.UserInputState.End then k=0 end elseif E.KeyCode==Enum.KeyCode.ButtonR1 then if E.UserInputState==Enum.UserInputState.Begin then i=1 elseif E.UserInputState==Enum.UserInputState.End then i=0 end elseif E.KeyCode==Enum.KeyCode.DPadLeft then if E.UserInputState==Enum.UserInputState.Begin then B=1 elseif E.UserInputState==Enum.UserInputState.End then B=0 end elseif E.KeyCode==Enum.KeyCode.ButtonR3 then if E.UserInputState==Enum.UserInputState.Begin then C=1 elseif E.UserInputState==Enum.UserInputState.End then C=0 end end if E.UserInputType.Name:find("\071\097\109\101\112\097\100")then if E.KeyCode==Enum.KeyCode.Thumbstick1 then p=E.Position.X elseif E.KeyCode==Enum.KeyCode.Thumbstick2 then l=E.Position.X m=E.Position.Y elseif E.KeyCode==Enum.KeyCode.ButtonR2 then M=E.Position.Z elseif E.KeyCode==Enum.KeyCode.ButtonL2 then D=E.Position.Z end end end end E.InputBegan:connect(DealWithInput)E.InputChanged:connect(DealWithInput)E.InputEnded:connect(DealWithInput)car.DriveSeat.ChildRemoved:connect(function(b)if b.Name=="\083\101\097\116\087\101\108\100"then for b,E in pairs(Binded)do run:UnbindFromRenderStep(E)end workspace.CurrentCamera.CameraType=Enum.CameraType.Custom workspace.CurrentCamera.FieldOfView=70 player.CameraMaxZoomDistance=200 end end)local U=.95 run.Stepped:connect(function()V01=(Sus.CurrentLength^2.0+Sus2.CurrentLength^2.0)^.5 local b=(Sus3.CurrentLength-Sus4.CurrentLength)/1.32 local E=(Sus4.CurrentLength-Sus3.CurrentLength)/1.32 V02=b local p=3.0-V01 local l=(p-.1)/1.98 local m=V02 local M=m/3.98 m1.CurrentAngle=m1.CurrentAngle*U+l*(1-U)m2.CurrentAngle=m2.CurrentAngle*U+(-M/3.98)*(1-U)end)function Camera()local b=workspace.CurrentCamera local E=false local p=0 local M=0 local D=0 local z=0 local F=0 local k=0 local function i()if not pcall(function()if k==0 and B==1 then E=not E end k=B if z==1 then if math.abs(l)>.1 then local b=1 if l<0 then b=-1 end if E then p=(b*math.abs((math.abs(l)-.1)/.9))*-80 else p=(b*math.abs((math.abs(l)-.1)/.9))*-90 end else p=0 end if math.abs(m)>.1 then local b=1 if m<0 then b=-1 end if E then D=(b*math.abs((math.abs(m)-.1)/.9))*30 else D=math.min((b*math.abs((math.abs(m)-.1)/.9))*-75,30)end else D=0 end else if p>F then p=math.max(F,p-20)elseif p<F then p=math.min(F,p+20)end D=0 end if E then M=0 else M=-180*C end if E then b.CameraSubject=player.Character.Humanoid b.CameraType=Enum.CameraType.Scriptable b.FieldOfView=70+car.DriveSeat.Velocity.Magnitude/40 player.CameraMaxZoomDistance=5 local E=car.Misc.ActualCam.Parts.Cam.CFrame if C==1 then E=car.Body.RCam.CFrame end b.CoordinateFrame=(E*CFrame.Angles(0,math.rad(p+M),0))*CFrame.Angles(math.rad(D),0,0)else b.CameraSubject=car.DriveSeat b.FieldOfView=70 if z==0 then b.CameraType=Enum.CameraType.Custom player.CameraMaxZoomDistance=400 run:UnbindFromRenderStep("\067\097\109\085\112\100\097\116\101")else b.CameraType="\083\099\114\105\112\116\097\098\108\101"local E=math.min(1,car.DriveSeat.Velocity.Magnitude/500)local l=((car.DriveSeat.Position+Vector3.new(0,8+E*2,0))-(car.DriveSeat.CFrame*CFrame.Angles(math.rad(D),math.rad(p+M),0)).lookVector*17)+(car.DriveSeat.Velocity.Unit*-7)*E b.CoordinateFrame=CFrame.new(l,car.DriveSeat.Position)end end end)then b.FieldOfView=70 b.CameraSubject=player.Character.Humanoid b.CameraType=Enum.CameraType.Custom player.CameraMaxZoomDistance=400 run:UnbindFromRenderStep("\067\097\109\085\112\100\097\116\101")end end local function U()if GMode~=z then z=GMode run:BindToRenderStep("\067\097\109\085\112\100\097\116\101",Enum.RenderPriority.Camera.Value,i)end end mouse.KeyDown:connect(function(b)if b==""then F=50 elseif b==""then if E then F=-160 else F=-180 end elseif b==""then F=-50 elseif b=="\118"then run:UnbindFromRenderStep("\067\097\109\085\112\100\097\116\101")E=not E run:BindToRenderStep("\067\097\109\085\112\100\097\116\101",Enum.RenderPriority.Camera.Value,i)end end)mouse.KeyUp:connect(function(b)if b==""and F==50 then F=0 elseif b==""and(F==-160 or F==-180)then F=0 elseif b==""and F==-50 then F=0 end end)run:BindToRenderStep("\067\077\067\104\097\110\103\101",Enum.RenderPriority.Camera.Value,U)table.insert(Binded,"\067\097\109\085\112\100\097\116\101")table.insert(Binded,"\067\077\067\104\097\110\103\101")end Camera()mouse.KeyDown:connect(function(E)if E==""then if GMode>=1 then GMode=0 else GMode=GMode+1 end if GMode==1 then b=true else b=false end end end)
---Controller
local Controller = false
local UserInputService = game:GetService("UserInputService")
local LStickX = 0
local RStickX = 0
local RStickY = 0
local RTriggerValue = 0
local LTriggerValue = 0

local ButtonX = 0
local ButtonY = 0
local ButtonL1 = 0
local ButtonR1 = 0
local ButtonR3 = 0
local DPadUp = 0
function DealWithInput(input, IsRobloxFunction)
	if Controller then
		if input.KeyCode == Enum.KeyCode.ButtonX then
			if input.UserInputState == Enum.UserInputState.Begin then
				ButtonX = 1
			elseif input.UserInputState == Enum.UserInputState.End then
				ButtonX = 0
			end
		elseif input.KeyCode == Enum.KeyCode.ButtonY then
			if input.UserInputState == Enum.UserInputState.Begin then
				ButtonY = 1
			elseif input.UserInputState == Enum.UserInputState.End then
				ButtonY = 0
			end
		elseif input.KeyCode == Enum.KeyCode.ButtonL1 then
			if input.UserInputState == Enum.UserInputState.Begin then
				ButtonL1 = 1
			elseif input.UserInputState == Enum.UserInputState.End then
				ButtonL1 = 0
			end
		elseif input.KeyCode == Enum.KeyCode.ButtonR1 then
			if input.UserInputState == Enum.UserInputState.Begin then
				ButtonR1 = 1
			elseif input.UserInputState == Enum.UserInputState.End then
				ButtonR1 = 0
			end
		elseif input.KeyCode == Enum.KeyCode.DPadLeft then
			if input.UserInputState == Enum.UserInputState.Begin then
				DPadUp = 1
			elseif input.UserInputState == Enum.UserInputState.End then
				DPadUp = 0
			end
		elseif input.KeyCode == Enum.KeyCode.ButtonR3 then
			if input.UserInputState == Enum.UserInputState.Begin then
				ButtonR3 = 1
			elseif input.UserInputState == Enum.UserInputState.End then
				ButtonR3 = 0
			end
		end
		if input.UserInputType.Name:find("Gamepad") then --it's one of 4 gamepads
			if input.KeyCode == Enum.KeyCode.Thumbstick1 then
				LStickX = input.Position.X
			elseif input.KeyCode == Enum.KeyCode.Thumbstick2 then
				RStickX = input.Position.X
				RStickY = input.Position.Y
			elseif input.KeyCode == Enum.KeyCode.ButtonR2 then --right shoulder
				RTriggerValue = input.Position.Z
			elseif input.KeyCode == Enum.KeyCode.ButtonL2 then --left shoulder
				LTriggerValue = input.Position.Z
			end
		end
	end
end
UserInputService.InputBegan:connect(DealWithInput)
UserInputService.InputChanged:connect(DealWithInput) --keyboards don't activate with Changed, only Begin and Ended. idk if digital controller buttons do too
UserInputService.InputEnded:connect(DealWithInput)

car.DriveSeat.ChildRemoved:connect(function(child)
	if child.Name == "SeatWeld" then
		for i, v in pairs(Binded) do
			run:UnbindFromRenderStep(v)
		end
		workspace.CurrentCamera.CameraType = Enum.CameraType.Custom
		workspace.CurrentCamera.FieldOfView = 70
		player.CameraMaxZoomDistance = 200
	end
end)
local Transition = 0.95
run.Stepped:connect(function()
	V01 = ((Sus.CurrentLength ^ 2.0) + (Sus2.CurrentLength ^ 2.0)) ^ 0.50
	local V1 = (Sus3.CurrentLength - Sus4.CurrentLength) / 1.32
	local V2 = (Sus4.CurrentLength - Sus3.CurrentLength) / 1.32
	V02 = V1
	local V1 = 3.0 - V01
	local V2 = (V1 - 0.1) / 1.98
	local FL = V02
	local FL1 = FL / 3.98
	m1.CurrentAngle = m1.CurrentAngle * Transition + V2 * (1 - Transition)
	m2.CurrentAngle = m2.CurrentAngle * Transition + (-FL1 / 3.98) * (1 - Transition)
end)
function Camera()
	local cam = workspace.CurrentCamera
	local intcam = false
	local CRot = 0
	local CBack = 0
	local CUp = 0
	local mode = 0
	local look = 0
	local camChange = 0
	local function CamUpdate()
		if
			not pcall(function()
				if camChange == 0 and DPadUp == 1 then
					intcam = not intcam
				end
				camChange = DPadUp
				if mode == 1 then
					if math.abs(RStickX) > 0.1 then
						local sPos = 1
						if RStickX < 0 then
							sPos = -1
						end
						if intcam then
							CRot = sPos * math.abs(((math.abs(RStickX) - 0.1) / 0.9)) * -80
						else
							CRot = sPos * math.abs(((math.abs(RStickX) - 0.1) / 0.9)) * -90
						end
					else
						CRot = 0
					end
					if math.abs(RStickY) > 0.1 then
						local sPos = 1
						if RStickY < 0 then
							sPos = -1
						end
						if intcam then
							CUp = sPos * math.abs(((math.abs(RStickY) - 0.1) / 0.9)) * 30
						else
							CUp = math.min(sPos * math.abs(((math.abs(RStickY) - 0.1) / 0.9)) * -75, 30)
						end
					else
						CUp = 0
					end
				else
					if CRot > look then
						CRot = math.max(look, CRot - 20)
					elseif CRot < look then
						CRot = math.min(look, CRot + 20)
					end
					CUp = 0
				end
				if intcam then
					CBack = 0
				else
					CBack = -180 * ButtonR3
				end
				if intcam then
					cam.CameraSubject = player.Character.Humanoid
					cam.CameraType = Enum.CameraType.Scriptable
					cam.FieldOfView = 70 + car.DriveSeat.Velocity.Magnitude / 40
					player.CameraMaxZoomDistance = 5
					local cf = car.Misc.ActualCam.Parts.Cam.CFrame
					if ButtonR3 == 1 then
						cf = car.Body.RCam.CFrame
					end
					cam.CoordinateFrame = cf
						* CFrame.Angles(0, math.rad(CRot + CBack), 0)
						* CFrame.Angles(math.rad(CUp), 0, 0)
				else
					cam.CameraSubject = car.DriveSeat
					cam.FieldOfView = 70
					if mode == 0 then
						cam.CameraType = Enum.CameraType.Custom
						player.CameraMaxZoomDistance = 400
						run:UnbindFromRenderStep("CamUpdate")
					else
						cam.CameraType = "Scriptable"
						local pspeed = math.min(1, car.DriveSeat.Velocity.Magnitude / 500)
						local cc = car.DriveSeat.Position
							+ Vector3.new(0, 8 + (pspeed * 2), 0)
							- ((car.DriveSeat.CFrame * CFrame.Angles(math.rad(CUp), math.rad(CRot + CBack), 0)).lookVector * 17)
							+ (car.DriveSeat.Velocity.Unit * -7 * pspeed)
						cam.CoordinateFrame = CFrame.new(cc, car.DriveSeat.Position)
					end
				end
			end)
		then
			cam.FieldOfView = 70
			cam.CameraSubject = player.Character.Humanoid
			cam.CameraType = Enum.CameraType.Custom
			player.CameraMaxZoomDistance = 400
			run:UnbindFromRenderStep("CamUpdate")
		end
	end
	local function ModeChange()
		if GMode ~= mode then
			mode = GMode
			run:BindToRenderStep("CamUpdate", Enum.RenderPriority.Camera.Value, CamUpdate)
		end
	end
	mouse.KeyDown:connect(function(key)
		if key == "" then
			look = 50
		elseif key == "" then
			if intcam then
				look = -160
			else
				look = -180
			end
		elseif key == "" then
			look = -50
		elseif key == "v" then
			run:UnbindFromRenderStep("CamUpdate")
			intcam = not intcam
			run:BindToRenderStep("CamUpdate", Enum.RenderPriority.Camera.Value, CamUpdate)
		end
	end)
	mouse.KeyUp:connect(function(key)
		if key == "" and look == 50 then
			look = 0
		elseif key == "" and (look == -160 or look == -180) then
			look = 0
		elseif key == "" and look == -50 then
			look = 0
		end
	end)
	run:BindToRenderStep("CMChange", Enum.RenderPriority.Camera.Value, ModeChange)
	table.insert(Binded, "CamUpdate")
	table.insert(Binded, "CMChange")
end
Camera()

mouse.KeyDown:connect(function(key)
	if key == "" then
		if GMode >= 1 then
			GMode = 0
		else
			GMode = GMode + 1
		end
		if GMode == 1 then
			Controller = true
		else
			Controller = false
		end
	end
end)
