local gradient_width = 200 -- Ширина градиента в пикселях
local gradient_height = 50 -- Высота градиента в пикселях
local gradient_duration = 2 -- Длительность переливания в секундах
local gradient_colors = {
{ 255, 0, 0 }, -- Красный
{ 255, 165, 0 }, -- Оранжевый
{ 255, 255, 0 }, -- Желтый
{ 0, 255, 0 }, -- Зеленый
{ 0, 0, 255 }, -- Синий
{ 75, 0, 130 }, -- Индиго
{ 238, 130, 238 } -- Фиолетовый
}
local function lerp(a, b, t)
return a * (1 - t) + b * t
end
local function color_lerp(c1, c2, t)
local r = lerp(c1[1], c2[1], t)
local g = lerp(c1[2], c2[2], t)
local b = lerp(c1[3], c2[3], t)
return { r, g, b }
end
local function get_gradient_color(t)
local num_stops = #gradient_colors
local stop_size = 1 / (num_stops - 1)
local stop_index = math.floor(t / stop_size) + 1
local stop_t = (t - (stop_index - 1) * stop_size) / stop_size
if stop_index == num_stops then
return gradient_colors[num_stops]
end
return color_lerp(gradient_colors[stop_index], gradient_colors[stop_index + 1], stop_t)
end
callbacks.Register("Draw", function()
local t = globals.RealTime() % gradient_duration / gradient_duration
for i = 1, gradient_width do
local x = i / gradient_width
local color = get_gradient_color(x + t)
draw.Color(color[1], color[2], color[3], 255)
draw.FilledRect(i - 1, 0, i, gradient_height)
end
end)