add gs
This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
--[[
|
||||
// SideBar.lua
|
||||
// Creates a side bar to be used for certain pages
|
||||
// Currently used by:
|
||||
// GameGenre
|
||||
// Friends
|
||||
]]
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
||||
local Modules = GuiRoot:FindFirstChild("Modules")
|
||||
local ShellModules = Modules:FindFirstChild("Shell")
|
||||
local ContextActionService = game:GetService("ContextActionService")
|
||||
local GuiService = game:GetService('GuiService')
|
||||
|
||||
local GlobalSettings = require(ShellModules:FindFirstChild('GlobalSettings'))
|
||||
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
||||
local ScreenManager = require(ShellModules:FindFirstChild('ScreenManager'))
|
||||
local SoundManager = require(ShellModules:FindFirstChild('SoundManager'))
|
||||
local Analytics = require(ShellModules:FindFirstChild('Analytics'))
|
||||
|
||||
local CreateSideBar = function()
|
||||
local this = {}
|
||||
|
||||
local buttons = {}
|
||||
local selectedObject = nil
|
||||
local inFocus = false
|
||||
|
||||
local INSET_Y = 156
|
||||
local INSET_X = 65
|
||||
local BUTTON_SIZE_Y = 75
|
||||
|
||||
local modalOverlay = Utility.Create'Frame'
|
||||
{
|
||||
Name = "ModalOverlay";
|
||||
Size = UDim2.new(1, 0, 1, 0);
|
||||
BackgroundTransparency = 1;
|
||||
BackgroundColor3 = GlobalSettings.ModalBackgroundColor;
|
||||
BorderSizePixel = 0;
|
||||
ZIndex = 4;
|
||||
}
|
||||
|
||||
local container = Utility.Create'Frame'
|
||||
{
|
||||
Name = "SideBarContainer";
|
||||
Size = UDim2.new(0.3, 0, 1, 0);
|
||||
Position = UDim2.new(1, 0, 0, 0);
|
||||
BorderSizePixel = 0;
|
||||
BackgroundColor3 = GlobalSettings.OverlayColor;
|
||||
ZIndex = 5;
|
||||
Parent = modalOverlay;
|
||||
}
|
||||
local dummySelectionImage = Utility.Create'TextButton'
|
||||
{
|
||||
Name = "DummySelectionImage";
|
||||
Size = UDim2.new(0, 0, 0, 0);
|
||||
Visible = false;
|
||||
|
||||
SoundManager:CreateSound('MoveSelection');
|
||||
}
|
||||
local textLabel = Utility.Create'TextLabel'
|
||||
{
|
||||
Name = "Text";
|
||||
Size = UDim2.new(1, -INSET_X - 100, 1, -INSET_Y); --make it inside the TitleSafeContainer
|
||||
Position = UDim2.new(0, INSET_X, 0, INSET_Y);
|
||||
BorderSizePixel = 0;
|
||||
BackgroundTransparency = 1;
|
||||
ZIndex = 6;
|
||||
Text = "";
|
||||
TextXAlignment = Enum.TextXAlignment.Left;
|
||||
TextYAlignment = Enum.TextYAlignment.Top;
|
||||
TextColor3 = GlobalSettings.WhiteTextColor;
|
||||
Font = GlobalSettings.RegularFont;
|
||||
FontSize = GlobalSettings.DescriptionSize;
|
||||
TextWrapped = true;
|
||||
}
|
||||
|
||||
local function recalcPositions()
|
||||
for i = 1, #buttons do
|
||||
buttons[i].Position = UDim2.new(0, 0, 0, INSET_Y + (BUTTON_SIZE_Y * (i - 1)))
|
||||
end
|
||||
end
|
||||
|
||||
--[[ Public API ]]--
|
||||
--Add closeEvent
|
||||
local closedEvent = Instance.new("BindableEvent")
|
||||
closedEvent.Name = "ClosedEvent"
|
||||
this.Closed = closedEvent.Event
|
||||
|
||||
--Never shown, will be overwritten by child--
|
||||
function this:GetAnalyticsInfo()
|
||||
return {[Analytics.WidgetNames('WidgetId')] = Analytics.WidgetNames('SideBarId')}
|
||||
end
|
||||
|
||||
function this:AddItem(newItemName, callback)
|
||||
local button = Utility.Create'TextButton'
|
||||
{
|
||||
Name = "SortButton";
|
||||
Size = UDim2.new(1, 0, 0, BUTTON_SIZE_Y);
|
||||
BorderSizePixel = 0;
|
||||
BackgroundColor3 = GlobalSettings.BlueButtonColor;
|
||||
BackgroundTransparency = 1;
|
||||
ZIndex = 6;
|
||||
Text = "";
|
||||
SelectionImageObject = dummySelectionImage;
|
||||
Parent = container;
|
||||
|
||||
SoundManager:CreateSound('MoveSelection');
|
||||
}
|
||||
local text = Utility.Create'TextLabel'
|
||||
{
|
||||
Name = "SortName";
|
||||
Size = UDim2.new(1, -INSET_X, 1, 0);
|
||||
Position = UDim2.new(0, INSET_X, 0, 0);
|
||||
BackgroundTransparency = 1;
|
||||
Text = newItemName;
|
||||
TextXAlignment = Enum.TextXAlignment.Left;
|
||||
TextColor3 = GlobalSettings.WhiteTextColor;
|
||||
Font = GlobalSettings.RegularFont;
|
||||
FontSize = GlobalSettings.MediumFontSize;
|
||||
ZIndex = 7;
|
||||
Parent = button;
|
||||
}
|
||||
|
||||
button.MouseButton1Click:connect(function()
|
||||
SoundManager:Play('ButtonPress')
|
||||
ScreenManager:CloseCurrent()
|
||||
closedEvent:Fire()
|
||||
callback()
|
||||
end)
|
||||
button.SelectionGained:connect(function()
|
||||
button.BackgroundTransparency = 0
|
||||
text.TextColor3 = GlobalSettings.TextSelectedColor
|
||||
end)
|
||||
button.SelectionLost:connect(function()
|
||||
button.BackgroundTransparency = 1
|
||||
text.TextColor3 = GlobalSettings.WhiteTextColor
|
||||
end)
|
||||
|
||||
buttons[#buttons + 1] = button
|
||||
recalcPositions()
|
||||
end
|
||||
|
||||
function this:SetText(text)
|
||||
textLabel.Text = text
|
||||
textLabel.Parent = container
|
||||
end
|
||||
|
||||
function this:ResetText()
|
||||
textLabel.Text = ""
|
||||
textLabel.Parent = nil
|
||||
end
|
||||
|
||||
function this:RemoveAllItems()
|
||||
this:ResetText()
|
||||
for i,button in pairs(buttons) do
|
||||
button:Destroy()
|
||||
buttons[i] = nil
|
||||
end
|
||||
end
|
||||
|
||||
function this:SetSelectedObject(indexToOpenTo, selectCoreObject)
|
||||
if #buttons > 0 then
|
||||
selectedObject = indexToOpenTo and buttons[indexToOpenTo] or buttons[1]
|
||||
--If change SelectedCoreObject and sidebar is focused
|
||||
if selectCoreObject == true and selectedObject and inFocus then
|
||||
GuiService.SelectedCoreObject = selectedObject
|
||||
end
|
||||
else
|
||||
selectedObject = nil
|
||||
end
|
||||
end
|
||||
|
||||
function this:GetPriority()
|
||||
return GlobalSettings.OverlayPriority
|
||||
end
|
||||
|
||||
function this:Show()
|
||||
modalOverlay.Parent = ScreenManager:GetScreenGuiByPriority(self:GetPriority())
|
||||
local tweenIn = Utility.PropertyTweener(modalOverlay, "BackgroundTransparency", 1,
|
||||
GlobalSettings.ModalBackgroundTransparency, 0.25, Utility.EaseInOutQuad, true, nil)
|
||||
container:TweenPosition(UDim2.new(1 - container.Size.X.Scale, 0, 0, 0),
|
||||
Enum.EasingDirection.InOut, Enum.EasingStyle.Quad, 0.25, true)
|
||||
SoundManager:Play('SideMenuSlideIn')
|
||||
end
|
||||
|
||||
function this:Hide()
|
||||
local tweenOut = Utility.PropertyTweener(modalOverlay, "BackgroundTransparency", 0.3, 1, 0.25, Utility.EaseInOutQuad, true,
|
||||
function()
|
||||
modalOverlay.Parent = nil
|
||||
end)
|
||||
container:TweenPosition(UDim2.new(1, 0, 0, 0), Enum.EasingDirection.InOut, Enum.EasingStyle.Sine, 0.25, true)
|
||||
end
|
||||
|
||||
function this:IsFocused()
|
||||
return inFocus
|
||||
end
|
||||
|
||||
function this:Focus()
|
||||
inFocus = true
|
||||
GuiService:AddSelectionParent("SideBar", container)
|
||||
if selectedObject then
|
||||
Utility.SetSelectedCoreObject(selectedObject)
|
||||
else
|
||||
self:SetSelectedObject(1)
|
||||
Utility.SetSelectedCoreObject(selectedObject)
|
||||
end
|
||||
|
||||
-- connect back button
|
||||
ContextActionService:BindCoreAction("CloseSideBar",
|
||||
function(actionName, inputState, inputObject)
|
||||
if inputState == Enum.UserInputState.End then
|
||||
ScreenManager:CloseCurrent()
|
||||
closedEvent:Fire()
|
||||
end
|
||||
end,
|
||||
false, Enum.KeyCode.ButtonB)
|
||||
end
|
||||
|
||||
function this:RemoveFocus()
|
||||
inFocus = false
|
||||
GuiService:RemoveSelectionGroup("SideBar")
|
||||
ContextActionService:UnbindCoreAction("CloseSideBar")
|
||||
selectedObject = nil
|
||||
end
|
||||
|
||||
return this
|
||||
end
|
||||
|
||||
return CreateSideBar
|
||||
Reference in New Issue
Block a user