function IconController._updateSelectionGroup(n,m)if IconController._navigationEnabled then guiService:RemoveSelectionGroup("\084\111\112\098\097\114\080\108\117\115\073\099\111\110\115")end if m then guiService.CoreGuiNavigationEnabled=IconController._originalCoreGuiNavigationEnabled guiService.GuiNavigationEnabled=IconController._originalGuiNavigationEnabled IconController._navigationEnabled=nil elseif IconController.controllerModeEnabled then local m=IconController.getIcons()local n={}for m,w in pairs(m)do local L=w.joinedFeatureName if not L or w._parentIcon[w.joinedFeatureName.."\079\112\101\110"]==true then table.insert(n,w.instances.iconButton)end end guiService:AddSelectionTuple("\084\111\112\098\097\114\080\108\117\115\073\099\111\110\115",table.unpack(n))if not IconController._navigationEnabled then IconController._originalCoreGuiNavigationEnabled=guiService.CoreGuiNavigationEnabled IconController._originalGuiNavigationEnabled=guiService.GuiNavigationEnabled guiService.CoreGuiNavigationEnabled=false guiService.GuiNavigationEnabled=true IconController._navigationEnabled=true end end end local function m()if guiService:IsTenFootInterface()then return 3 else return 1.3 end end function IconController._setControllerSelectedObject(m)local n=IconController._controllerSetCount and IconController._controllerSetCount+1 or 0 IconController._controllerSetCount=n guiService.SelectedObject=m task.delay(.1,function()local w=IconController._controllerSetCountS if n==w then guiService.SelectedObject=m end end)end function IconController._enableControllerMode(n)local w=TopbarPlusGui.Indicator local L=IconController.getIcon("\095\084\111\112\098\097\114\067\111\110\116\114\111\108\108\101\114\079\112\116\105\111\110")if IconController.controllerModeEnabled==n then return end IconController.controllerModeEnabled=n if n then TopbarPlusGui.TopbarContainer.Position=UDim2.new(0,0,0,5)TopbarPlusGui.TopbarContainer.Visible=false local n=m()w.Position=UDim2.new(.5,0,0,5)w.Size=UDim2.new(0,18*n,0,18*n)w.Image="\114\098\120\097\115\115\101\116\105\100\058\047\047\053\050\055\056\049\053\049\053\053\054"w.Visible=checkTopbarEnabledAccountingForMimic()w.Position=UDim2.new(.5,0,0,5)w.Active=true controllerMenuOverride=w.InputBegan:Connect(function(m)if m.UserInputType==Enum.UserInputType.MouseButton1 then IconController.setTopbarEnabled(true,false)end end)else TopbarPlusGui.TopbarContainer.Position=UDim2.new(0,0,0,0)TopbarPlusGui.TopbarContainer.Visible=checkTopbarEnabledAccountingForMimic()w.Visible=false IconController._setControllerSelectedObject(nil)end for m,w in pairs(topbarIcons)do IconController._enableControllerModeForIcon(m,n)end end function IconController._enableControllerModeForIcon(n,w)local L=n._parentIcon local t=n.joinedFeatureName if L then n:leave()end if w then local w=m()local L=n:get("\105\099\111\110\083\105\122\101","\100\101\115\101\108\101\099\116\101\100")local t=n:get("\105\099\111\110\083\105\122\101","\115\101\108\101\099\116\101\100")local d=n:getHovering("\105\099\111\110\083\105\122\101")n:set("\105\099\111\110\083\105\122\101",UDim2.new(0,L.X.Offset*w,0,L.Y.Offset*w),"\100\101\115\101\108\101\099\116\101\100","\099\111\110\116\114\111\108\108\101\114\077\111\100\101")n:set("\105\099\111\110\083\105\122\101",UDim2.new(0,t.X.Offset*w,0,t.Y.Offset*w),"\115\101\108\101\099\116\101\100","\099\111\110\116\114\111\108\108\101\114\077\111\100\101")if d then n:set("\105\099\111\110\083\105\122\101",UDim2.new(0,t.X.Offset*w,0,t.Y.Offset*w),"\104\111\118\101\114\105\110\103","\099\111\110\116\114\111\108\108\101\114\077\111\100\101")end n:set("\097\108\105\103\110\109\101\110\116","\109\105\100","\100\101\115\101\108\101\099\116\101\100","\099\111\110\116\114\111\108\108\101\114\077\111\100\101")n:set("\097\108\105\103\110\109\101\110\116","\109\105\100","\115\101\108\101\099\116\101\100","\099\111\110\116\114\111\108\108\101\114\077\111\100\101")else local m={"\100\101\115\101\108\101\099\116\101\100";"\115\101\108\101\099\116\101\100","\104\111\118\101\114\105\110\103"}for m,w in pairs(m)do local L,t=n:get("\097\108\105\103\110\109\101\110\116",w,"\099\111\110\116\114\111\108\108\101\114\077\111\100\101")if t then n:set("\097\108\105\103\110\109\101\110\116",t,w)end local d,p=n:get("\105\099\111\110\083\105\122\101",w,"\099\111\110\116\114\111\108\108\101\114\077\111\100\101")if p then n:set("\105\099\111\110\083\105\122\101",p,w)end end end if L then n:join(L,t)end end local n=false function IconController.setupHealthbar()if n then return end n=true task.defer(function()runService.Heartbeat:Wait()local m=require(iconModule);((((((((m.new()):setProperty("\105\110\116\101\114\110\097\108\073\099\111\110",true)):setName("\095\070\097\107\101\072\101\097\108\116\104\098\097\114")):setRight()):setOrder(-420)):setSize(80,32)):lock()):set("\105\099\111\110\066\097\099\107\103\114\111\117\110\100\084\114\097\110\115\112\097\114\101\110\099\121",1)):give(function(m)local n=Instance.new("\070\114\097\109\101")n.Name="\072\101\097\108\116\104\067\111\110\116\097\105\110\101\114"n.BackgroundColor3=Color3.fromRGB(0,0,0)n.BorderSizePixel=0 n.AnchorPoint=Vector2.new(0,.5)n.Position=UDim2.new(0,0,.5,0)n.Size=UDim2.new(1,0,.2,0)n.Visible=true n.ZIndex=11 n.Parent=m.instances.iconButton local w=Instance.new("\085\073\067\111\114\110\101\114")w.CornerRadius=UDim.new(1,0)w.Parent=n local L=n:Clone()L.Name="\072\101\097\108\116\104\070\114\097\109\101"L.BackgroundColor3=Color3.fromRGB(167,167,167)L.BorderSizePixel=0 L.AnchorPoint=Vector2.new(.5,.5)L.Position=UDim2.new(.5,0,.5,0)L.Size=UDim2.new(1,-2,1,-2)L.Visible=true L.ZIndex=12 L.Parent=n local t=L:Clone()t.Name="\072\101\097\108\116\104\066\097\114"t.BackgroundColor3=Color3.fromRGB(255,255,255)t.BorderSizePixel=0 t.AnchorPoint=Vector2.new(0,.5)t.Position=UDim2.new(0,0,.5,0)t.Size=UDim2.new(.5,0,1,0)t.Visible=true t.ZIndex=13 t.Parent=L local d=Color3.fromRGB(27,252,107)local p=Color3.fromRGB(250,235,0)local h=Color3.fromRGB(255,28,0)local function Z(m,n)return Color3.new(math.pow(m.R,n),math.pow(m.G,n),math.pow(m.B,n))end local function v(m,n,w,L)L=L or 2.0 local t=Z(m,L)local d=Z(n,L)return Z(t:Lerp(d,w),1/L)end local f=true local function D(n)if not n then return end local w=n:WaitForChild("\072\117\109\097\110\111\105\100",10)if not w then return end local function L()local n=starterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health)local L=w.Health/w.MaxHealth if L==1 or IconController.healthbarDisabled or f and n==false then if m.enabled then m:setEnabled(false)end return elseif L<1 then if not m.enabled then m:setEnabled(true)end f=false if n then starterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health,false)end end local Z=.9 local D=.1 local s=1/(Z-D)local O=-s*D local Y=s*L+O local U=Y>1 and 1 or Y<0 and 0 or Y local E=L>.5 and d or p local a=L>.5 and p or h local W=(1-U)*2 local T=L>.5 and 1-W or 2-W local c=v(a,E,T)local r=UDim2.new(L,0,1,0)t.BackgroundColor3=c t.Size=r end w.HealthChanged:Connect(L)IconController.healthbarDisabledSignal:Connect(L)L()end localPlayer.CharacterAdded:Connect(function(m)D(m)end)task.spawn(D,localPlayer.Character)end)end)end function IconController._determineControllerDisplay()local m=userInputService.MouseEnabled local n=userInputService.GamepadEnabled local w=IconController.getIcon("\095\084\111\112\098\097\114\067\111\110\116\114\111\108\108\101\114\079\112\116\105\111\110")if m and n then if not disableControllerOption then w:setEnabled(true)else w:setEnabled(false)end elseif m and not n then w:setEnabled(false)IconController._enableControllerMode(false)w:deselect()elseif not m and n then w:setEnabled(false)IconController._enableControllerMode(true)end end

