local function c()local c=script.Parent.Values.SteerC.Value if _MSteer then local c=math.max(1,(mouse.ViewSizeX*_Tune.Peripherals.MSteerWidth)/200)local T=_Tune.Peripherals.MSteerDZone/100 local m=(mouse.X-mouse.ViewSizeX/2)/c if math.abs(m)<=T then _GSteerT=0 else _GSteerT=(math.max(math.min(math.abs(m)-T,1-T),0)/(1-T))^_Tune.MSteerExp*(m/math.abs(m))end end if c<_GSteerT then if c<0 then c=math.min(_GSteerT,c+_Tune.ReturnSpeed)else c=math.min(_GSteerT,c+_Tune.SteerSpeed)end else if c>0 then c=math.max(_GSteerT,c-_Tune.ReturnSpeed)else c=math.max(_GSteerT,c-_Tune.SteerSpeed)end end local T=1-math.min(car.DriveSeat.Velocity.Magnitude/_Tune.SteerDecay,1-_Tune.MinSteer/100)for m,B in ipairs(car.Wheels:GetChildren())do if B.Name=="\070"then B.Arm.Steer.CFrame=car.Wheels.F.Base.CFrame*CFrame.Angles(0,-math.rad((c*_Tune.SteerInner)*T),0)elseif B.Name=="\070\076"then if c>=0 then B.Arm.Steer.CFrame=car.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad((c*_Tune.SteerOuter)*T),0)else B.Arm.Steer.CFrame=car.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad((c*_Tune.SteerInner)*T),0)end elseif B.Name=="\070\082"then if c>=0 then B.Arm.Steer.CFrame=car.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad((c*_Tune.SteerInner)*T),0)else B.Arm.Steer.CFrame=car.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad((c*_Tune.SteerOuter)*T),0)end end end end


local function Steering()
	local SteerLocal = script.Parent.Values.SteerC.Value
	--Mouse Steer
	if _MSteer then
		local msWidth = math.max(1,mouse.ViewSizeX*_Tune.Peripherals.MSteerWidth/200)
		local mdZone = _Tune.Peripherals.MSteerDZone/100
		local mST = ((mouse.X-mouse.ViewSizeX/2)/msWidth)
		if math.abs(mST)<=mdZone then
			_GSteerT = 0
		else
			_GSteerT = (math.max(math.min((math.abs(mST)-mdZone),(1-mdZone)),0)/(1-mdZone))^_Tune.MSteerExp * (mST / math.abs(mST))
		end
	end

	--Interpolate Steering
	if SteerLocal < _GSteerT then
		if SteerLocal<0 then
			SteerLocal = math.min(_GSteerT,SteerLocal+_Tune.ReturnSpeed)
		else
			SteerLocal = math.min(_GSteerT,SteerLocal+_Tune.SteerSpeed)
		end
	else
		if SteerLocal>0 then
			SteerLocal = math.max(_GSteerT,SteerLocal-_Tune.ReturnSpeed)
		else
			SteerLocal = math.max(_GSteerT,SteerLocal-_Tune.SteerSpeed)
		end
	end

	--Steer Decay Multiplier
	local sDecay = (1-math.min(car.DriveSeat.Velocity.Magnitude/_Tune.SteerDecay,1-(_Tune.MinSteer/100)))

	--Apply Steering
	for _,v in ipairs(car.Wheels:GetChildren()) do
		if v.Name=="F" then
			v.Arm.Steer.CFrame=car.Wheels.F.Base.CFrame*CFrame.Angles(0,-math.rad(SteerLocal*_Tune.SteerInner*sDecay),0)
		elseif v.Name=="FL" then
			if SteerLocal>= 0 then
				v.Arm.Steer.CFrame=car.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad(SteerLocal*_Tune.SteerOuter*sDecay),0)
			else
				v.Arm.Steer.CFrame=car.Wheels.FL.Base.CFrame*CFrame.Angles(0,-math.rad(SteerLocal*_Tune.SteerInner*sDecay),0)
			end
		elseif v.Name=="FR" then
			if SteerLocal>= 0 then
				v.Arm.Steer.CFrame=car.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad(SteerLocal*_Tune.SteerInner*sDecay),0)
			else
				v.Arm.Steer.CFrame=car.Wheels.FR.Base.CFrame*CFrame.Angles(0,-math.rad(SteerLocal*_Tune.SteerOuter*sDecay),0)
			end
		end
	end
end


