Roblox/luau_corpus huggingface dataset:
-- Put your code down here and don't delete this entire text.

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Network = require(ReplicatedStorage.GameModules.GameMechanicsCore["Network"])
local Mouse = game.Players.LocalPlayer:GetMouse()

ReplicatedStorage.Events.GetPlayerMouse.OnClientInvoke = function()
	return workspace:Raycast(Mouse.Origin.Position, Mouse.UnitRay.Direction)
end

ReplicatedStorage.Events.GetValue.OnClientInvoke = function(Directory, PropName)
	return Directory[PropName]
end
--Weighting of Sounds
function AudioUtils.PickWeightedRandomSound(instance: Instance)
	local children = instance:GetChildren()
	local total = 0
	for _, sound in pairs(children) do
		total += sound:GetAttribute("Weight") or 1
	end
	-- total is now the sum of all weights
	--print(total)

	local choice = rng:NextNumber(0, total)
	-- choice is some number between 0 and total; sounds with larger weights take up more space in that range
	local threshold = 0
	for _, sound in pairs(children) do
		threshold += sound:GetAttribute("Weight") or 1
		if choice < threshold then
			return sound -- return the sound whose weight range contains the choice
		end
	end
	-- we should never end up here, but just in-case, we'll fallback to regular randomness
	return children[rng:NextInteger(1, #children)] 
end

function AudioUtils.PlayOneShot(obj, folder, part)
	local attachment = Instance.new("Attachment", part)
	---"This adorn adds a part for debugging purposes"--
	---local adorn = Instance.new("SphereHandleAdornment", attachment)
	---adorn.Adornee = part
	---adorn.Radius = 20
	local halfSize = part.Size / 2
	local x = rng:NextNumber(-halfSize.X, halfSize.X)
	local y = rng:NextNumber(-halfSize.Y, halfSize.Y)
	local z = rng:NextNumber(-halfSize.Z, halfSize.Z)
	attachment.Position = Vector3.new(x, y, z)
	---adorn.CFrame = attachment.CFrame

	local clone = AudioUtils.PickWeightedRandomSound(folder):Clone()
	clone.Parent = attachment
	--print(tagName .. ": cloned sound ")

	local playbackRange = obj:GetAttribute("PlaybackSpeed")
	local volumeRange = obj:GetAttribute("Volume")
	clone.PlaybackSpeed = rng:NextNumber(playbackRange.Min, playbackRange.Max)
	clone.Volume = rng:NextNumber(volumeRange.Min, volumeRange.Max)
	clone.Ended:Connect(function()
		--print(tagName .. ": destorying attachment")
		attachment:Destroy() 
	end)

	clone:Play()
end

return AudioUtils
-- ANimation
local Sound = script:WaitForChild("Haoshoku Sound")

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.X and Debounce == 1 and Tool.Equip.Value == true and Tool.Active.Value == "None" then
		Debounce = 2
		Track1 = plr.Character.Humanoid:LoadAnimation(script.AnimationCharge)
		Track1:Play()
		script.RemoteEventS:FireServer()
		for i = 1,math.huge do
			if Debounce == 2 then
				plr.Character.HumanoidRootPart.CFrame = CFrame.new(plr.Character.HumanoidRootPart.Position, Mouse.Hit.p)
				plr.Character.HumanoidRootPart.Anchored = true
			else
				
				break
				end
	     wait()
	  end
	end
end)

UIS.InputEnded:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.X and Debounce == 2 and Tool.Equip.Value == true and Tool.Active.Value == "None" then
		Debounce = 3
		local Track2 = plr.Character.Humanoid:LoadAnimation(script.AnimationRelease)
		Track2:Play()
		Track1:Stop()
		Sound:Play()
		local mousepos = Mouse.Hit
		script.RemoteEvent:FireServer(mousepos,Mouse.Hit.p)
		wait(0.5)
		Track2:Stop()
		plr.Character.HumanoidRootPart.Anchored = false
		local hum =  plr.Character.Humanoid
		for i = 1,35 do
			wait()
			hum.CameraOffset = Vector3.new(math.random(-0.5,0.5),math.random(-0.5,0.5),math.random(-0.5,0.5))
		end
		hum.CameraOffset = Vector3.new(0,0,0)
		Tool.Active.Value = "None"
		wait(3)
		Debounce = 1
	end
end)
---------------
--| Utility |--
---------------