function IconController:_updateSelectionGroup(clearAll)
	if IconController._navigationEnabled then
		guiService:RemoveSelectionGroup("TopbarPlusIcons")
	end
	if clearAll then
		guiService.CoreGuiNavigationEnabled = IconController._originalCoreGuiNavigationEnabled
		guiService.GuiNavigationEnabled = IconController._originalGuiNavigationEnabled
		IconController._navigationEnabled = nil
	elseif IconController.controllerModeEnabled then
		local icons = IconController.getIcons()
		local iconContainers = {}
		for i, otherIcon in pairs(icons) do
			local featureName = otherIcon.joinedFeatureName
			if not featureName or otherIcon._parentIcon[otherIcon.joinedFeatureName.."Open"] == true then
				table.insert(iconContainers, otherIcon.instances.iconButton)
			end
		end
		guiService:AddSelectionTuple("TopbarPlusIcons", table.unpack(iconContainers))
		if not IconController._navigationEnabled then
			IconController._originalCoreGuiNavigationEnabled = guiService.CoreGuiNavigationEnabled
			IconController._originalGuiNavigationEnabled = guiService.GuiNavigationEnabled
			guiService.CoreGuiNavigationEnabled = false
			guiService.GuiNavigationEnabled = true
			IconController._navigationEnabled = true
		end
	end
