How to gradient loop like this one

Details shown in image.


the items are stored in a table like this: {Item1, Item2, etc}

This is not about cheating. I just want to know more about GUIs

1 Like

There’s probably an almost invisible frame with an animating gradient on top of the UI. The reason the effect appears more on text is because the default color of said text is white, meaning it will “absorb” more of the gradient that is on top of it despite the transparency. Other UI elements on the other hand may not change that much due to being darker.

Basically there’re not multiple gradients for each piece of text, this is one huge gradient.

it look like mixing colors, but I am not sure how to set each of the textcolor3 to its specific color without it being all the same one.

Each text label doesn’t have a specific color, its a big almost invisible frame on top of white labels. The reason you think each label has its own color is because the gradient is scaled so much that it becomes impossible to notice.

image

TextLinearGradient.rbxm (1,4 КБ)

what if I don’t want to use index to determine the color, because the index may not be the same every time (cuz those are auto generated), and the Y might be different, like some are higher, some are lower

or maybe change it I think

local reverse = true
local step = 0
local function t()
    if step >= 1 then
        reverse = not reverse
        step = 0
    end
    local rlpg = reverse and 1 - step or step
    local color = ThemeService:GetColorValue(GuiLibrary.Settings.Theme, rlpg):Lerp(Color3.new(0, 0, 0), 0.1) -- guilibrary is a custom made auto generate library for player to see, w/ multiple themes and even rainbow if possible, I don't use renderstep cuz some devices always 4fps :)
    step = step + 0.005
    for i, v in pairs(GuiLibrary.GradientItems) do
        if v == nil then
            return
        end
        if v:IsA("Frame") then
            v.BackgroundColor3 = color
        elseif v:IsA("ImageLabel") or v:IsA("ImageButton") then
            v.ImageColor3 = color
        elseif v:IsA("TextLabel") or v:IsA("TextButton") then
            v.TextColor3 = color
        elseif v:IsA("UIGradient") then
            v.Color = ColorSequence.new(color)
        end
    end
    for i, v in pairs(GuiLibrary.RainbowItems) do
        if v == nil or GuiLibrary.Settings.Theme ~= "Rainbow" then
            return
        end
        if v:IsA("Frame") then
            v.BackgroundColor3 = color
        elseif v:IsA("ImageLabel") or v:IsA("ImageButton") then
            v.ImageColor3 = color
        elseif v:IsA("TextLabel") or v:IsA("TextButton") then
            v.TextColor3 = color
        elseif v:IsA("UIGradient") then
            v.Color = ColorSequence.new(color)
        end
    end
end
task.spawn(function()
    repeat
        t()
        task.wait()
    until not GuiLibrary -- this will be nil when the player leaves the game
end)
table.sort(Items, function(a: TextButton | TextLabel, b: TextButton | TextLabel)
	return a.AbsolutePosition.Y < b.AbsolutePosition.Y or a.AbsolutePosition.Y == b.AbsolutePosition.Y and a.AbsolutePosition.X < b.AbsolutePosition.X
end)

TextLinearGradient.rbxm (1,5 КБ)

what if I want the gradient to loop (from top 2 bottom)

TextLinearGradient.rbxm (2,1 КБ)

maybe my explaination is poor
what I want is just uhh
not UIgradient in each textlabel, every textlabel should have its own text color
“ArrayList (Text GUI) gradient” ← maybe you can understand that better

    return math.sin(DateTime.now().UnixTimestampMillis / 600.0 + screenCoordinates.X * 0.005 + screenCoordinates.Y *
                        0.06) * 0.5 + 0.5
end
Themes["mixColors"] = function(color1, color2, percent)
    local inverse_percent = 1.0 - percent
    local redPart = (color1.R * 255) * percent + (color2.R * 255) * inverse_percent
    local greenPart = (color1.G * 255) * percent + (color2.G * 255) * inverse_percent
    local bluePart = (color1.B * 255) * percent + (color2.B * 255) * inverse_percent
    return Color3.fromRGB(redPart, greenPart, bluePart)
end
Themes["getAccentColor"] = function(theme, screenCoordinates)
    if not theme or not Themes.Themes[theme] then
        return false
    end
    local th = Themes.Themes[theme]
    local blendFactor = Themes.getBlendFactor(screenCoordinates)
    if theme ~= "Rainbow" then
        if #th == 1 then
            return th[1]
        end -- Static theme, nothing to blend
        if #th == 3 then
            if blendFactor <= 0.5 then
                return Themes.mixColors(th[2], th[1], blendFactor * 2)
            else
                return Themes.mixColors(th[3], th[2], (blendFactor - 0.5) * 2)
            end
        end
        return Themes.mixColors(th[1], th[2], Themes.getBlendFactor(screenCoordinates))
    else
        local rainbowstate = math.ceil((DateTime.now().UnixTimestampMillis + ((screenCoordinates.X + screenCoordinates.Y) * 10)) / 15)
        rainbowstate = rainbowstate % 360
        return Color3.fromHSV(rainbowstate / 360.0, 0.6, 1)
    end
end

found from random rise source code. worked
(themes is something like that)

Themes["Themes"] = {
    Aubergine = {q(170, 7, 107), q(97, 4, 95)},
    Aqua = {q(185, 250, 255), q(79, 199, 200)},
    Banana = {q(253, 236, 177), q(255, 255, 255)}} -- q is color3.fromrgb