local math_min = math.min
local math_max = math.max
local math_cos = math.cos
local math_sin = math.sin
local math_pi = math.pi

local Vector3_new = Vector3.new

local function AssertTypes(param, ...)
	local allowedTypes = {}
	local typeString = ''
	for _, typeName in pairs({...}) do
		allowedTypes[typeName] = true
		typeString = typeString .. (typeString == '' and '' or ' or ') .. typeName
	end
	local theType = type(param)
	assert(allowedTypes[theType], typeString .. " type expected, got: " .. theType)
end
--[[**
	Schedules a function to be executed after DelayTime seconds have passed, without yielding the current thread. This function allows multiple Lua threads to be executed in parallel from the same stack. Unlike regular delay, this does not use the legacy scheduler and also allows passing arguments.

	@param [t:numberMin<0>] DelayTime The amount of time before the function will be executed.
	@param [t:callback] Function The function you are executing.
	@param [variant] ... The optional arguments you can pass that the function will execute with.
	@returns [void]
**--]]
function Scheduler.Delay(DelayTime, Function, ...)
	assert(DelayTuple(DelayTime, Function))
	local Length = select("#", ...)
	if Length > 0 then
		local Arguments = {...}
		local ExecuteTime = tick() + DelayTime
		local Connection

		Connection = Heartbeat:Connect(function()
			if tick() >= ExecuteTime then
				Connection:Disconnect()
				Function(table.unpack(Arguments, 1, Length))
			end
		end)

		return Connection
	else
		local ExecuteTime = tick() + DelayTime
		local Connection

		Connection = Heartbeat:Connect(function()
			if tick() >= ExecuteTime then
				Connection:Disconnect()
				Function()
			end
		end)

		return Connection
	end
end
--	====================
--	BASIC
--	A basic settings for the gun
--	====================

		Auto = true;
		MuzzleOffset = Vector3.new(0, 0.625, 1.25);
		BaseDamage = 40;
		FireRate = 0.08; --In second
		ReloadTime = 2; --In second
		AmmoPerClip = 30; --Put "math.huge" to make this gun has infinite ammo and never reload
		Spread = 1.25; --In degree
		HeadshotEnabled = true; --Enable the gun to do extra damage on headshot
		HeadshotDamageMultiplier = 1.5;
		MouseIconID = "316279304";
		HitSoundIDs = {186809061,186809249,186809250,186809252};
		IdleAnimationID = 94331086; --Set to "nil" if you don't want to animate
		IdleAnimationSpeed = 1;
		FireAnimationID = 94332152; --Set to "nil" if you don't want to animate
		FireAnimationSpeed = 6;
		ReloadAnimationID = nil; --Set to "nil" if you don't want to animate
		ReloadAnimationSpeed = 1;
--== Helper functions ==--
function StartCar()
	wait(delayToStartEngine)
	script.Parent.IsOn.Value = true
	wait(delayToStopStartupSound)
end

function StopCar()
	script.Parent.IsOn.Value = false
end
--[[
	Races a set of Promises and returns the first one that resolves,
	cancelling the others.
]]
function Promise.race(promises)
	assert(type(promises) == "table", "Please pass a list of promises to Promise.race")

	for i, promise in ipairs(promises) do
		assert(Promise.is(promise), ("Non-promise value passed into Promise.race at index #%d"):format(i))
	end

	return Promise.new(function(resolve, reject, onCancel)
		local function finalize(callback)
			return function (...)
				for _, promise in ipairs(promises) do
					promise:cancel()
				end

				return callback(...)
			end
		end

		onCancel(finalize(reject))

		for _, promise in ipairs(promises) do
			promise:andThen(finalize(resolve), finalize(reject))
		end
	end)
