Super-Nostalgia-Zone/UI/Topbar/Topbar.client.lua

191 lines
5.8 KiB
Lua

-------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Setup
-------------------------------------------------------------------------------------------------------------------------------------------------------------
local Players = game:GetService("Players")
local GuiService = game:GetService("GuiService")
local RunService = game:GetService("RunService")
local TeleportService = game:GetService("TeleportService")
local UserInputService = game:GetService("UserInputService")
local UserGameSettings = UserSettings():GetService("UserGameSettings")
local topbar = script.Parent
local ui = topbar.Parent
local config = require(topbar:WaitForChild("Config"))
local style = config.Style
local verbs = config.Verbs
local textColors = config.TextColors
local buttons = {}
for i, verb in ipairs(verbs) do
local name = verb.Name
local enabled = verb.Enabled
local label = verb.Label or name
local button = Instance.new("TextButton")
button.Name = name
button.LayoutOrder = i
button.Active = enabled
button.Text = " " .. label
for key, value in pairs(config.Style) do
button[key] = value
end
local textColor = (enabled and textColors.Active or textColors.Inactive)
button.TextStrokeColor3 = textColor
button.TextColor3 = textColor
if enabled then
local function onMouseEnter()
button.BackgroundTransparency = 0
end
local function onMouseLeave()
button.BackgroundTransparency = 0.5
end
button.MouseEnter:Connect(onMouseEnter)
button.MouseLeave:Connect(onMouseLeave)
end
buttons[name] = button
button.Parent = topbar
end
if ui.AbsoluteSize.Y < 600 then
local btnScale = topbar:WaitForChild("ButtonScale")
btnScale.Scale = btnScale.Scale * .6
end
-------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Help Button
-------------------------------------------------------------------------------------------------------------------------------------------------------------
local helpButton = buttons.Help
local helpWindow = ui:WaitForChild("HelpWindow")
local helpClose = helpWindow:WaitForChild("Close")
local function onHelpActivated()
helpWindow.Visible = true
end
local function onHelpClosed()
helpWindow.Visible = false
end
helpClose.Activated:Connect(onHelpClosed)
helpButton.Activated:Connect(onHelpActivated)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Fullscreen Button
-------------------------------------------------------------------------------------------------------------------------------------------------------------
local player = Players.LocalPlayer
local fullscreen = buttons.Fullscreen
local function onFullscreenActivated()
if not player:FindFirstChild("FullscreenMsg") then
local msg = Instance.new("Message")
msg.Name = "FullscreenMsg"
msg.Text = "This button is just here for legacy aesthetics, and has no functionality."
if UserInputService.KeyboardEnabled then
msg.Text = msg.Text .. "\nPress F11 to toggle fullscreen!"
end
msg.Parent = player
wait(3)
msg:Destroy()
end
end
local function updateFullscreen()
local text = fullscreen.Text
if UserGameSettings:InFullScreen() then
fullscreen.Text = text:gsub("Full", "x Full")
else
fullscreen.Text = text:gsub("x ", "")
end
end
updateFullscreen()
fullscreen.Activated:Connect(onFullscreenActivated)
UserGameSettings.FullscreenChanged:Connect(updateFullscreen)
-------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Exit Button
-------------------------------------------------------------------------------------------------------------------------------------------------------------
local exitButton = buttons.Exit
local gameJoin = ui:WaitForChild("GameJoin")
local message = gameJoin:WaitForChild("Message")
local exitOverride = gameJoin:WaitForChild("ExitOverride")
local exitBuffer = "Continue holding down 'Back' to return to the menu.\nExiting in...\n%.1f"
local function onExitActivated()
if not exitOverride.Visible then
exitOverride.Visible = true
message.Visible = false
gameJoin.Visible = true
TeleportService:Teleport(998374377)
end
end
local function processExitInput(input, gameProcessed)
if gameProcessed then
return
end
if input.KeyCode == Enum.KeyCode.ButtonSelect then
if exitOverride.Visible then
return
end
if gameJoin.Visible then
return
end
if not game:IsLoaded() then
return
end
local success = true
gameJoin.Visible = true
message.Size = exitOverride.Size
for i = 3, 0, -.1 do
if input.UserInputState ~= Enum.UserInputState.Begin then
success = false
break
end
message.Text = exitBuffer:format(i)
wait(.1)
end
if success then
onExitActivated()
else
gameJoin.Visible = false
end
end
end
if not GuiService:IsTenFootInterface() then
exitButton.Activated:Connect(onExitActivated)
end
UserInputService.InputBegan:Connect(processExitInput)
-------------------------------------------------------------------------------------------------------------------------------------------------------------