local t=false local l=game:GetService("\085\115\101\114\073\110\112\117\116\083\101\114\118\105\099\101")local q=0 local N=0 local o=0 local g=0 local S=0 local w=0 local G=0 local B=0 local H=0 local E=0 local u=0 function DealWithInput(l,v)if t then if l.KeyCode==Enum.KeyCode.ButtonX then if l.UserInputState==Enum.UserInputState.Begin then w=1 elseif l.UserInputState==Enum.UserInputState.End then w=0 end elseif l.KeyCode==Enum.KeyCode.ButtonY then if l.UserInputState==Enum.UserInputState.Begin then G=1 elseif l.UserInputState==Enum.UserInputState.End then G=0 end elseif l.KeyCode==Enum.KeyCode.ButtonL1 then if l.UserInputState==Enum.UserInputState.Begin then B=1 elseif l.UserInputState==Enum.UserInputState.End then B=0 end elseif l.KeyCode==Enum.KeyCode.ButtonR1 then if l.UserInputState==Enum.UserInputState.Begin then H=1 elseif l.UserInputState==Enum.UserInputState.End then H=0 end elseif l.KeyCode==Enum.KeyCode.DPadLeft then if l.UserInputState==Enum.UserInputState.Begin then u=1 elseif l.UserInputState==Enum.UserInputState.End then u=0 end elseif l.KeyCode==Enum.KeyCode.ButtonR3 then if l.UserInputState==Enum.UserInputState.Begin then E=1 elseif l.UserInputState==Enum.UserInputState.End then E=0 end end if l.UserInputType.Name:find("\071\097\109\101\112\097\100")then if l.KeyCode==Enum.KeyCode.Thumbstick1 then q=l.Position.X elseif l.KeyCode==Enum.KeyCode.Thumbstick2 then N=l.Position.X o=l.Position.Y elseif l.KeyCode==Enum.KeyCode.ButtonR2 then g=l.Position.Z elseif l.KeyCode==Enum.KeyCode.ButtonL2 then S=l.Position.Z end end end end l.InputBegan:connect(DealWithInput)l.InputChanged:connect(DealWithInput)l.InputEnded:connect(DealWithInput)car.DriveSeat.ChildRemoved:connect(function(t)if t.Name=="\083\101\097\116\087\101\108\100"then for t,l in pairs(Binded)do run:UnbindFromRenderStep(l)end workspace.CurrentCamera.CameraType=Enum.CameraType.Custom workspace.CurrentCamera.FieldOfView=70 player.CameraMaxZoomDistance=400 getC(car.Misc.Anims,0)getC(player.Character,0)end end)function Camera()local t=workspace.CurrentCamera local l=false local q=0 local g=0 local S=0 local w=0 local G=0 local B=0 local function H()if not pcall(function()if B==0 and u==1 then l=not l end B=u if w==1 then if math.abs(N)>.1 then local t=1 if N<0 then t=-1 end if l then q=(t*math.abs((math.abs(N)-.1)/.9))*-80 else q=(t*math.abs((math.abs(N)-.1)/.9))*-90 end else q=0 end if math.abs(o)>.1 then local t=1 if o<0 then t=-1 end if l then S=(t*math.abs((math.abs(o)-.1)/.9))*30 else S=math.min((t*math.abs((math.abs(o)-.1)/.9))*-75,30)end else S=0 end else if q>G then q=math.max(G,q-20)elseif q<G then q=math.min(G,q+20)end S=0 end if l then g=0 else g=-180*E end if l then getC(car.Misc.Anims,1)getC(player.Character,1)t.CameraSubject=player.Character.Humanoid t.CameraType=Enum.CameraType.Scriptable t.FieldOfView=80 player.CameraMaxZoomDistance=0 local l=car.Body.Cam.CFrame if E==1 then l=car.Body.RCam.CFrame end if apexlook then G=car.Body.bal.Orientation.Z/3 end t.CoordinateFrame=(l*CFrame.Angles(0,math.rad(q+g),0))*CFrame.Angles(math.rad(S),0,math.rad(-car.Body.bal.Orientation.Z))else getC(car.Misc.Anims,0)getC(player.Character,0)t.CameraSubject=car.DriveSeat t.FieldOfView=70 if w==0 then t.CameraType=Enum.CameraType.Custom player.CameraMaxZoomDistance=400 run:UnbindFromRenderStep("\067\097\109\085\112\100\097\116\101")else t.CameraType="\083\099\114\105\112\116\097\098\108\101"local l=math.min(1,car.DriveSeat.Velocity.Magnitude/500)local N=((car.DriveSeat.Position+Vector3.new(0,8+l*2,0))-(car.DriveSeat.CFrame*CFrame.Angles(math.rad(S),math.rad(q+g),0)).lookVector*17)+(car.DriveSeat.Velocity.Unit*-7)*l t.CoordinateFrame=CFrame.new(N,car.DriveSeat.Position)end end end)then t.FieldOfView=70 t.CameraSubject=player.Character.Humanoid t.CameraType=Enum.CameraType.Custom player.CameraMaxZoomDistance=400 run:UnbindFromRenderStep("\067\097\109\085\112\100\097\116\101")end end local function v()if GMode~=w then w=GMode run:BindToRenderStep("\067\097\109\085\112\100\097\116\101",Enum.RenderPriority.Camera.Value,H)end end mouse.KeyDown:connect(function(t)if t=="\118"then run:UnbindFromRenderStep("\067\097\109\085\112\100\097\116\101")l=not l run:BindToRenderStep("\067\097\109\085\112\100\097\116\101",Enum.RenderPriority.Camera.Value,H)end end)run:BindToRenderStep("\067\077\067\104\097\110\103\101",Enum.RenderPriority.Camera.Value,v)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(l)if l=="\098"then if GMode>=1 then GMode=0 else GMode=GMode+1 end if GMode==1 then t=true else t=false end end end)

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=400
		getC(car.Misc.Anims,0)
		getC(player.Character,0)
	end
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)>.1 then
					local sPos=1
					if RStickX<0 then sPos=-1 end
					if intcam then
						CRot=sPos*math.abs(((math.abs(RStickX)-.1)/(.9)))*-80
					else
						CRot=sPos*math.abs(((math.abs(RStickX)-.1)/(.9)))*-90
					end
				else
					CRot=0
				end
				if math.abs(RStickY)>.1 then
					local sPos=1
					if RStickY<0 then sPos=-1 end
					if intcam then
						CUp=sPos*math.abs(((math.abs(RStickY)-.1)/(.9)))*30
					else
						CUp=math.min(sPos*math.abs(((math.abs(RStickY)-.1)/(.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
				getC(car.Misc.Anims,1)
				getC(player.Character,1)
				cam.CameraSubject=player.Character.Humanoid
				cam.CameraType=Enum.CameraType.Scriptable
				cam.FieldOfView=80
				player.CameraMaxZoomDistance=0
				local cf=car.Body.Cam.CFrame
				if ButtonR3==1 then
					cf=car.Body.RCam.CFrame
				end
				if apexlook then
					look = car.Body.bal.Orientation.Z/3
				end
				cam.CoordinateFrame=cf*CFrame.Angles(0,math.rad(CRot+CBack),0)*CFrame.Angles(math.rad(CUp),0,math.rad(-car.Body.bal.Orientation.Z))
			else
				getC(car.Misc.Anims,0)
				getC(player.Character,0)
				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=="v" then
			run:UnbindFromRenderStep("CamUpdate")
			intcam=not intcam
			run:BindToRenderStep("CamUpdate",Enum.RenderPriority.Camera.Value,CamUpdate)
		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=="b" then
		if GMode>=1 then
			GMode=0
		else
			GMode=GMode+1
		end
		if GMode==1 then
			Controller=true
		else
			Controller=false
		end
	end
end)