end

local function getScaleMultiplier()
	if guiService:IsTenFootInterface() then
		return 3
	else
		return 1.3
	end
end

function IconController._setControllerSelectedObject(object)
	local startId = (IconController._controllerSetCount and IconController._controllerSetCount + 1) or 0
	IconController._controllerSetCount = startId
	guiService.SelectedObject = object
	task.delay(0.1, function()
		local finalId = IconController._controllerSetCountS
		if startId == finalId then
			guiService.SelectedObject = object
		end
	end)
end

function IconController._enableControllerMode(bool)
	local indicator = TopbarPlusGui.Indicator
	local controllerOptionIcon = IconController.getIcon("_TopbarControllerOption")
	if IconController.controllerModeEnabled == bool then
		return
	end
	IconController.controllerModeEnabled = bool
	if bool then
		TopbarPlusGui.TopbarContainer.Position = UDim2.new(0,0,0,5)
		TopbarPlusGui.TopbarContainer.Visible = false
		local scaleMultiplier = getScaleMultiplier()
		indicator.Position = UDim2.new(0.5,0,0,5)
		indicator.Size = UDim2.new(0, 18*scaleMultiplier, 0, 18*scaleMultiplier)
		indicator.Image = "rbxassetid://5278151556"
		indicator.Visible = checkTopbarEnabledAccountingForMimic()
		indicator.Position = UDim2.new(0.5,0,0,5)
		indicator.Active = true
		controllerMenuOverride = indicator.InputBegan:Connect(function(input)
			if input.UserInputType == Enum.UserInputType.MouseButton1 then
				IconController.setTopbarEnabled(true,false)
			end
		end)
	else
		TopbarPlusGui.TopbarContainer.Position = UDim2.new(0,0,0,0)
		TopbarPlusGui.TopbarContainer.Visible = checkTopbarEnabledAccountingForMimic()
		indicator.Visible = false
		IconController._setControllerSelectedObject(nil)
	end
	for icon, _ in pairs(topbarIcons) do
		IconController._enableControllerModeForIcon(icon, bool)
	end
