mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 05:07:48 +00:00
216 lines
5.8 KiB
Lua
216 lines
5.8 KiB
Lua
--[[
|
|
// AvatarTile.lua
|
|
|
|
// Created by Kip Turner
|
|
// Copyright Roblox 2015
|
|
]]
|
|
|
|
|
|
|
|
local TextService = game:GetService('TextService')
|
|
|
|
local ContextActionService = game:GetService("ContextActionService")
|
|
local CoreGui = game:GetService("CoreGui")
|
|
local ContentProvider = game:GetService("ContentProvider")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
|
|
|
|
local Utility = require(Modules:FindFirstChild('Utility'))
|
|
local Http = require(Modules:FindFirstChild('Http'))
|
|
local GlobalSettings = require(Modules:FindFirstChild('GlobalSettings'))
|
|
|
|
local Errors = require(Modules:FindFirstChild('Errors'))
|
|
local SoundManager = require(Modules:FindFirstChild('SoundManager'))
|
|
local ScreenManager = require(Modules:FindFirstChild('ScreenManager'))
|
|
local AssetManager = require(Modules:FindFirstChild('AssetManager'))
|
|
local ErrorOverlayModule = require(Modules:FindFirstChild('ErrorOverlay'))
|
|
local PopupText = require(Modules:FindFirstChild('PopupText'))
|
|
local PurchasePackagePrompt = require(Modules:FindFirstChild('PurchasePackagePrompt'))
|
|
|
|
local BaseTile = require(Modules:FindFirstChild('BaseTile'))
|
|
local Strings = require(Modules:FindFirstChild('LocalizedStrings'))
|
|
|
|
local ACTIVE_AVATAR_BACKGROUND_COLOR = Color3.new(45/255, 96/255, 128/255)
|
|
local INACTIVE_AVATAR_BACKGROUND_COLOR = Color3.new(106/255, 120/255, 129/255)
|
|
|
|
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)
|
|
newPurchasePrompt:SetParent(GuiRoot)
|
|
newPurchasePrompt:FadeInBackground()
|
|
ScreenManager:OpenScreen(newPurchasePrompt, false)
|
|
spawn(function()
|
|
local didPurchase = newPurchasePrompt:ResultAsync()
|
|
-- print("Buy Package Result:" , didPurchase , "ownsAsset:" , packageInfo:IsOwned())
|
|
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;
|
|
};
|
|
|
|
function this:UpdatePriceText()
|
|
local newText = ""
|
|
local price = packageInfo:GetRobuxPrice()
|
|
if price == 0 then
|
|
newText = Strings:LocalizedString('FreeWord'):upper()
|
|
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)
|
|
Utility.CalculateAnchor(PriceText, UDim2.new(1,-6, 0, 6), Utility.Enum.Anchor.TopRight)
|
|
PriceText.Visible = price ~= nil and not packageInfo:IsOwned()
|
|
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()
|
|
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: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
|