end
------------------------------------------------------------------------------------------
-- менятель размера Canvas от содержимого
-- смена размера
local function UpdateSize()
	wait()--Ui list layouts can sometimes take time to update 
	local cS = ui.AbsoluteContentSize --X = x pixels, Y = Y pixels
	sf.CanvasSize = UDim2.new(0,cS.X,0,cS.Y) --Change that UDim into a UDim2
end
--this returns a region3 that lines up on top of the baseplate to capture
--whatever room has been constructed on top of it, it is smart enough
--to capture a room that has been less-than-ideally set up
function RoomPackager:RegionsFromBasePlate(basePlate)
	local topCorners = self:TopCornersOfBasePlate(basePlate)
	
	--we farm the min and max x's and z's from the top corners
	--to get x and z coordinates for the region3 that will contain the room
	--we choose an arbitrary corner so that the initial values are in the data set
	local arbitraryCorner = topCorners[1]
	local minX = arbitraryCorner.X
	local minZ = arbitraryCorner.Z
	local maxX = arbitraryCorner.X
	local maxZ = arbitraryCorner.Z
	for _, corner in pairs(topCorners) do
		minX = math.min(minX, corner.X)
		minZ = math.min(minZ, corner.Z)
		maxX = math.max(maxX, corner.X)
		maxZ = math.max(maxZ, corner.Z)
	end
	
	--construct the region using these new corners we have constructed
	--keeping in mind that all corners in topCorners *should* have the same y value
	local minY = topCorners[1].Y
	local lowerCorner = Vector3.new(minX, minY, minZ)
	local maxY = minY + 70
	local upperCorner = Vector3.new(maxX, maxY, maxZ)
	
	local segmentHeight = math.floor(100000/(math.abs(maxX-minX)*math.abs(maxZ-minZ))) 
	
	local regions = {}	
	
	local currentHeight = minY	
	while currentHeight - minY < 70 do
		currentHeight = currentHeight + segmentHeight
		lowerCorner = Vector3.new(lowerCorner.x, currentHeight - segmentHeight, lowerCorner.z)
		upperCorner = Vector3.new(upperCorner.x, currentHeight, upperCorner.z)
		table.insert(regions, Region3.new(lowerCorner, upperCorner))
	end
	
	return regions
end
--for halloween candy
local yum = script:WaitForChild("Yum")
yum.Parent = script.Parent

debounce = false
function touched(hit)
	if not debounce and hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then
		local player = game.Players:GetPlayerFromCharacter(hit.Parent)
		if player then
			debounce = true
			if player.Character:FindFirstChild("Bucket") then
				local bucket = player.Character.Bucket
				delay(.2,function()
					player.Character.Humanoid:EquipTool(bucket)
				end)
			end

			script.Parent.Parent.Parent = player.Backpack
			
			
			wait(2)
			debounce = false
		end
	end
end
script.Parent.Touched:connect(touched)


function Activated()
	yum:Play()
	wait(.1)
	script.Parent.Parent:Destroy()
