Представляю вам MoonMonet.
MoonMonet — это инновационная библиотека в GTA SA, которая генерирует три цветовых акцента и два нейтральных цветовых акцента исходя из указанного основного цвета, прямо как Android 12 со своей системой «Monet», которая была добавлена вместе с «Material You». Изначально библиотека была написана на Kotlin и использовалась для включения системы «Monet» в бета-версиях Android 12 (android12-extensions), но на днях я захотел реализовать подобное и в SAMP и переписал библиотеку на Rust, после чего внедрил его в Police Helper | Проект «Reborn», и получилось очень даже красиво: любому человеку, которому я писал и просил оценить, система цветов очень сильно нравилась.
Github MonetRs: Northn/monet-rs
Версия MoonMonet: 0.1.0; состояние: Stable
Установка: папку
MoonMonet
из архива MoonMonet0.1.0.zip
, приложенного к теме, перетащить в папку *Корневая папка с игрой*/moonloader/lib
Применение
Библиотека имеет всего одну функцию:buildColors
, которая принимает: основной цвет, коэффициент яркости и режим работы
, поэтому, использование будет максимально простым.
Lua:
local COLOR = 0xff00babe; -- AARRGGBB color
local CHROMA_MULTIPLIER = 1.0; -- Color brightness. SHOULD be between 0.5 - 2.0
local colors = MoonMonet.buildColors(COLOR, CHROMA_MULTIPLIER, true);
-- И мы получаем структуру, состоящую из нескольких структур: Colors и SubColors.
-- Colors состоит из SubColors: accent1, accent2, accent3 — цвета акцента; neutral1, neutral2 — нейтральные цвета акцента.
-- SubColors состоит из нескольких AARRGGBB цветов:
--[[ color_0; color_10; color_50;
color_100; color_200; color_300;
color_400; color_500; color_600;
color_700; color_800; color_900;
color_1000;
]]
local generated_color = colors.accent1.color_50;
local generated_color = colors.accent2.color_100;
local generated_color = colors.accent3.color_200;
local generated_color = colors.neutral1.color_300;
local generated_color = colors.neutral2.color_400;
-- И так далее
Согласитесь, легко? Зато какая польза от неё, если пофантазировать!
Небольшая функция для удобства конвертации цветов
Поскольку я любитель красивого и качественного кода, я так же написал функцию, которая позволяет с удобством конвертировать цвета в нужные форматы.
Lua:
do
local bit = require 'bit'
local function join_argb(a, r, g, b)
local argb = b -- b
argb = bit.bor(argb, bit.lshift(g, 8)) -- g
argb = bit.bor(argb, bit.lshift(r, 16)) -- r
argb = bit.bor(argb, bit.lshift(a, 24)) -- a
return argb
end
local function explode_argb(argb)
local a = bit.band(bit.rshift(argb, 24), 0xFF)
local r = bit.band(bit.rshift(argb, 16), 0xFF)
local g = bit.band(bit.rshift(argb, 8), 0xFF)
local b = bit.band(argb, 0xFF)
return a, r, g, b
end
local function ARGBtoRGB(color)
return bit.band(color, 0xFFFFFF)
end
function ColorAccentsAdapter(color)
local a, r, g, b = explode_argb(color)
local ret = {a = a, r = r, g = g, b = b}
function ret:apply_alpha(alpha)
self.a = alpha
return self
end
function ret:as_u32()
return join_argb(self.a, self.b, self.g, self.r)
end
function ret:as_vec4()
return imgui.ImVec4(self.r / 255, self.g / 255, self.b / 255, self.a / 255)
end
function ret:as_argb()
return join_argb(self.a, self.r, self.g, self.b)
end
function ret:as_rgba()
return join_argb(self.r, self.g, self.b, self.a)
end
function ret:as_chat()
return string.format("%06X", ARGBtoRGB(join_argb(self.a, self.r, self.g, self.b)))
end
return ret
end
end
Использование конвертера
Lua:
local COLOR = 0xff00babe; -- AARRGGBB color
local CHROMA_MULTIPLIER = 1.0;
local gen_colors = MoonMonet.buildColors(COLOR, CHROMA_MULTIPLIER, true);
-- И где-то в коде:
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
colors[clr.WindowBg] = ColorAccentsAdapter(gen_colors.accent2.color_900):as_vec4()
colors[clr.Button] = ColorAccentsAdapter(gen_colors.accent2.color_900):apply_alpha(0xaa):as_vec4()
sampAddChatMessage(string.format("hello, {%s}brother", ColorAccentsAdapter(gen_colors.accent2.color_900):as_chat()), -1)
Вложения
Последнее редактирование: