Эксклюзив MoonMonet — «Material You» colors styling in MoonLoader

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,482
Представляю вам MoonMonet.
MoonMonet — это инновационная библиотека в GTA SA, которая генерирует три цветовых акцента и два нейтральных цветовых акцента исходя из указанного основного цвета, прямо как Android 12 со своей системой «Monet», которая была добавлена вместе с «Material You». Изначально библиотека была написана на Kotlin и использовалась для включения системы «Monet» в бета-версиях Android 12 (android12-extensions), но на днях я захотел реализовать подобное и в SAMP и переписал библиотеку на Rust, после чего внедрил его в Police Helper | Проект «Reborn», и получилось очень даже красиво: любому человеку, которому я писал и просил оценить, система цветов очень сильно нравилась.

GitHub: Northn/MoonMonet
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)

1635278614227.png
 

Вложения

  • MoonMonet0.1.0.zip
    73.7 KB · Просмотры: 8,730
  • MoonMonet Demo.lua
    5.2 KB · Просмотры: 1,611
Последнее редактирование:

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,482
А, да, его можно использовать на каком угодно языке: есть экспорт, есть сишная структура. Используйте ффи из любого языка и юзайте.
C:
typedef struct {
    uint32_t color_0;
    uint32_t color_10;
    uint32_t color_50;

    uint32_t color_100;
    uint32_t color_200;
    uint32_t color_300;

    uint32_t color_400;
    uint32_t color_500;
    uint32_t color_600;

    uint32_t color_700;
    uint32_t color_800;
    uint32_t color_900;

    uint32_t color_1000;
} SubColors;

typedef struct {
    SubColors accent1;
    SubColors accent2;
    SubColors accent3;

    SubColors neutral1;
    SubColors neutral2;
} Colors;

Colors moonmonet_build_colors(float chroma_multiplier, uint32_t color, bool accurate_shades);
 
U

user390868

Гость
честно, нихуя не понял вообще что это. знаю, моя проблема. извините
 

LLIKOJIbHUK

Потрачен
1,139
570
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
На эксклюзив эта тема явно не тянет. Ну цвета да и цвета. Красиво. Но чего-то больше, нежели красоты, тут нет
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,482
На эксклюзив эта тема явно не тянет. Ну цвета да и цвета. Красиво. Но чего-то больше, нежели красоты, тут нет
А ты посмотри как это сделано под капотом, язык проглотишь
 
  • Нравится
Реакции: leekyrave

LLIKOJIbHUK

Потрачен
1,139
570
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

LLIKOJIbHUK

Потрачен
1,139
570
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Вложения

  • IMG_20211027_184424.jpg
    IMG_20211027_184424.jpg
    491.3 KB · Просмотры: 140

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,763
11,196
Как получить цвета для imgui.ImFloat4()?
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Автор темы
Всефорумный модератор
2,633
2,482
  • Грустно
Реакции: Shepi

Валерия

Потрачен
142
13
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Извините, но я не поняла.
При заходе в игру у меня палитра с цветами появляется и это окно не возможно закрыть, я не знаю как менять цвета и по сути у меня ничего не изменилось.
Помогите пожалуйста! А так скрипт очень классный.
 

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Друг
8,763
11,196
Извините, но я не поняла.
При заходе в игру у меня палитра с цветами появляется и это окно не возможно закрыть, я не знаю как менять цвета и по сути у меня ничего не изменилось.
Помогите пожалуйста! А так скрипт очень классный.
это не скрипт, это библиотека