end
script.Parent.Parent.Activated:connect(Activated)
--[[Wheel Alignment]]
	--[Don't physically apply alignment to wheels]
	--[Values are in degrees]
	Tune.FCamber		= -9
	Tune.RCamber		= -3
	Tune.FCaster		= 0
	Tune.FToe			= 0
	Tune.RToe			= 0
-- @outline // RUNNERS
function Controller.ClientUpdate(dt : number)
	if not Controller.Enabled then return end
	
	--Controller:Update(dt)
end

return Controller
-- deviation: this lets us have the same functionality as in React, without
-- having something like Babel to inject a different implementation of
-- console.warn and console.error into the code
-- Instead of using `LuauPolyfill.console`, React internals should use this
-- wrapper to be able to use consoleWithStackDev in dev mode
local Shared = script.Parent
local Packages = Shared.Parent
local LuauPolyfill = require(Packages.LuauPolyfill)
local console = LuauPolyfill.console
local consoleWithStackDev = require(Shared.consoleWithStackDev)

if _G.__DEV__ then
	local newConsole = setmetatable({
		warn = consoleWithStackDev.warn,
		error = consoleWithStackDev.error,
	}, {
		__index = console,
	})
	return newConsole
end

return console
-- ProductId 1218011291 for 100 Cash
developerProductFunctions[Config.DeveloperProductIds["100 Cash"]] = function(receipt, player)
	-- Logic/code for player buying 100 Cash (may vary)
	local leaderstats = player:FindFirstChild("leaderstats")
	local cash = leaderstats and leaderstats:FindFirstChild("Cash")
	if cash then
		if Utilities:OwnsGamepass(player, gamepassID) then
			cash.Value += 200
		else
			cash.Value += 100
		end	
		-- Indicate a successful purchase
		return true
	end
end
-- gets the index of the constant
function luaP:INDEXK(x) return x - self.BITRK end

luaP.MAXINDEXRK = luaP.BITRK - 1
--!strict
local function run(LightChanger, reverse)
	local lights = LightChanger:GetLights("Numbered")
	for groupNumber, lightGroup in lights do
		local angle = if groupNumber % 2 == 0 then 60 else 30
		if reverse then
			if angle == 60 then
				angle = 30
			else
				angle = 60
			end
		end
		LightChanger:Tilt(angle, lightGroup)
	end
end

return function(LightChangerA, LightChangerB, reverse: boolean)
	run(LightChangerA, reverse)
	run(LightChangerB, reverse)
end
-- these numbers are how long it takes to switch. the numbers are in 1.4 seconds(IE: 6 = 1 1/2 seconds)
switch1 = 1
switch2 = 1
switch3 = 1
switch4 = 1
switch5 = 1
switch6 = 1


script.Parent.Parent.Character.Humanoid.WalkSpeed = start
while true do
x = script.Parent.Parent.Character.Torso.Position
wait(.25)
if script.Parent.Parent.PlayerGui.Bars.Charging.Value == false then
x = (script.Parent.Parent.Character.Torso.Position - x).Magnitude
if x < 1 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = start
up1 = 0
up2 = 0
up3 = 0
up4 = 0
print("To normal")
end
if x >= 3 then
ch = math.random(1, 5)
if ch == 1 then
script.Parent.Parent.Data.Agility.AXP.Value = script.Parent.Parent.Data.Agility.AXP.Value + 50
end
if script.Parent.Parent.Character.Humanoid.WalkSpeed == start then
up1 = up1 + 1
if up1 == switch1 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = stage1
up1 = 0
print("Speed Up")
end
end


if script.Parent.Parent.Character.Humanoid.WalkSpeed == stage1 then
up2 = up2 + 1
if up2 == switch2 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = stage2
up2 = 0
print("Speed Up")
end
end


if script.Parent.Parent.Character.Humanoid.WalkSpeed == stage2 then
up3 = up3 + 1
if up3 == switch3 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = stage3
up3 = 0
print("Speed Up")
end
end


if script.Parent.Parent.Character.Humanoid.WalkSpeed == stage3 then
up4 = up4 + 1
if up4 == switch4 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = stage4
up4 = 0
print("Speed Up")
end
end


if script.Parent.Parent.Character.Humanoid.WalkSpeed == stage4 then
up5 = up5 + 1
if up5 == switch5 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = stage5
up5 = 0
print("Speed Up")
end
end

if script.Parent.Parent.Character.Humanoid.WalkSpeed == stage5 then
up6 = up6 + 1
if up6 == switch6 then
script.Parent.Parent.Character.Humanoid.WalkSpeed = stage6
cha = math.random(1, 3)
if cha == 1 then
script.Parent.Parent.Data.Agility.AXP.Value = script.Parent.Parent.Data.Agility.AXP.Value + 16
else
script.Parent.Parent.Data.Agility.AXP.Value = script.Parent.Parent.Data.Agility.AXP.Value + 5
end
up6 = 0
print("Speed Up")
end
end
end
end
end
-- 12
module.Genres.Building = 13
module.Genres.FPS = 14
module.Genres.RPG = 15


module.SortAggregation = {}
module.SortAggregation.PastDay = 1
---------------------------------------------------

This = script.Parent
Lift = This.Parent.Parent.Parent
CustomLabel = require(Lift.CustomLabel)
Characters = require(script.Characters)
CharactersDOT = require(script.CharactersDOT)

CustomText = CustomLabel["CUSTOMFLOORLABEL"]

Lift:WaitForChild("Floor").Changed:connect(function(floor)
  --custom indicator code--
  ChangeFloor(tostring(floor))
end)

function ChangeFloor(SF)
	if CustomText[tonumber(SF)] then
		SF = CustomText[tonumber(SF)]
	end
	SetDisplay(1,(string.len(SF) == 2 and SF:sub(1,1) or "NIL"))		
	SetDisplay(2,(string.len(SF) == 2 and SF:sub(2,2) or SF))
end



function SetDisplay(ID,CHAR)
	if This.Display:FindFirstChild("DIG"..ID) and Characters[CHAR] ~= nil then
 		for i,l in pairs(Characters[CHAR]) do 
			for r=1,15 do	
				This.Display["DIG"..ID]["D"..r].BrickColor = BrickColor.new(l:sub(r,r) == "1" and "Pastel Blue" or "Black")
			end
		end
	end
end

function SetDisplayDOT(ID,CHAR)
	if This.Display:FindFirstChild("Matrix"..ID) and CharactersDOT[CHAR] ~= nil then
 		for i,l in pairs(CharactersDOT[CHAR]) do 
			for r=1,7 do	
				This.Display["Matrix"..ID]["Row"..i]["D"..r].BrickColor = BrickColor.new(l:sub(r,r) == "1" and "Persimmon" or "Black")
			end
		end
	end
end
-- Check if input is of correct types
function Input:_isMovement (input)
	return --input.UserInputType == Enum.UserInputType.Touch or
	       input.UserInputType == Enum.UserInputType.MouseMovement;
end
function Input:_isDown (input)
	return input.UserInputType == Enum.UserInputType.MouseButton1 or
	       input.UserInputType == Enum.UserInputType.Touch;
end

Input.__index = Input;
return I;
-- Connect to the current and all future cameras
workspace.Changed:connect(OnWorkspaceChanged)
OnWorkspaceChanged('CurrentCamera')

Player.CharacterAdded:connect(OnCharacterAdded)
if Player.Character then
	OnCharacterAdded(Player.Character)
end

Invisicam:SetMode(STARTING_MODE)

Behaviors[MODE.CUSTOM] = function() end -- (Does nothing until SetCustomBehavior)
Behaviors[MODE.LIMBS] = LimbBehavior
Behaviors[MODE.MOVEMENT] = MoveBehavior
Behaviors[MODE.CORNERS] = CornerBehavior
Behaviors[MODE.CIRCLE1] = CircleBehavior
Behaviors[MODE.CIRCLE2] = CircleBehavior
Behaviors[MODE.LIMBMOVE] = LimbMoveBehavior

return Invisicam
--Made by Luckymaxer

Tool = script.Parent
Handle = Tool:WaitForChild("Handle")

Players = game:GetService("Players")
RunService = game:GetService("RunService")
UserInputService = game:GetService("UserInputService")

Animations = {}

ServerControl = Tool:WaitForChild("ServerControl")
ClientControl = Tool:WaitForChild("ClientControl")

Rate = (1 / 60)

ToolEquipped = false

function SetAnimation(mode, value)
	if mode == "PlayAnimation" and value and ToolEquipped and Humanoid then
		for i, v in pairs(Animations) do
			if v.Animation == value.Animation then
				v.AnimationTrack:Stop()
				table.remove(Animations, i)
			end
		end
		local AnimationTrack = Humanoid:LoadAnimation(value.Animation)
		table.insert(Animations, {Animation = value.Animation, AnimationTrack = AnimationTrack})
		AnimationTrack:Play(value.FadeTime, value.Weight, value.Speed)
	elseif mode == "StopAnimation" and value then
		for i, v in pairs(Animations) do
			if v.Animation == value.Animation then
				v.AnimationTrack:Stop(value.FadeTime)
				table.remove(Animations, i)
			end
		end
	end
end

function CheckIfAlive()
	return (((Character and Character.Parent and Humanoid and Humanoid.Parent and Humanoid.Health > 0 and Player and Player.Parent) and true) or false)
end

function Equipped(Mouse)
	Character = Tool.Parent
	Player = Players:GetPlayerFromCharacter(Character)
	Humanoid = Character:FindFirstChild("Humanoid")
	ToolEquipped = true
	if not CheckIfAlive() then
		return
	end
	PlayerMouse = Player:GetMouse()
end

function Unequipped()
	for i, v in pairs(Animations) do
		if v and v.AnimationTrack then
			v.AnimationTrack:Stop()
		end
	end
	Animations = {}
	ToolEquipped = false
end

function InvokeServer(mode, value)
	local ServerReturn
	pcall(function()
		ServerReturn = ServerControl:InvokeServer(mode, value)
	end)
	return ServerReturn
end

function OnClientInvoke(mode, value)
	if mode == "PlayAnimation" and value and ToolEquipped and Humanoid then
		SetAnimation("PlayAnimation", value)
	elseif mode == "StopAnimation" and value then
		SetAnimation("StopAnimation", value)
	elseif mode == "MouseData" then
		return ((PlayerMouse and {Position = PlayerMouse.Hit.p, Target = PlayerMouse.Target}) or nil)
	end
end

ClientControl.OnClientInvoke = OnClientInvoke
Tool.Equipped:connect(Equipped)
Tool.Unequipped:connect(Unequipped)
-- don't do nothin
end)

