Оптимизировать сет цвет скрипта

falconix

Новичок
Автор темы
23
0
Как оптмизировать код и лучше сделать настройку цветов скрита? ну и скорее без монета



set_color_script:
local imgui = require 'mimgui'
local encoding = require 'encoding'
local monet = require 'MoonMonet'
local bit = require 'bit'

encoding.default = 'CP1251'
local u8 = encoding.UTF8

local renderColorEditor = imgui.new.bool(false)

local scriptColor = imgui.new.float[3](1.0, 1.0, 1.0)
local palette = {}

local function convertDecimalToRGBA(u32, alpha)
    local a = bit.band(bit.rshift(u32, 24), 0xFF) / 0xFF
    local r = bit.band(bit.rshift(u32, 16), 0xFF) / 0xFF
    local g = bit.band(bit.rshift(u32, 8), 0xFF) / 0xFF
    local b = bit.band(u32, 0xFF) / 0xFF
    return imgui.ImVec4(r, g, b, a * (alpha or 1.0))
end

local function theme(color, chroma_multiplier, accurate_shades)
    imgui.SwitchContext()
    palette = monet.buildColors(color, chroma_multiplier, accurate_shades)
    local style = imgui.GetStyle()
    local colors = style.Colors
    local flags = imgui.Col

    style.WindowPadding = imgui.ImVec2(5, 5)
    style.FramePadding = imgui.ImVec2(5, 5)
    style.ItemSpacing = imgui.ImVec2(5, 5)
    style.ItemInnerSpacing = imgui.ImVec2(5, 5)
    style.TouchExtraPadding = imgui.ImVec2(0, 0)

    style.IndentSpacing = 20
    style.ScrollbarSize = 12.5
    style.GrabMinSize = 10

    style.WindowBorderSize = 0
    style.ChildBorderSize = 1
    style.PopupBorderSize = 1
    style.FrameBorderSize = 0
    style.TabBorderSize = 0

    style.WindowRounding = 3
    style.ChildRounding = 3
    style.PopupRounding = 3
    style.FrameRounding = 3
    style.ScrollbarRounding = 1.5
    style.GrabRounding = 3
    style.TabRounding = 3

    style.WindowTitleAlign = imgui.ImVec2(0.50, 0.50)

    colors[flags.Text] = convertDecimalToRGBA(palette.neutral1.color_50)
    colors[flags.TextDisabled] = convertDecimalToRGBA(palette.neutral1.color_400)
    colors[flags.WindowBg] = convertDecimalToRGBA(palette.accent2.color_900)
    colors[flags.ChildBg] = convertDecimalToRGBA(palette.accent2.color_900)
    colors[flags.PopupBg] = convertDecimalToRGBA(palette.accent2.color_900)
    colors[flags.Border] = convertDecimalToRGBA(palette.accent2.color_300)
    colors[flags.BorderShadow] = imgui.ImVec4(0, 0, 0, 0)
    colors[flags.FrameBg] = convertDecimalToRGBA(palette.accent1.color_600)
    colors[flags.FrameBgHovered] = convertDecimalToRGBA(palette.accent1.color_500)
    colors[flags.FrameBgActive] = convertDecimalToRGBA(palette.accent1.color_400)
    colors[flags.TitleBgActive] = convertDecimalToRGBA(palette.accent1.color_600)
    colors[flags.ScrollbarBg] = convertDecimalToRGBA(palette.accent2.color_800)
    colors[flags.ScrollbarGrab] = convertDecimalToRGBA(palette.accent1.color_600)
    colors[flags.ScrollbarGrabHovered] = convertDecimalToRGBA(palette.accent1.color_500)
    colors[flags.ScrollbarGrabActive] = convertDecimalToRGBA(palette.accent1.color_400)
    colors[flags.CheckMark] = convertDecimalToRGBA(palette.neutral1.color_50)
    colors[flags.SliderGrab] = convertDecimalToRGBA(palette.accent2.color_400)
    colors[flags.SliderGrabActive] = convertDecimalToRGBA(palette.accent2.color_300)
    colors[flags.Button] = convertDecimalToRGBA(palette.accent2.color_700)
    colors[flags.ButtonHovered] = convertDecimalToRGBA(palette.accent1.color_600)
    colors[flags.ButtonActive] = convertDecimalToRGBA(palette.accent1.color_500)
    colors[flags.Header] = convertDecimalToRGBA(palette.accent1.color_800)
    colors[flags.HeaderHovered] = convertDecimalToRGBA(palette.accent1.color_700)
    colors[flags.HeaderActive] = convertDecimalToRGBA(palette.accent1.color_600)
    colors[flags.Separator] = convertDecimalToRGBA(palette.accent2.color_200)
    colors[flags.SeparatorHovered] = convertDecimalToRGBA(palette.accent2.color_100)
    colors[flags.SeparatorActive] = convertDecimalToRGBA(palette.accent2.color_50)
    colors[flags.ResizeGrip] = convertDecimalToRGBA(palette.accent2.color_900)
    colors[flags.ResizeGripHovered] = convertDecimalToRGBA(palette.accent2.color_800)
    colors[flags.ResizeGripActive] = convertDecimalToRGBA(palette.accent2.color_700)
    colors[flags.Tab] = convertDecimalToRGBA(palette.accent1.color_700)
    colors[flags.TabHovered] = convertDecimalToRGBA(palette.accent1.color_600)
    colors[flags.TabActive] = convertDecimalToRGBA(palette.accent1.color_500)
    colors[flags.PlotLines] = convertDecimalToRGBA(palette.accent3.color_300)
    colors[flags.PlotLinesHovered] = convertDecimalToRGBA(palette.accent3.color_50)
    colors[flags.PlotHistogram] = convertDecimalToRGBA(palette.accent3.color_300)
    colors[flags.PlotHistogramHovered] = convertDecimalToRGBA(palette.accent3.color_50)
    colors[flags.DragDropTarget] = convertDecimalToRGBA(palette.accent1.color_100)
    colors[flags.ModalWindowDimBg] = imgui.ImVec4(0.00, 0.00, 0.00, 0.95)
