mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 05:07:48 +00:00
153 lines
4.9 KiB
Lua
153 lines
4.9 KiB
Lua
--[[
|
|
// SocialMorePane.lua
|
|
|
|
// Shows a full grid view of a social view. Only shown if social items for a given
|
|
// view are above a threshold set by SocialPane.lua
|
|
// User by SocialPane.lua
|
|
|
|
// TODO:
|
|
Bug with TabDock where its removing focus of the last tab when re-entering the tab dock
|
|
]]
|
|
local CoreGui = Game:GetService("CoreGui")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
local ContextActionService = game:GetService("ContextActionService")
|
|
local GuiService = game:GetService("GuiService")
|
|
|
|
local AssetManager = require(Modules:FindFirstChild('AssetManager'))
|
|
local EventHub = require(Modules:FindFirstChild('EventHub'))
|
|
local Utility = require(Modules:FindFirstChild('Utility'))
|
|
local GlobalSettings = require(Modules:FindFirstChild('GlobalSettings'))
|
|
local ScrollingGridModule = require(Modules:FindFirstChild('ScrollingGrid'))
|
|
local ScreenManager = require(Modules:FindFirstChild('ScreenManager'))
|
|
local Strings = require(Modules:FindFirstChild('LocalizedStrings'))
|
|
local FriendsData = require(Modules:FindFirstChild('FriendsData'))
|
|
local FriendsView = require(Modules:FindFirstChild('FriendsView'))
|
|
|
|
local createSocialScreen = function(currentScreenTitle, previousScreenName)
|
|
local this = {}
|
|
|
|
local mySocialView = nil
|
|
|
|
local container = Utility.Create'Frame'
|
|
{
|
|
Name = "SocialContainer";
|
|
Size = UDim2.new(1, 0, 1, 0);
|
|
BackgroundTransparency = 1;
|
|
Visible = false;
|
|
}
|
|
local backLabel = Utility.Create'ImageLabel'
|
|
{
|
|
-- PLACE HOLDER
|
|
Name = "BackLabel";
|
|
Position = UDim2.new(0, 0, 0, 0);
|
|
BackgroundTransparency = 1;
|
|
ZIndex = 2;
|
|
Parent = container;
|
|
}
|
|
AssetManager.LocalImage(backLabel,
|
|
'rbxasset://textures/ui/Shell/Icons/BackIcon', {['720'] = UDim2.new(0,32,0,32); ['1080'] = UDim2.new(0,48,0,48);})
|
|
|
|
-- Right now previous screen is always Friends, but we're still using previousScreenName in case
|
|
-- recently played with ever makes it in
|
|
local backText = Utility.Create'TextLabel'
|
|
{
|
|
Name = "BackText";
|
|
Size = UDim2.new(0, 0, 0, backLabel.Size.Y.Offset);
|
|
Position = UDim2.new(0, backLabel.Size.X.Offset + 8, 0, 0);
|
|
BackgroundTransparency = 1;
|
|
Font = GlobalSettings.RegularFont;
|
|
FontSize = GlobalSettings.ButtonSize;
|
|
TextXAlignment = Enum.TextXAlignment.Left;
|
|
TextColor3 = GlobalSettings.WhiteTextColor;
|
|
Text = string.upper(previousScreenName);
|
|
Parent = container;
|
|
}
|
|
local titleLabel = Utility.Create'TextLabel'
|
|
{
|
|
Name = "TitleLabel";
|
|
Size = UDim2.new(0, 0, 0, 35);
|
|
Position = UDim2.new(0, 16, 0, backLabel.Size.Y.Offset + 74);
|
|
BackgroundTransparency = 1;
|
|
Text = string.upper(currentScreenTitle);
|
|
TextColor3 = GlobalSettings.WhiteTextColor;
|
|
TextXAlignment = Enum.TextXAlignment.Left;
|
|
Font = GlobalSettings.LightFont;
|
|
FontSize = GlobalSettings.HeaderSize;
|
|
Parent = container;
|
|
}
|
|
|
|
local socialScrollingGrid = ScrollingGridModule()
|
|
socialScrollingGrid:SetSize(UDim2.new(0, 1438, 0, 610))
|
|
socialScrollingGrid:SetCellSize(Vector2.new(446, 114))
|
|
socialScrollingGrid:SetSpacing(Vector2.new(50, 10))
|
|
socialScrollingGrid:SetScrollDirection(socialScrollingGrid.Enum.ScrollDirection.Horizontal)
|
|
socialScrollingGrid:SetPosition(UDim2.new(0, 0, 0, titleLabel.Position.Y.Offset + titleLabel.Size.Y.Offset + 90))
|
|
socialScrollingGrid:SetClipping(false)
|
|
socialScrollingGrid:SetParent(container)
|
|
|
|
--[[ Set Images ]]--
|
|
local function setSocialView()
|
|
print('set the social screen data')
|
|
local friendsData = FriendsData.GetOnlineFriendsAsync()
|
|
mySocialView = FriendsView(socialScrollingGrid, friendsData, nil, nil)
|
|
end
|
|
|
|
--[[ Public API ]]--
|
|
function this:Show()
|
|
container.Visible = true
|
|
self.TransitionTweens = ScreenManager:DefaultFadeIn(container)
|
|
ScreenManager:PlayDefaultOpenSound()
|
|
end
|
|
|
|
function this:Hide()
|
|
container.Visible = false
|
|
container.Parent = nil
|
|
ScreenManager:DefaultCancelFade(self.TransitionTweens)
|
|
self.TransitionTweens = nil
|
|
end
|
|
|
|
function this:Focus()
|
|
if self.SavedSelectedObject and self.SavedSelectedObject:IsDescendantOf(container) then
|
|
GuiService.SelectedCoreObject = self.SavedSelectedObject
|
|
else
|
|
if mySocialView then
|
|
GuiService.SelectedCoreObject = mySocialView:GetDefaultFocusItem()
|
|
end
|
|
end
|
|
--
|
|
ContextActionService:BindCoreAction("ReturnFromSocialScreen",
|
|
function(actionName, inputState, inputObject)
|
|
if inputState == Enum.UserInputState.End then
|
|
ScreenManager:CloseCurrent()
|
|
end
|
|
end,
|
|
false, Enum.KeyCode.ButtonB)
|
|
end
|
|
|
|
function this:RemoveFocus()
|
|
local selectedObject = GuiService.SelectedCoreObject
|
|
if selectedObject and selectedObject:IsDescendantOf(container) then
|
|
self.SavedSelectedObject = selectedObject
|
|
GuiService.SelectedCoreObject = nil
|
|
else
|
|
self.SavedSelectedObject = nil
|
|
end
|
|
ContextActionService:UnbindCoreAction("ReturnFromSocialScreen")
|
|
end
|
|
|
|
function this:SetPosition(newPosition)
|
|
container.Position = newPosition
|
|
end
|
|
|
|
function this:SetParent(newParent)
|
|
container.Parent = newParent
|
|
end
|
|
|
|
setSocialView()
|
|
|
|
return this
|
|
end
|
|
|
|
return createSocialScreen
|