gui.Frame.BanButton.Activated:connect(function()
	if requesting then return end
	
	requesting = true
	local result = rep.Events.ModAction:InvokeServer("ban",gui.Frame.InputBox.Text)

	if result then
		gui.Frame.Actions.Text = "Successfully banned "..gui.Frame.InputBox.Text
	else
		gui.Frame.Actions.Text = "Error, user not found"
	end
	gui.Frame.InputBox.Text = ""
	
	requesting = false
end)

gui.Frame.UnbanButton.Activated:connect(function()
	if requesting then return end
	
	requesting = true
	local result = rep.Events.ModAction:InvokeServer("unban",gui.Frame.InputBox.Text)

	if result then
		gui.Frame.Actions.Text = "Successfully unbanned "..gui.Frame.InputBox.Text
	else
		gui.Frame.Actions.Text = "Error, user not found"
	end
	gui.Frame.InputBox.Text = ""
	
	requesting = false
end)

gui.Frame.ExitButton.Activated:connect(function()
	gui.Frame.Visible = false
end)

gui.OpenButton.Activated:connect(function()
	gui.Frame.Visible = not gui.Frame.Visible
end)

rep.Events.PromptModConsole.OnClientEvent:connect(function()
	player.PlayerGui.ModConsole.Enabled = true
end)

gui.Frame.F9LogButton.Activated:connect(function()
	gui.Frame.Actions.Text = "Success, press F9 or access the dev console to view the mod log"
	local log = rep.Events.RequestModLog:InvokeServer()
	for _,entry in next,log do
		--[[
			timeBanned = tick(),
			bannedName = targetName,
			bannedID = targetID,
			reason = "",
		--]]
		local temp = os.date("*t", entry.timeBanned)
		
		print(entry.action,entry.bannedName,"(id "..entry.bannedID..")","for reason:",entry.reason,"on",temp.month.."/"..temp.day.."/"..temp.year)
	end
end)
-- Note: DotProduct check in CoordinateFrame::lookAt() prevents using values within about
-- 8.11 degrees of the +/- Y axis, that's why these limits are currently 80 degrees
local MIN_Y = math.rad(-80)
local MAX_Y = math.rad(80)

local TOUCH_ADJUST_AREA_UP = math.rad(30)
local TOUCH_ADJUST_AREA_DOWN = math.rad(-15)

local TOUCH_SENSITIVTY_ADJUST_MAX_Y = 2.1
local TOUCH_SENSITIVTY_ADJUST_MIN_Y = 0.5

local VR_ANGLE = math.rad(15)
local VR_LOW_INTENSITY_ROTATION = Vector2.new(math.rad(15), 0)
local VR_HIGH_INTENSITY_ROTATION = Vector2.new(math.rad(45), 0)
local VR_LOW_INTENSITY_REPEAT = 0.1
local VR_HIGH_INTENSITY_REPEAT = 0.4