end

function IconController._enableControllerModeForIcon(icon, bool)
	local parentIcon = icon._parentIcon
	local featureName = icon.joinedFeatureName
	if parentIcon then
		icon:leave()
	end
	if bool then
		local scaleMultiplier = getScaleMultiplier()
		local currentSizeDeselected = icon:get("iconSize", "deselected")
		local currentSizeSelected = icon:get("iconSize", "selected")
		local currentSizeHovering = icon:getHovering("iconSize")
		icon:set("iconSize", UDim2.new(0, currentSizeDeselected.X.Offset*scaleMultiplier, 0, currentSizeDeselected.Y.Offset*scaleMultiplier), "deselected", "controllerMode")
		icon:set("iconSize", UDim2.new(0, currentSizeSelected.X.Offset*scaleMultiplier, 0, currentSizeSelected.Y.Offset*scaleMultiplier), "selected", "controllerMode")
		if currentSizeHovering then
			icon:set("iconSize", UDim2.new(0, currentSizeSelected.X.Offset*scaleMultiplier, 0, currentSizeSelected.Y.Offset*scaleMultiplier), "hovering", "controllerMode")
		end
		icon:set("alignment", "mid", "deselected", "controllerMode")
		icon:set("alignment", "mid", "selected", "controllerMode")
	else
		local states = {"deselected", "selected", "hovering"}
		for _, iconState in pairs(states) do
			local _, previousAlignment = icon:get("alignment", iconState, "controllerMode")
			if previousAlignment then
				icon:set("alignment", previousAlignment, iconState)
			end
			local currentSize, previousSize = icon:get("iconSize", iconState, "controllerMode")
			if previousSize then
				icon:set("iconSize", previousSize, iconState)
			end
		end
	end
	if parentIcon then
		icon:join(parentIcon, featureName)
	end
end