end

local function getTheme()
    local dec = imgui.GetColorU32Vec4(imgui.ImVec4(scriptColor[0], scriptColor[1], scriptColor[2], 1.0))
    local color = bit.tohex(bit.bswap(dec))
    local hex = ('%s'):format(color:sub(1, #color - 2))
    theme(tonumber('0x' .. hex), 1.5, true)
end

imgui.OnInitialize(function()
    imgui.GetIO().IniFilename = nil
    getTheme()
end)

imgui.OnFrame(function() return renderColorEditor[0] end, function()
    imgui.SetNextWindowSize(imgui.ImVec2(400, 150), imgui.Cond.FirstUseEver)
    local sw, sh = getScreenResolution()
    imgui.SetNextWindowPos(imgui.ImVec2(sw * 0.5, sh * 0.5), imgui.Cond.Appearing, imgui.ImVec2(0.5, 0.5))
    
    if imgui.Begin(u8"Настройка цвета", renderColorEditor, imgui.WindowFlags.NoCollapse) then
        
        imgui.Text(u8"Здесь настраивается базовый акцент темы.\n Остальные цвета генерируются автоматически.")
        imgui.Spacing()

        local flags = imgui.ColorEditFlags.NoAlpha + imgui.ColorEditFlags.DisplayRGB
        
        if imgui.ColorEdit3(u8('Цвет скрипта'), scriptColor, flags) then
            getTheme()
        end

        imgui.End()
    end
end)

function main()
    while not isSampAvailable() do wait(0) end
    sampAddChatMessage("{00FFFF}[Set_color_script] {FFFFFF}Загружен. Активация {00FFFF}/setcl", -1)
    
    sampRegisterChatCommand("setcl", function() renderColorEditor[0] = not renderColorEditor[0] end)
    wait(-1)
end