Files
2025-09-18 17:55:52 -04:00

713 lines
24 KiB
Lua

--[[
// GameGenre.lua
// Displays a game genre page for a certain sort
TODO:
Clean up code
]]
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 PlatformService = nil
pcall(function() PlatformService = game:GetService('PlatformService') end)
local Utility = require(Modules:FindFirstChild('Utility'))
local GlobalSettings = require(Modules:FindFirstChild('GlobalSettings'))
local GameDataModule = require(Modules:FindFirstChild('GameData'))
local SideBarModule = require(Modules:FindFirstChild('SideBar'))
local VoteFrameModule = require(Modules:FindFirstChild('VoteFrame'))
local Strings = require(Modules:FindFirstChild('LocalizedStrings'))
local SortCarousel = require(Modules:FindFirstChild('SortCarousel'))
local ScreenManager = require(Modules:FindFirstChild('ScreenManager'))
local AssetManager = require(Modules:FindFirstChild('AssetManager'))
local GameJoinModule = require(Modules:FindFirstChild('GameJoin'))
local SoundManager = require(Modules:FindFirstChild('SoundManager'))
local Errors = require(Modules:FindFirstChild('Errors'))
local ErrorOverlayModule = require(Modules:FindFirstChild('ErrorOverlay'))
local LoadingWidget = require(Modules:FindFirstChild('LoadingWidget'))
local GameCollection = require(Modules:FindFirstChild('GameCollection'))
local isUseNewCarouselInXboxAppEnabled = Utility.IsFastFlagEnabled("UseNewCarouselInXboxApp")
local CarouselView = require(Modules:FindFirstChild('CarouselView'))
local CarouselController = require(Modules:FindFirstChild('CarouselController'))
local function CreateGameGenre(sortName, gameCollection)
local this = {}
local inFocus = false
local gameLoadCount = 20
local sideBarSorts = {} -- array or sort names and ids for the side bar
local baseButtonTextColor = GlobalSettings.WhiteTextColor
local selectedButtonTextColor = GlobalSettings.TextSelectedColor
local newGameSelectedCn = nil
local sideBarSelectedCn = nil
local dataModelViewChangedCn = nil
local canJoinGame = true
local returnedFromGame = true
local currentShownCollection = gameCollection
--[[ Top Level Elements ]]--
local GameGenreContainer = Utility.Create'Frame'
{
Name = "GameGenreContainer";
Size = UDim2.new(1, 0, 1, 0);
Position = UDim2.new(0, 0, 0, 0);
BackgroundTransparency = 1;
Visible = false;
Parent = parent;
}
local BackLabel = Utility.Create'ImageLabel'
{
Name = "BackLabel";
Position = UDim2.new(0, 0, 0, 0);
BackgroundTransparency = 1;
ZIndex = 2;
Parent = GameGenreContainer;
}
AssetManager.LocalImage(BackLabel,
'rbxasset://textures/ui/Shell/Icons/BackIcon', {['720'] = UDim2.new(0,32,0,32); ['1080'] = UDim2.new(0,48,0,48);})
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 = '';
Parent = GameGenreContainer;
}
local SideBarButton = Utility.Create'ImageButton'
{
Name = "SideBarButton";
Size = UDim2.new(0, 450, 0, 75);
Position = UDim2.new(0, 0, 0, BackLabel.Size.Y.Offset + 60);
BackgroundTransparency = 1;
BorderSizePixel = 0;
BackgroundColor3 = GlobalSettings.GreySelectionColor;
Parent = GameGenreContainer;
SoundManager:CreateSound('MoveSelection');
}
SideBarButton.NextSelectionRight = SideBarButton
SideBarButton.NextSelectionLeft = SideBarButton
SideBarButton.SelectionGained:connect(function()
Utility.PropertyTweener(SideBarButton, 'BackgroundTransparency', 0, 0, 0, nil, true)
end)
SideBarButton.SelectionLost:connect(function()
Utility.PropertyTweener(SideBarButton, 'BackgroundTransparency', 1, 1, 0, nil, true)
end)
local DropDownImage = Utility.Create'ImageLabel'
{
Name = "DropDownImage";
BackgroundTransparency = 1;
Parent = SideBarButton;
}
AssetManager.LocalImage(DropDownImage,
'rbxasset://textures/ui/Shell/Icons/Dropdown02', {['720'] = UDim2.new(0,29,0,29); ['1080'] = UDim2.new(0,44,0,44);})
DropDownImage.Position = UDim2.new(1, -DropDownImage.Size.X.Offset - 12, 0.5, -DropDownImage.Size.Y.Offset / 2 + 4)
local TitleLabel = Utility.Create'TextLabel'
{
Name = "TitleLabel";
Size = UDim2.new(0, 0, 0, 0);
Position = UDim2.new(0, 18, 0.5, 0);
BackgroundTransparency = 1;
Text = string.upper(sortName);
TextColor3 = GlobalSettings.WhiteTextColor;
TextXAlignment = Enum.TextXAlignment.Left;
Font = GlobalSettings.LightFont;
FontSize = GlobalSettings.HeaderSize;
ZIndex = 2;
Parent = SideBarButton;
}
local GameTitleLabel = Utility.Create'TextLabel'
{
Name = "GameTitleLabel";
Size = UDim2.new(0, 0, 0, 0);
Position = UDim2.new(0, 18, 0, SideBarButton.Position.Y.Offset + SideBarButton.Size.Y.Offset + 550);
BackgroundTransparency = 1;
Text = "";
TextColor3 = GlobalSettings.WhiteTextColor;
TextXAlignment = Enum.TextXAlignment.Left;
Font = GlobalSettings.LightFont;
FontSize = GlobalSettings.HeaderSize;
Parent = GameGenreContainer;
}
local ThumbsUpImage = Utility.Create'ImageLabel'
{
Name = "ThumbsUpImage";
BackgroundTransparency = 1;
ZIndex = 2;
Visible = false;
Parent = GameGenreContainer;
}
local ThumbsDownImage = Utility.Create'ImageLabel'
{
Name = "ThumbsDownImage";
BackgroundTransparency = 1;
ZIndex = 2;
Visible = false;
Parent = GameGenreContainer;
}
AssetManager.LocalImage(ThumbsUpImage,
'rbxasset://textures/ui/Shell/Icons/ThumbsUpIcon', {['720'] = UDim2.new(0,19,0,19); ['1080'] = UDim2.new(0,28,0,28);})
AssetManager.LocalImage(ThumbsDownImage,
'rbxasset://textures/ui/Shell/Icons/ThumbsDownIcon', {['720'] = UDim2.new(0,19,0,19); ['1080'] = UDim2.new(0,28,0,28);})
local VoteWidget = VoteFrameModule(GameGenreContainer,
UDim2.new(0, 60, 0, GameTitleLabel.Position.Y.Offset + 46))
local VoteContainer = VoteWidget:GetContainer()
ThumbsUpImage.Position = UDim2.new(0, VoteContainer.Position.X.Offset - ThumbsUpImage.Size.X.Offset - 10, 0,
VoteContainer.Position.Y.Offset + VoteContainer.Size.Y.Offset - ThumbsUpImage.Size.Y.Offset)
ThumbsDownImage.Position = UDim2.new(0, VoteContainer.Position.X.Offset + VoteContainer.Size.X.Offset + 10, 0,
VoteContainer.Position.Y.Offset)
local SeparatorDot = Utility.Create'ImageLabel'
{
Name = "SeparatorDot";
BackgroundTransparency = 1;
Visible = false;
Parent = GameGenreContainer;
}
AssetManager.LocalImage(SeparatorDot,
'rbxasset://textures/ui/Shell/Icons/SeparatorDot', {['720'] = UDim2.new(0,7,0,7); ['1080'] = UDim2.new(0,10,0,10);})
SeparatorDot.Position = UDim2.new(0, ThumbsDownImage.Position.X.Offset + ThumbsDownImage.Size.X.Offset + 32, 0,
VoteContainer.Position.Y.Offset + (VoteContainer.Size.Y.Offset/2) - (SeparatorDot.Size.Y.Offset/2))
local CreatorIcon = Utility.Create'ImageLabel'
{
Name = "CreatorIcon";
Size = UDim2.new(0, 24, 0, 24);
Position = UDim2.new(0, SeparatorDot.Position.X.Offset + SeparatorDot.Size.X.Offset + 32, 0,
SeparatorDot.Position.Y.Offset + SeparatorDot.Size.Y.Offset/2 - 2 - 10);
BackgroundTransparency = 1;
Image = 'rbxasset://textures/ui/Shell/Icons/RobloxIcon24.png';
Visible = false;
Parent = GameGenreContainer;
}
local CreatorNameLabel = Utility. Create'TextLabel'
{
Name = "CreatorNameLabel";
Size = UDim2.new(0, 0, 0, 0);
Position = UDim2.new(0, CreatorIcon.Position.X.Offset + CreatorIcon.Size.X.Offset + 8, 0,
SeparatorDot.Position.Y.Offset + SeparatorDot.Size.Y.Offset/2 - 2);
BackgroundTransparency = 1;
Font = GlobalSettings.RegularFont;
FontSize = GlobalSettings.DescriptionSize;
TextColor3 = GlobalSettings.LightGreyTextColor;
TextXAlignment = Enum.TextXAlignment.Left;
Text = "";
Parent = GameGenreContainer;
}
local DescriptionTextLabel = Utility.Create'TextLabel'
{
Name = "DescriptionTextLabel";
Size = UDim2.new(0, 850, 0, 56);
Position = UDim2.new(0, GameTitleLabel.Position.X.Offset, 0, VoteContainer.Position.Y.Offset + VoteContainer.Size.Y.Offset + 20);
BackgroundTransparency = 1;
Text = "";
TextColor3 = GlobalSettings.LightGreyTextColor;
TextXAlignment = Enum.TextXAlignment.Left;
TextYAlignment = Enum.TextYAlignment.Top;
Font = GlobalSettings.LightFont;
TextWrapped = true;
FontSize = GlobalSettings.DescriptionSize;
Parent = GameGenreContainer;
}
local PlayButton = Utility.Create'ImageButton'
{
Name = "PlayButton";
Position = UDim2.new(0, 0, 1, -77);
Size = UDim2.new(0, 228, 0, 72);
BackgroundTransparency = 1;
ImageColor3 = GlobalSettings.GreenButtonColor;
Image = 'rbxasset://textures/ui/Shell/Buttons/Generic9ScaleButton@720.png';
ScaleType = Enum.ScaleType.Slice;
SliceCenter = Rect.new(Vector2.new(4, 4), Vector2.new(28, 28));
Parent = GameGenreContainer;
SoundManager:CreateSound('MoveSelection');
ZIndex = 2;
AssetManager.CreateShadow(1);
}
local PlayText = Utility.Create'TextLabel'
{
Name = "PlayText";
Size = UDim2.new(1, 0, 1, 0);
BackgroundTransparency = 1;
Text = string.upper(Strings:LocalizedString("PlayWord"));
Font = GlobalSettings.RegularFont;
FontSize = GlobalSettings.ButtonSize;
TextColor3 = baseButtonTextColor;
ZIndex = 2;
Parent = PlayButton;
}
local FavoriteButton = Utility.Create'ImageButton'
{
Name = "FavoriteButton";
Position = UDim2.new(0, PlayButton.Size.X.Offset + 10, 1, -77);
Size = UDim2.new(0, 228, 0, 72);
BackgroundTransparency = 1;
ImageColor3 = GlobalSettings.GreyButtonColor;
Image = 'rbxasset://textures/ui/Shell/Buttons/Generic9ScaleButton@720.png';
ScaleType = Enum.ScaleType.Slice;
SliceCenter = Rect.new(Vector2.new(4, 4), Vector2.new(28, 28));
ZIndex = 2;
Parent = GameGenreContainer;
SoundManager:CreateSound('MoveSelection');
AssetManager.CreateShadow(1);
}
FavoriteButton.NextSelectionRight = FavoriteButton
local FavoriteText = Utility.Create'TextLabel'
{
Name = "FavoriteText";
Size = UDim2.new(1, 0, 1, 0);
BackgroundTransparency = 1;
Text = string.upper(Strings:LocalizedString("FavoriteWord"));
Font = GlobalSettings.RegularFont;
FontSize = GlobalSettings.ButtonSize;
TextColor3 = baseButtonTextColor;
ZIndex = 2;
Parent = FavoriteButton;
}
local FavoriteStarImage = Utility.Create'ImageLabel'
{
Name = "FavoriteStarImage";
BackgroundTransparency = 1;
Visible = false;
ZIndex = 2;
Parent = FavoriteButton;
}
AssetManager.LocalImage(FavoriteStarImage,
'rbxasset://textures/ui/Shell/Icons/FavoriteStar', {['720'] = UDim2.new(0,21,0,21); ['1080'] = UDim2.new(0,32,0,31);})
FavoriteStarImage.Position = UDim2.new(0, 16, 0.5, -FavoriteStarImage.Size.Y.Offset / 2)
-- Selection Overrides
-- NOTE: This is a fix to prevent unintended selection in the carousel do to the nature of
-- how selection works for a ScrollingFrame.
PlayButton.NextSelectionLeft = PlayButton
FavoriteButton.NextSelectionRight = FavoriteButton
SideBarButton.NextSelectionLeft = SideBarButton
SideBarButton.NextSelectionRight = SideBarButton
--[[ Page Events ]]--
local function toggleFavoriteButton(isFavorited)
if isFavorited == true then
FavoriteStarImage.Visible = true
FavoriteText.Position = UDim2.new(0, FavoriteStarImage.Position.X.Offset + FavoriteStarImage.Size.X.Offset + 12, 0, 0)
FavoriteText.Text = string.upper(Strings:LocalizedString("FavoritedWord"))
FavoriteText.TextXAlignment = Enum.TextXAlignment.Left
elseif isFavorited == false then
FavoriteStarImage.Visible = false
FavoriteText.Position = UDim2.new(0, 0, 0, 0)
FavoriteText.Text = string.upper(Strings:LocalizedString("FavoriteWord"))
FavoriteText.TextXAlignment = Enum.TextXAlignment.Center
end
end
FavoriteButton.SelectionGained:connect(function()
FavoriteButton.ImageColor3 = GlobalSettings.GreySelectedButtonColor
FavoriteText.TextColor3 = selectedButtonTextColor
end)
FavoriteButton.SelectionLost:connect(function()
FavoriteButton.ImageColor3 = GlobalSettings.GreyButtonColor
FavoriteText.TextColor3 = baseButtonTextColor
end)
PlayButton.SelectionGained:connect(function()
PlayButton.ImageColor3 = GlobalSettings.GreenSelectedButtonColor
PlayText.TextColor3 = selectedButtonTextColor
end)
PlayButton.SelectionLost:connect(function()
PlayButton.ImageColor3 = GlobalSettings.GreenButtonColor
PlayText.TextColor3 = baseButtonTextColor
end)
--[[ Content Initialization ]]--
local function setItemsVisible(value)
ThumbsUpImage.Visible = value
ThumbsDownImage.Visible = value
VoteWidget:SetVisible(value)
GameTitleLabel.Visible = value
DescriptionTextLabel.Visible = value
PlayButton.Visible = value
FavoriteButton.Visible = value
SideBarButton.Visible = value
--
SeparatorDot.Visible = value
CreatorIcon.Visible = value
CreatorNameLabel.Visible = value
end
local currentSortCarousel = nil
local currentItemData = nil
local onNewGameSelectedCn = nil
local onNewGameSelectedLateCn = nil
local function setCurrentSortCarousel()
setItemsVisible(false)
toggleFavoriteButton(false)
currentSortCarousel = SortCarousel(UDim2.new(1, 0, 0, 450),
UDim2.new(0, 0, 0, SideBarButton.Position.Y.Offset + SideBarButton.Size.Y.Offset + 56), currentShownCollection, GameGenreContainer)
onNewGameSelectedCn = currentSortCarousel.OnNewGameSelected:connect(function(itemData)
if itemData then
currentItemData = itemData
GameTitleLabel.Text = itemData.Name
DescriptionTextLabel.Text = itemData.Description or ""
CreatorNameLabel.Text = itemData.CreatorName
toggleFavoriteButton(itemData.IsFavorited)
local voteData = itemData.VoteData
if voteData then
local upvotes = voteData.UpVotes
local downvotes = voteData.DownVotes
if upvotes == 0 and downvotes == 0 then
VoteWidget:SetPercentFilled(nil)
else
VoteWidget:SetPercentFilled(upvotes / (upvotes + downvotes))
end
end
setItemsVisible(true)
end
end)
onNewGameSelectedLateCn = currentSortCarousel.OnNewGameSelectedLate:connect(function(description, isFavorited)
toggleFavoriteButton(isFavorited)
DescriptionTextLabel.Text = description or ""
end)
spawn(function()
currentSortCarousel:LoadSortAsync()
if inFocus then
local focusItem = currentSortCarousel:GetItemAt(1)
if focusItem and focusItem:IsDescendantOf(GameGenreContainer) then
GuiService.SelectedCoreObject = focusItem
end
end
end)
end
local function onNewGameSelected(data)
if not data then return end
-- TODO: Update this function when caching is finished
GameTitleLabel.Text = data.Title
CreatorNameLabel.Text = data.CreatorName
local voteData = data.VoteData
if voteData then
local upVotes = voteData.UpVotes
local downVotes = voteData.DownVotes
if upVotes == 0 and downVotes == 0 then
VoteWidget:SetPercentFilled(nil)
else
VoteWidget:SetPercentFilled(upVotes / (upVotes + downVotes))
end
end
DescriptionTextLabel.Text = data.Description or ""
toggleFavoriteButton(data.IsFavorited)
if not data.Description or data.IsFavorited == nil then
spawn(function()
local gameData = GameDataModule:GetGameDataAsync(data.PlaceId)
if gameData then
data.GameData = gameData
data.Description = gameData:GetDescription()
data.IsFavorited = gameData:GetIsFavoritedByUser()
DescriptionTextLabel.Text = data.Description
toggleFavoriteButton(data.IsFavorited)
end
end)
end
setItemsVisible(true)
end
local myCarouselView = nil
local myCarouselController = nil
if isUseNewCarouselInXboxAppEnabled then
myCarouselView = CarouselView()
myCarouselView:SetSize(UDim2.new(0, 1724, 0, 450))
myCarouselView:SetPosition(UDim2.new(0, 0, 0, SideBarButton.Position.Y.Offset + SideBarButton.Size.Y.Offset + 56))
myCarouselView:SetPadding(18)
myCarouselView:SetItemSizePercentOfContainer(2/3)
myCarouselView:SetParent(GameGenreContainer)
myCarouselController = CarouselController(myCarouselView)
end
local function initializeCarouselView()
setItemsVisible(false)
toggleFavoriteButton(false)
myCarouselView:SetParent(nil)
spawn(function()
local loader = LoadingWidget(
{ Parent = GameGenreContainer }, {
function()
if myCarouselController then
myCarouselController:InitializeAsync(currentShownCollection)
end
end
})
loader:AwaitFinished()
loader:Cleanup()
loader = nil
myCarouselView:SetParent(GameGenreContainer)
if this:IsFocused() and myCarouselView then
GuiService.SelectedCoreObject = myCarouselView:GetFocusItem()
end
end)
end
local function canShowFavoritesAsync(collection)
local favoritesPage = collection:GetSortAsync(0, 1)
return favoritesPage and favoritesPage.Count > 0
end
local function canShowRecentAsync(collection)
local recentPage = collection:GetSortAsync(0, 1)
return recentPage and recentPage.Count > 0
end
local function canShowMyPlacesAsync(collection)
local userPlacesPage = collection:GetSortAsync(0, 1)
return userPlacesPage and userPlacesPage.Count > 0
end
local function getSideBarList()
local sideBarList = {}
local favoriteCollection = GameCollection:GetUserFavorites()
if canShowFavoritesAsync(favoriteCollection) then
table.insert(sideBarList,
{ Name = string.upper(Strings:LocalizedString("FavoritesSortTitle")), Collection = favoriteCollection })
end
local recentCollection = GameCollection:GetUserRecent()
if canShowRecentAsync(recentCollection) then
table.insert(sideBarList,
{ Name = string.upper(Strings:LocalizedString("RecentlyPlayedSortTitle")), Collection = recentCollection })
end
table.insert(sideBarList, { Name = string.upper(Strings:LocalizedString("FeaturedTitle")), Collection = GameCollection:GetSort(GameCollection.DefaultSortId.Featured) })
table.insert(sideBarList, { Name = string.upper(Strings:LocalizedString("PopularTitle")), Collection = GameCollection:GetSort(GameCollection.DefaultSortId.Popular) })
table.insert(sideBarList, { Name = string.upper(Strings:LocalizedString("TopRatedTitle")), Collection = GameCollection:GetSort(GameCollection.DefaultSortId.TopRated) })
table.insert(sideBarList, { Name = string.upper(Strings:LocalizedString("TopEarningTitle")), Collection = GameCollection:GetSort(GameCollection.DefaultSortId.TopEarning) })
local userPlacesCollection = GameCollection:GetUserPlaces()
if canShowMyPlacesAsync(userPlacesCollection) then
table.insert(sideBarList,
{ Name = string.upper(Strings:LocalizedString("PlayMyPlaceMoreGamesTitle")), Collection = userPlacesCollection })
end
return sideBarList
end
local function createSideBarAsync()
local sideBar = SideBarModule()
local sideBarList = getSideBarList()
local collectionToIndex = {}
for i = 1, #sideBarList do
local sort = sideBarList[i]
collectionToIndex[sort.Collection] = i
sideBar:AddItem(sort.Name, function()
if sort.Collection ~= currentShownCollection then
currentShownCollection = sort.Collection
TitleLabel.Text = sort.Name
if isUseNewCarouselInXboxAppEnabled then
initializeCarouselView()
else
currentSortCarousel:Destroy()
setCurrentSortCarousel()
end
if this.TransitionTweens then
ScreenManager:DefaultCancelFade(this.TransitionTweens)
this.TransitionTweens = ScreenManager:DefaultFadeIn(GameGenreContainer)
ScreenManager:PlayDefaultOpenSound()
end
end
end)
end
sideBarSelectedCn = Utility.DisconnectEvent(sideBarSelectedCn)
sideBarSelectedCn = SideBarButton.MouseButton1Click:connect(function()
sideBar:SetSelectedObject(collectionToIndex[currentShownCollection])
ScreenManager:OpenScreen(sideBar, false)
end)
end
--[[ Input Events ]]--
PlayButton.MouseButton1Click:connect(function()
SoundManager:Play('ButtonPress')
local gameData = nil
if isUseNewCarouselInXboxAppEnabled then
if myCarouselController then
gameData = myCarouselController:GetCurrentFocusGameData()
end
else
gameData = currentSortCarousel:GetCurrentSelectedGameData()
end
if gameData then
local placeId = gameData.PlaceId
local creatorUserId = gameData.CreatorUserId
if canJoinGame and returnedFromGame then
canJoinGame = false
GameJoinModule:StartGame(GameJoinModule.JoinType.Normal, placeId, creatorUserId)
canJoinGame = true
end
end
end)
FavoriteButton.MouseButton1Click:connect(function()
SoundManager:Play('ButtonPress')
local gameData = nil
if isUseNewCarouselInXboxAppEnabled then
if myCarouselController then
gameData = myCarouselController:GetCurrentFocusGameData()
end
else
gameData = currentItemData
end
if gameData and gameData.GameData then
local success, reason = gameData.GameData:PostFavoriteAsync()
if success then
gameData.IsFavorited = gameData.GameData:GetIsFavoritedByUser()
toggleFavoriteButton(gameData.IsFavorited)
elseif reason then
local err = Errors.Favorite[reason]
ScreenManager:OpenScreen(ErrorOverlayModule(err), false)
end
end
end)
--[[ Public API ]]--
function this:SetPosition(newPosition)
GameGenreContainer.Position = newPosition
end
function this:SetParent(newParent)
GameGenreContainer.Parent = newParent
end
function this:GetName()
return TitleLabel.Text
end
function this:Show()
GameGenreContainer.Visible = true
local prevScreen = ScreenManager:GetScreenBelow(self)
if prevScreen and prevScreen.GetName then
BackText.Text = prevScreen:GetName()
else
BackText.Text = ''
end
ScreenManager:DefaultCancelFade(this.TransitionTweens)
self.TransitionTweens = ScreenManager:DefaultFadeIn(GameGenreContainer)
ScreenManager:PlayDefaultOpenSound()
end
function this:Hide()
GameGenreContainer.Visible = false
ScreenManager:DefaultCancelFade(self.TransitionTweens)
self.TransitionTweens = nil
end
function this:Destroy()
if onNewGameSelectedCn then
onNewGameSelectedCn:disconnect()
onNewGameSelectedCn = nil
end
if not isUseNewCarouselInXboxAppEnabled then
currentSortCarousel:Destroy()
end
VoteWidget:Destroy()
GameGenreContainer:Destroy()
end
function this:IsFocused()
return inFocus
end
function this:Focus()
inFocus = true
if isUseNewCarouselInXboxAppEnabled then
local selection = myCarouselView:GetFocusItem() or SideBarButton
GuiService.SelectedCoreObject = selection
else
if self.SavedSelectedObject and self.SavedSelectedObject:IsDescendantOf(GameGenreContainer) then
GuiService.SelectedCoreObject = self.SavedSelectedObject
end
end
ContextActionService:BindCoreAction("ReturnFromGameGenreScreen",
function(actionName, inputState, inputObject)
if inputState == Enum.UserInputState.End then
ScreenManager:CloseCurrent()
self:Destroy()
end
end,
false,
Enum.KeyCode.ButtonB)
if PlatformService then
dataModelViewChangedCn = PlatformService.ViewChanged:connect(function(viewType)
if viewType == 0 then
returnedFromGame = false
wait(1)
returnedFromGame = true
end
end)
end
if isUseNewCarouselInXboxAppEnabled then
if myCarouselController then
newGameSelectedCn = myCarouselController.NewItemSelected:connect(onNewGameSelected)
onNewGameSelected(myCarouselController:GetCurrentFocusGameData())
myCarouselController:Connect()
end
end
spawn(function()
createSideBarAsync()
end)
end
function this:RemoveFocus()
inFocus = false
local selectedObject = GuiService.SelectedCoreObject
if selectedObject and selectedObject:IsDescendantOf(GameGenreContainer) then
self.SavedSelectedObject = selectedObject
GuiService.SelectedCoreObject = nil
end
ContextActionService:UnbindCoreAction("ReturnFromGameGenreScreen")
dataModelViewChangedCn = Utility.DisconnectEvent(dataModelViewChangedCn)
newGameSelectedCn = Utility.DisconnectEvent(newGameSelectedCn)
sideBarSelectedCn = Utility.DisconnectEvent(sideBarSelectedCn)
if isUseNewCarouselInXboxAppEnabled then
if myCarouselController then
myCarouselController:Disconnect()
end
end
end
if isUseNewCarouselInXboxAppEnabled then
initializeCarouselView()
else
setCurrentSortCarousel()
end
return this
end
return CreateGameGenre