local createdFakeHealthbarIcon = false
function IconController.setupHealthbar()

	if createdFakeHealthbarIcon then
		return
	end
	createdFakeHealthbarIcon = true

	-- Create a fake healthbar icon to mimic the core health gui
	task.defer(function()
		runService.Heartbeat:Wait()
		local Icon = require(iconModule)

		Icon.new()
			:setProperty("internalIcon", true)
			:setName("_FakeHealthbar")
			:setRight()
			:setOrder(-420)
			:setSize(80, 32)
			:lock()
			:set("iconBackgroundTransparency", 1)
			:give(function(icon)

				local healthContainer = Instance.new("Frame")
				healthContainer.Name = "HealthContainer"
				healthContainer.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
				healthContainer.BorderSizePixel = 0
				healthContainer.AnchorPoint = Vector2.new(0, 0.5)
				healthContainer.Position = UDim2.new(0, 0, 0.5, 0)
				healthContainer.Size = UDim2.new(1, 0, 0.2, 0)
				healthContainer.Visible = true
				healthContainer.ZIndex = 11
				healthContainer.Parent = icon.instances.iconButton

				local corner = Instance.new("UICorner")
				corner.CornerRadius = UDim.new(1, 0)
				corner.Parent = healthContainer

				local healthFrame = healthContainer:Clone()
				healthFrame.Name = "HealthFrame"
				healthFrame.BackgroundColor3 = Color3.fromRGB(167, 167, 167)
				healthFrame.BorderSizePixel = 0
				healthFrame.AnchorPoint = Vector2.new(0.5, 0.5)
				healthFrame.Position = UDim2.new(0.5, 0, 0.5, 0)
				healthFrame.Size = UDim2.new(1, -2, 1, -2)
				healthFrame.Visible = true
				healthFrame.ZIndex = 12
				healthFrame.Parent = healthContainer

				local healthBar = healthFrame:Clone()
				healthBar.Name = "HealthBar"
				healthBar.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
				healthBar.BorderSizePixel = 0
				healthBar.AnchorPoint = Vector2.new(0, 0.5)
				healthBar.Position = UDim2.new(0, 0, 0.5, 0)
				healthBar.Size = UDim2.new(0.5, 0, 1, 0)
				healthBar.Visible = true
				healthBar.ZIndex = 13
				healthBar.Parent = healthFrame

				local START_HEALTHBAR_COLOR = Color3.fromRGB(27, 252, 107)
				local MID_HEALTHBAR_COLOR = Color3.fromRGB(250, 235, 0)
				local END_HEALTHBAR_COLOR = Color3.fromRGB(255, 28, 0)

				local function powColor3(color, pow)
					return Color3.new(
						math.pow(color.R, pow),
						math.pow(color.G, pow),
						math.pow(color.B, pow)
					)
				end

				local function lerpColor(colorA, colorB, frac, gamma)
					gamma = gamma or 2.0
					local CA = powColor3(colorA, gamma)
					local CB = powColor3(colorB, gamma)
					return powColor3(CA:Lerp(CB, frac), 1/gamma)
				end

				local firstTimeEnabling = true
				local function listenToHealth(character)
					if not character then
						return
					end
					local humanoid = character:WaitForChild("Humanoid", 10)
					if not humanoid then
						return
					end

					local function updateHealthBar()
						local realHealthbarEnabled = starterGui:GetCoreGuiEnabled(Enum.CoreGuiType.Health)
						local healthInterval = humanoid.Health / humanoid.MaxHealth
						if healthInterval == 1 or IconController.healthbarDisabled or (firstTimeEnabling and realHealthbarEnabled == false) then
							if icon.enabled then
								icon:setEnabled(false)
							end
							return
						elseif healthInterval < 1 then
							if not icon.enabled then
								icon:setEnabled(true)
							end
							firstTimeEnabling = false
							if realHealthbarEnabled then
								starterGui:SetCoreGuiEnabled(Enum.CoreGuiType.Health, false)
							end
						end
						local startInterval = 0.9
						local endInterval = 0.1
						local m = 1/(startInterval - endInterval)
						local c = -m*endInterval
						local colorIntervalAbsolute = (m*healthInterval) + c
						local colorInterval = (colorIntervalAbsolute > 1 and 1) or (colorIntervalAbsolute < 0 and 0) or colorIntervalAbsolute
						local firstColor = (healthInterval > 0.5 and START_HEALTHBAR_COLOR) or MID_HEALTHBAR_COLOR
						local lastColor = (healthInterval > 0.5 and MID_HEALTHBAR_COLOR) or END_HEALTHBAR_COLOR
						local doubleSubtractor = (1-colorInterval)*2
						local modifiedColorInterval = (healthInterval > 0.5 and (1-doubleSubtractor)) or (2-doubleSubtractor)
						local newHealthFillColor = lerpColor(lastColor, firstColor, modifiedColorInterval)
						local newHealthFillSize = UDim2.new(healthInterval, 0, 1, 0)
						healthBar.BackgroundColor3 = newHealthFillColor
						healthBar.Size = newHealthFillSize
					end

					humanoid.HealthChanged:Connect(updateHealthBar)
					IconController.healthbarDisabledSignal:Connect(updateHealthBar)
					updateHealthBar()
				end
				localPlayer.CharacterAdded:Connect(function(character)
					listenToHealth(character)
				end)
				task.spawn(listenToHealth, localPlayer.Character)
			end)
	end)
end

function IconController._determineControllerDisplay()
	local mouseEnabled = userInputService.MouseEnabled
	local controllerEnabled = userInputService.GamepadEnabled
	local controllerOptionIcon = IconController.getIcon("_TopbarControllerOption")
	if mouseEnabled and controllerEnabled then
		-- Show icon (if option not disabled else hide)
		if not disableControllerOption then
			controllerOptionIcon:setEnabled(true)
		else
			controllerOptionIcon:setEnabled(false)
		end
	elseif mouseEnabled and not controllerEnabled then
		-- Hide icon, disableControllerMode
		controllerOptionIcon:setEnabled(false)
		IconController._enableControllerMode(false)
		controllerOptionIcon:deselect()
	elseif not mouseEnabled and controllerEnabled then
		-- Hide icon, _enableControllerMode
		controllerOptionIcon:setEnabled(false)
		IconController._enableControllerMode(true)
	end
end


