add gs
This commit is contained in:
@@ -0,0 +1,254 @@
|
||||
--[[
|
||||
// AvatarTile.lua
|
||||
|
||||
// Created by Kip Turner
|
||||
// Copyright Roblox 2015
|
||||
]]
|
||||
|
||||
local TextService = game:GetService('TextService')
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
||||
local Modules = GuiRoot:FindFirstChild("Modules")
|
||||
local ShellModules = Modules:FindFirstChild("Shell")
|
||||
|
||||
local Utility = require(ShellModules:FindFirstChild('Utility'))
|
||||
local Http = require(ShellModules:FindFirstChild('Http'))
|
||||
local GlobalSettings = require(ShellModules:FindFirstChild('GlobalSettings'))
|
||||
|
||||
local Analytics = require(ShellModules:FindFirstChild('Analytics'))
|
||||
local Errors = require(ShellModules:FindFirstChild('Errors'))
|
||||
local SoundManager = require(ShellModules:FindFirstChild('SoundManager'))
|
||||
local ScreenManager = require(ShellModules:FindFirstChild('ScreenManager'))
|
||||
local ErrorOverlayModule = require(ShellModules:FindFirstChild('ErrorOverlay'))
|
||||
local PurchasePackagePrompt = require(ShellModules:FindFirstChild('PurchasePackagePrompt'))
|
||||
|
||||
local BaseTile = require(ShellModules:FindFirstChild('BaseTile'))
|
||||
local Strings = require(ShellModules:FindFirstChild('LocalizedStrings'))
|
||||
|
||||
local function createAvatarInfoContainer(packageInfo)
|
||||
local this = BaseTile()
|
||||
local focused = false
|
||||
|
||||
local packageName = packageInfo:GetFullName()
|
||||
|
||||
local function wearPackageAsync()
|
||||
if packageInfo:IsOwned() and not packageInfo:IsWearing() then
|
||||
|
||||
local result = packageInfo:WearAsync()
|
||||
|
||||
if result and result['success'] == true then
|
||||
this:UpdateEquipButton()
|
||||
else
|
||||
local err = Errors.PackageEquip['Default']
|
||||
ScreenManager:OpenScreen(ErrorOverlayModule(err), false)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
local function buyPackageAsync()
|
||||
local newPurchasePrompt = PurchasePackagePrompt(packageInfo)
|
||||
ScreenManager:OpenScreen(newPurchasePrompt, false)
|
||||
newPurchasePrompt:FadeInBackground()
|
||||
spawn(function()
|
||||
local didPurchase = newPurchasePrompt:ResultAsync()
|
||||
if didPurchase then
|
||||
SoundManager:Play('PurchaseSuccess')
|
||||
wearPackageAsync()
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local PriceText = Utility.Create'TextLabel'
|
||||
{
|
||||
Name = 'PriceText';
|
||||
Text = '';
|
||||
Size = UDim2.new(1, 0, 0, 36);
|
||||
Position = UDim2.new(0, 0, 0, 0);
|
||||
TextColor3 = GlobalSettings.BlackTextColor;
|
||||
Font = GlobalSettings.RegularFont;
|
||||
FontSize = GlobalSettings.DescriptionSize;
|
||||
BorderSizePixel = 0;
|
||||
BackgroundColor3 = GlobalSettings.PriceLabelColor;
|
||||
ZIndex = 2;
|
||||
Visible = false;
|
||||
Parent = this.AvatarItemContainer;
|
||||
};
|
||||
|
||||
local PromoText = Utility.Create'TextLabel'
|
||||
{
|
||||
Name = 'PromoText';
|
||||
Text = '';
|
||||
Size = UDim2.new(1, 0, 0, 36);
|
||||
Position = UDim2.new(0, 0, 0, 0);
|
||||
TextColor3 = GlobalSettings.WhiteTextColor;
|
||||
Font = GlobalSettings.RegularFont;
|
||||
FontSize = GlobalSettings.DescriptionSize;
|
||||
BorderSizePixel = 0;
|
||||
BackgroundColor3 = GlobalSettings.PromoLabelColor;
|
||||
ZIndex = 2;
|
||||
Visible = false;
|
||||
Parent = this.AvatarItemContainer;
|
||||
};
|
||||
|
||||
function this:UpdatePriceText()
|
||||
local newText = ""
|
||||
local price = packageInfo:GetRobuxPrice()
|
||||
if price == 0 then
|
||||
newText = Strings:LocalizedString('FreeWord')
|
||||
elseif price then
|
||||
newText = "R$ " .. Utility.FormatNumberString(price)
|
||||
end
|
||||
|
||||
PriceText.Text = newText
|
||||
local priceTextSize = TextService:GetTextSize(PriceText.Text, Utility.ConvertFontSizeEnumToInt(PriceText.FontSize), PriceText.Font, Vector2.new())
|
||||
PriceText.Size = UDim2.new(0, priceTextSize.X + 28, 0, 36)
|
||||
PriceText.AnchorPoint = Vector2.new(1, 0)
|
||||
PriceText.Position = UDim2.new(1, -6, 0, 6)
|
||||
PriceText.Visible = price ~= nil and not packageInfo:IsOwned()
|
||||
end
|
||||
|
||||
function this:UpdatePromoText()
|
||||
if not packageInfo:IsOwned() then
|
||||
local saleIdStr = Utility.GetFastVariable("XboxSaleAvatarPackageIds")
|
||||
if type(saleIdStr) == "string" and saleIdStr ~= '' then
|
||||
for saleId in string.gmatch(saleIdStr, '([^;]+)') do
|
||||
if tonumber(saleId) ~= nil and tonumber(saleId) == tonumber(packageInfo:GetAssetId()) then --If the package is on sale
|
||||
PromoText.Text = "SALE!"
|
||||
local promoTextSize = TextService:GetTextSize(PromoText.Text, Utility.ConvertFontSizeEnumToInt(PromoText.FontSize), PromoText.Font, Vector2.new())
|
||||
PromoText.Size = UDim2.new(0, promoTextSize.X + 28, 0, 36)
|
||||
PromoText.AnchorPoint = Vector2.new(1, 0)
|
||||
PromoText.Position = UDim2.new(1, -6, 0, 42)
|
||||
PromoText.Visible = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
PromoText.Visible = false
|
||||
end
|
||||
end
|
||||
|
||||
if packageInfo:GetAssetId() then
|
||||
this:SetImage(Http.GetThumbnailUrlForAsset(packageInfo:GetAssetId()))
|
||||
else
|
||||
--TODO: show a no package image?
|
||||
end
|
||||
|
||||
|
||||
this:ColorizeImage(packageInfo:IsOwned() and 1 or 0, 0)
|
||||
this:SetPopupText(packageInfo:GetName())
|
||||
|
||||
function this:GetAssetId()
|
||||
return packageInfo:GetAssetId()
|
||||
end
|
||||
|
||||
function this:GetPackageInfo()
|
||||
return packageInfo
|
||||
end
|
||||
|
||||
function this:UpdateOwnership()
|
||||
local ownsAsset = packageInfo:IsOwned()
|
||||
self:SetActive(ownsAsset)
|
||||
self:ColorizeImage(ownsAsset and 1 or 0, 0)
|
||||
self:UpdateEquipButton()
|
||||
self:UpdatePriceText()
|
||||
--Added for promo label
|
||||
self:UpdatePromoText()
|
||||
end
|
||||
|
||||
function this:UpdateEquipButton()
|
||||
self.EquippedCheckmark.Visible = packageInfo:IsWearing()
|
||||
end
|
||||
|
||||
local selectDebounce = false
|
||||
function this:Select()
|
||||
if selectDebounce then return false end
|
||||
local result = false
|
||||
if packageInfo:IsOwned() and not packageInfo:IsWearing() then
|
||||
selectDebounce = true
|
||||
spawn(function()
|
||||
wearPackageAsync()
|
||||
selectDebounce = false
|
||||
end)
|
||||
result = true
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function this:OnClick()
|
||||
buyPackageAsync()
|
||||
end
|
||||
|
||||
local isWearingConn = nil
|
||||
local ownershipChangedCn = nil
|
||||
local baseShow = this.Show
|
||||
function this:Show()
|
||||
baseShow(self)
|
||||
Utility.DisconnectEvent(isWearingConn)
|
||||
packageInfo.IsWearingChanged:connect(function()self:UpdateEquipButton() end)
|
||||
Utility.DisconnectEvent(ownershipChangedCn)
|
||||
ownershipChangedCn = packageInfo.OwnershipChanged:connect(function()
|
||||
self:UpdateOwnership()
|
||||
end)
|
||||
self:UpdateEquipButton()
|
||||
|
||||
self:UpdateOwnership()
|
||||
end
|
||||
|
||||
local baseHide = this.Hide
|
||||
function this:Hide()
|
||||
baseHide(self)
|
||||
isWearingConn = Utility.DisconnectEvent(isWearingConn)
|
||||
ownershipChangedCn = Utility.DisconnectEvent(ownershipChangedCn)
|
||||
end
|
||||
|
||||
local baseFocus = this.Focus
|
||||
local avatarItemClickConn = nil
|
||||
|
||||
function this:GetAnalyticsInfo()
|
||||
return
|
||||
{
|
||||
[Analytics.WidgetNames('WidgetId')] = Analytics.WidgetNames('AvatarTileId');
|
||||
AssetId = packageInfo:GetAssetId();
|
||||
IsOwned = packageInfo:IsOwned();
|
||||
}
|
||||
end
|
||||
|
||||
function this:Focus()
|
||||
baseFocus(self)
|
||||
focused = true
|
||||
|
||||
Utility.DisconnectEvent(avatarItemClickConn)
|
||||
avatarItemClickConn = self.AvatarItemContainer.MouseButton1Click:connect(function()
|
||||
self:OnClick()
|
||||
end)
|
||||
|
||||
self:UpdateEquipButton()
|
||||
|
||||
spawn(function()
|
||||
wait(0.17)
|
||||
if focused then
|
||||
if not packageInfo:IsOwned() then
|
||||
self:ColorizeImage(1)
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
local baseRemoveFocus = this.RemoveFocus
|
||||
function this:RemoveFocus()
|
||||
baseRemoveFocus(self)
|
||||
focused = false
|
||||
avatarItemClickConn = Utility.DisconnectEvent(avatarItemClickConn)
|
||||
|
||||
-- Decolorize unowned packages
|
||||
if not packageInfo:IsOwned() then
|
||||
self:ColorizeImage(0)
|
||||
end
|
||||
end
|
||||
|
||||
return this
|
||||
end
|
||||
|
||||
return createAvatarInfoContainer
|
||||
Reference in New Issue
Block a user