add gs
This commit is contained in:
@@ -0,0 +1,172 @@
|
||||
local CoreGui = game:GetService("CoreGui")
|
||||
|
||||
local Modules = CoreGui.RobloxGui.Modules
|
||||
local Common = Modules.Common
|
||||
local LuaChat = Modules.LuaChat
|
||||
|
||||
local Constants = require(LuaChat.Constants)
|
||||
local Create = require(LuaChat.Create)
|
||||
local HeadshotLoader = require(LuaChat.HeadshotLoader)
|
||||
local Signal = require(Common.Signal)
|
||||
local getInputEvent = require(LuaChat.Utils.getInputEvent)
|
||||
|
||||
local FFlagLuaChatToSplitRbxConnections = settings():GetFFlag("LuaChatToSplitRbxConnections")
|
||||
local FFlagLuaChatReplacePresenceIndicatorImages = settings():GetFFlag("LuaChatReplacePresenceIndicatorImages")
|
||||
|
||||
local OVERLAY_IMAGE_BIG = "rbxasset://textures/ui/LuaChat/graphic/gr-profile-border-48x48.png"
|
||||
local OVERLAY_IMAGE_SMALL = "rbxasset://textures/ui/LuaChat/graphic/gr-profile-border-36x36.png"
|
||||
local PRESENCE_DEFAULT_IMAGE = "rbxasset://textures/ui/LuaChat/graphic/indicator-background.png"
|
||||
|
||||
local UserThumbnail = {}
|
||||
|
||||
UserThumbnail.__index = UserThumbnail
|
||||
|
||||
function UserThumbnail.new(appState, userId, small)
|
||||
local self = {}
|
||||
self.connections = {}
|
||||
if FFlagLuaChatToSplitRbxConnections then
|
||||
self.rbx_connections = {}
|
||||
end
|
||||
self.appState = appState
|
||||
self.userId = userId
|
||||
self.clicked = Signal.new()
|
||||
|
||||
local size = small and 36 or 48
|
||||
local overlayImage = small and OVERLAY_IMAGE_SMALL or OVERLAY_IMAGE_BIG
|
||||
|
||||
if FFlagLuaChatReplacePresenceIndicatorImages then
|
||||
self.presenceIndicatorSize = small and 12 or 14
|
||||
self.presenceIndicatorSizeKey = Constants:GetPresenceIndicatorSizeKey(self.presenceIndicatorSize)
|
||||
end
|
||||
|
||||
self.headshot = Create.new "ImageLabel" {
|
||||
Name = "Avatar",
|
||||
Image = "",
|
||||
Size = UDim2.new(1, 0, 1, 0),
|
||||
Position = UDim2.new(0, 0, 0, 0),
|
||||
BackgroundTransparency = 1,
|
||||
}
|
||||
|
||||
local mask = Create.new "ImageLabel" {
|
||||
Name = "Overlay",
|
||||
Image = overlayImage,
|
||||
Size = UDim2.new(1, 0, 1, 0),
|
||||
BackgroundTransparency = 1,
|
||||
}
|
||||
if FFlagLuaChatReplacePresenceIndicatorImages then
|
||||
self.pIndicatorBg = Create.new "ImageLabel" {
|
||||
Name = "Presence",
|
||||
Size = UDim2.new(0, self.presenceIndicatorSize, 0, self.presenceIndicatorSize),
|
||||
BackgroundTransparency = 1,
|
||||
Image = PRESENCE_DEFAULT_IMAGE,
|
||||
Position = UDim2.new(1, -self.presenceIndicatorSize, 1, -self.presenceIndicatorSize),
|
||||
Visible = false,
|
||||
}
|
||||
else
|
||||
self.pIndicatorBg = Create.new "ImageLabel" {
|
||||
Name = "Presence",
|
||||
Size = UDim2.new(0, 14, 0, 14),
|
||||
BackgroundTransparency = 1,
|
||||
Image = PRESENCE_DEFAULT_IMAGE,
|
||||
Position = UDim2.new(1, -14, 1, -14),
|
||||
Visible = false,
|
||||
}
|
||||
end
|
||||
self.rbx = Create.new "ImageButton" {
|
||||
Name = "UserThumbnail",
|
||||
BackgroundTransparency = 1,
|
||||
ImageTransparency = 1,
|
||||
Image = "",
|
||||
Size = UDim2.new(0, size, 0, size),
|
||||
AutoButtonColor = false,
|
||||
|
||||
self.headshot,
|
||||
mask,
|
||||
self.pIndicatorBg,
|
||||
}
|
||||
|
||||
setmetatable(self, UserThumbnail)
|
||||
|
||||
self:Update()
|
||||
|
||||
self.rbx.AncestryChanged:Connect(function(rbx, parent)
|
||||
if rbx == self.rbx and parent == nil then
|
||||
self:Destruct()
|
||||
end
|
||||
end)
|
||||
|
||||
do
|
||||
local connection = appState.store.changed:connect(function(state, oldState)
|
||||
if state.Users == oldState.Users then
|
||||
return
|
||||
end
|
||||
|
||||
if state.Users[userId] == oldState.Users[userId] then
|
||||
return
|
||||
end
|
||||
|
||||
self:Update()
|
||||
end)
|
||||
table.insert(self.connections, connection)
|
||||
end
|
||||
|
||||
local rbxConnectionList = self.connections
|
||||
if FFlagLuaChatToSplitRbxConnections then
|
||||
rbxConnectionList = self.rbx_connections
|
||||
end
|
||||
table.insert(rbxConnectionList,
|
||||
getInputEvent(self.rbx):Connect(function()
|
||||
self.clicked:fire(self.user)
|
||||
end)
|
||||
)
|
||||
|
||||
return self
|
||||
end
|
||||
|
||||
function UserThumbnail:Destruct()
|
||||
for _, connection in pairs(self.connections) do
|
||||
connection:disconnect()
|
||||
end
|
||||
self.connections = {}
|
||||
|
||||
if FFlagLuaChatToSplitRbxConnections then
|
||||
for _, connection in pairs(self.rbx_connections) do
|
||||
connection:Disconnect()
|
||||
end
|
||||
self.rbx_connections = {}
|
||||
end
|
||||
|
||||
self.rbx:Destroy()
|
||||
end
|
||||
|
||||
function UserThumbnail:Update()
|
||||
local user = self.appState.store:getState().Users[self.userId]
|
||||
|
||||
if not user then
|
||||
return
|
||||
end
|
||||
|
||||
if user == self.user then
|
||||
return
|
||||
end
|
||||
|
||||
self.user = user
|
||||
|
||||
HeadshotLoader:Load(self.headshot, self.userId)
|
||||
|
||||
local presenceImage
|
||||
if FFlagLuaChatReplacePresenceIndicatorImages then
|
||||
presenceImage = Constants.PresenceIndicatorImagesBySize[self.presenceIndicatorSizeKey][user.presence]
|
||||
else
|
||||
presenceImage = Constants.PresenceIndicatorImages[user.presence]
|
||||
end
|
||||
|
||||
if presenceImage then
|
||||
self.pIndicatorBg.Visible = true
|
||||
self.pIndicatorBg.Image = presenceImage
|
||||
else
|
||||
self.pIndicatorBg.Visible = false
|
||||
end
|
||||
end
|
||||
|
||||
return UserThumbnail
|
||||
Reference in New Issue
Block a user