local ZERO_VECTOR2 = Vector2.new(0,0)
local ZERO_VECTOR3 = Vector3.new(0,0,0)

local TOUCH_SENSITIVTY = Vector2.new(0.00945 * math.pi, 0.003375 * math.pi)
local MOUSE_SENSITIVITY = Vector2.new( 0.002 * math.pi, 0.0015 * math.pi )

local SEAT_OFFSET = Vector3.new(0,5,0)
local VR_SEAT_OFFSET = Vector3.new(0,4,0)
local HEAD_OFFSET = Vector3.new(0,1.5,0)
local R15_HEAD_OFFSET = Vector3.new(0, 1.5, 0)
local R15_HEAD_OFFSET_NO_SCALING = Vector3.new(0, 2, 0)
local HUMANOID_ROOT_PART_SIZE = Vector3.new(2, 2, 1)

local GAMEPAD_ZOOM_STEP_1 = 0
local GAMEPAD_ZOOM_STEP_2 = 10
local GAMEPAD_ZOOM_STEP_3 = 20

local PAN_SENSITIVITY = 20
local ZOOM_SENSITIVITY_CURVATURE = 0.5

local abs = math.abs
local sign = math.sign

local FFlagUserCameraToggle do
	local success, result = pcall(function()
		return UserSettings():IsUserFeatureEnabled("UserCameraToggle")
	end)
	FFlagUserCameraToggle = success and result
end

local FFlagUserFixZoomInZoomOutDiscrepancy do
	local success, result = pcall(function()
		return UserSettings():IsUserFeatureEnabled("UserFixZoomInZoomOutDiscrepancy")
	end)
	FFlagUserFixZoomInZoomOutDiscrepancy = success and result
end

local Util = require(script.Parent:WaitForChild("CameraUtils"))
local ZoomController = require(script.Parent:WaitForChild("ZoomController"))
local CameraToggleStateController = require(script.Parent:WaitForChild("CameraToggleStateController"))
local CameraInput = require(script.Parent:WaitForChild("CameraInput"))
local CameraUI = require(script.Parent:WaitForChild("CameraUI"))
--- Updates the current scope and target state.
function ScopeHUD:UpdateTargetingState()
    local Targeting = self.props.Core.Targeting
    local Scope = Targeting.Scope
    local DirectTarget, ScopeTarget = Targeting:UpdateTarget()
    return self:setState({
        Scope = Scope or Roact.None;
        ScopeTarget = ScopeTarget or Roact.None;
        DirectTarget = DirectTarget or Roact.None;
        IsScopeLocked = Targeting.IsScopeLocked;
    })
end
--[[**
	ensures Roblox CatalogSearchParams type

	@param value The value to check against

	@returns True iff the condition is satisfied, false otherwise
**--]]
t.CatalogSearchParams = t.typeof("CatalogSearchParams")