mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 05:07:48 +00:00
158 lines
4.7 KiB
Lua
158 lines
4.7 KiB
Lua
--[[
|
|
// FriendPresenceItem.lua
|
|
// Creates a friend activity gui item to be used with a ScrollingGrid
|
|
// for friends social status
|
|
]]
|
|
local CoreGui = Game:GetService("CoreGui")
|
|
local GuiRoot = CoreGui:FindFirstChild("RobloxGui")
|
|
local Modules = GuiRoot:FindFirstChild("Modules")
|
|
|
|
local AssetManager = require(Modules:FindFirstChild('AssetManager'))
|
|
local GlobalSettings = require(Modules:FindFirstChild('GlobalSettings'))
|
|
local Utility = require(Modules:FindFirstChild('Utility'))
|
|
local ThumbnailLoader = require(Modules:FindFirstChild('ThumbnailLoader'))
|
|
local SoundManager = require(Modules:FindFirstChild('SoundManager'))
|
|
|
|
local FAIL_IMG = 'rbxasset://textures/ui/Shell/Icons/DefaultProfileIcon.png'
|
|
|
|
local function FriendPresenceItem(size, idStr)
|
|
local this = {}
|
|
|
|
local TEXT_OFFSET = 12
|
|
|
|
local container = Utility.Create'ImageButton'
|
|
{
|
|
Name = idStr;
|
|
Size = size;
|
|
Position = UDim2.new(0, 0, 0, 0);
|
|
BackgroundColor3 = GlobalSettings.WhiteTextColor;
|
|
BorderSizePixel = 0;
|
|
BackgroundTransparency = 1;
|
|
AutoButtonColor = false;
|
|
|
|
SoundManager:CreateSound('MoveSelection');
|
|
}
|
|
container.SelectionGained:connect(function()
|
|
local startTween = Utility.PropertyTweener(container, "BackgroundTransparency", 1, GlobalSettings.AvatarBoxBackgroundSelectedTransparency, 0,
|
|
Utility.EaseInOutQuad, true, nil)
|
|
end)
|
|
container.SelectionLost:connect(function()
|
|
container.BackgroundTransparency = 1
|
|
end)
|
|
local avatarImage = Utility.Create'ImageLabel'
|
|
{
|
|
Name = "AvatarImage";
|
|
Image = '';
|
|
Size = UDim2.new(0, 104, 0, 104);
|
|
Position = UDim2.new(0, 0, 0, 0);
|
|
BackgroundTransparency = 0;
|
|
BorderSizePixel = 0;
|
|
BackgroundColor3 = GlobalSettings.CharacterBackgroundColor;
|
|
ZIndex = 2;
|
|
Parent = container;
|
|
AssetManager.CreateShadow(1);
|
|
}
|
|
local nameLabel = Utility.Create'TextLabel'
|
|
{
|
|
Name = "NameLabel";
|
|
Text = "";
|
|
Size = UDim2.new(0, 0, 0, 0);
|
|
Position = UDim2.new(0, avatarImage.Size.X.Offset + TEXT_OFFSET, 0, 32);
|
|
TextXAlignment = Enum.TextXAlignment.Left;
|
|
TextColor3 = GlobalSettings.WhiteTextColor;
|
|
Font = GlobalSettings.RegularFont;
|
|
FontSize = GlobalSettings.TitleSize;
|
|
BackgroundTransparency = 1;
|
|
Parent = container;
|
|
}
|
|
local presenceStatusImage = Utility.Create'ImageLabel'
|
|
{
|
|
Name = "PresenceStatusImage";
|
|
BackgroundTransparency = 1;
|
|
Parent = container;
|
|
}
|
|
AssetManager.LocalImage(presenceStatusImage,
|
|
'rbxasset://textures/ui/Shell/Icons/OnlineStatusIcon', {['720'] = UDim2.new(0,13,0,13); ['1080'] = UDim2.new(0,19,0,20);})
|
|
presenceStatusImage.Position = UDim2.new(0, nameLabel.Position.X.Offset, 0,
|
|
nameLabel.Position.Y.Offset + 36 - (presenceStatusImage.Size.Y.Offset/2) + 1)
|
|
|
|
local presenceLabel = Utility.Create'TextLabel'
|
|
{
|
|
Name = "PresenceLabel";
|
|
Text = "";
|
|
Size = UDim2.new(0,
|
|
container.Size.X.Offset - presenceStatusImage.Position.X.Offset - presenceStatusImage.Size.X.Offset - 12, 0, 32);
|
|
Position = UDim2.new(0, presenceStatusImage.Position.X.Offset + presenceStatusImage.Size.X.Offset + 12, 0,
|
|
presenceStatusImage.Position.Y.Offset + presenceStatusImage.Size.Y.Offset / 2 - 16);
|
|
TextXAlignment = Enum.TextXAlignment.Left;
|
|
TextColor3 = GlobalSettings.LightGreyTextColor;
|
|
Font = GlobalSettings.RegularFont;
|
|
FontSize = GlobalSettings.DescriptionSize;
|
|
BackgroundTransparency = 1;
|
|
ClipsDescendants = true;
|
|
Parent = container;
|
|
}
|
|
local lineBreak = Utility.Create'Frame'
|
|
{
|
|
Name = "Break";
|
|
Size = UDim2.new(1, -avatarImage.Size.X.Offset - TEXT_OFFSET, 0, 2);
|
|
Position = UDim2.new(0, avatarImage.Size.X.Offset + TEXT_OFFSET, 1, -2);
|
|
BorderSizePixel = 0;
|
|
BackgroundColor3 = GlobalSettings.LineBreakColor;
|
|
Parent = container;
|
|
}
|
|
|
|
local failImage = Utility.Create'ImageLabel'
|
|
{
|
|
Name = "FailImage";
|
|
Size = UDim2.new(0.5, 0, 0.5, 0);
|
|
Position = UDim2.new(0.25, 0, 0.25, 0);
|
|
BackgroundTransparency = 1;
|
|
Image = FAIL_IMG;
|
|
ZIndex = 2;
|
|
}
|
|
|
|
function this:GetContainer()
|
|
return container
|
|
end
|
|
|
|
function this:SetAvatarImage(userId)
|
|
local loader = ThumbnailLoader:Create(avatarImage, userId,
|
|
ThumbnailLoader.Sizes.Small, ThumbnailLoader.AssetType.Avatar)
|
|
spawn(function()
|
|
if not loader:LoadAsync(true, false) then
|
|
failImage.Parent = avatarImage
|
|
else
|
|
failImage.Parent = nil
|
|
end
|
|
end)
|
|
end
|
|
|
|
function this:GetNameText()
|
|
return nameLabel.Text
|
|
end
|
|
|
|
function this:SetNameText(name)
|
|
nameLabel.Text = name
|
|
end
|
|
|
|
function this:SetPresence(str, isInRobloxGame)
|
|
presenceLabel.Text = str
|
|
presenceStatusImage.ImageColor3 = isInRobloxGame and GlobalSettings.GreenTextColor
|
|
or GlobalSettings.GreySelectedButtonColor
|
|
end
|
|
|
|
function this:SetLastActivityText(str)
|
|
lastActivityLabel.Text = str
|
|
end
|
|
|
|
function this:Destroy()
|
|
container:Destroy()
|
|
this = nil
|
|
end
|
|
|
|
return this
|
|
end
|
|
|
|
return FriendPresenceItem
|