Files
watrbx-game-engine/PlatformContent/durango/scripts/ui/Modules/SocialScreen.lua
T
2025-09-18 17:55:52 -04:00

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