Библиотека позволяет добавить выбор кастомных тем в ваш скрипт.
Установка: перенести файл
Установка тем: перенести
Подключение библиотеки:
Получение списка тем и применение темы:
для получения списка доступных тем и информации о них нам необходимо использовать функцию
функция возвращает таблицу из тем, выглядит она примерно так:
теперь нам просто нужно вызвать функцию apply() у нужной темы, например
Полный код:
Установка: перенести файл
mimtheme.lua
в папку moonloader/lib
Установка тем: перенести
.json
файл в папку moonloader\lib\mimthemes
Так же вы можете добавить функционал либы в свой скрипт и не заставлять юзера качать эту либу, вот пример кода:
Lua:
local imgui = require('mimgui')
MIMTHEMES = {
version = '0.1',
__path__ = getWorkingDirectory()..'\\lib\\mimthemes',
getFilesInPath = function(path, ftype)
assert(path, '"path" is required');
assert(ftype or (type(ftype) ~= 'table' or type(ftype) ~= 'string'), '"ftype" must be a string or array of strings');
local result = {};
for _, thisType in ipairs(type(ftype) == 'table' and ftype or { ftype }) do
local searchHandle, file = findFirstFile(path.."\\"..thisType);
table.insert(result, file)
while file do file = findNextFile(searchHandle) table.insert(result, file) end
end
return result;
end
}
MIMTHEMES.applyJsonTheme = function(JSON)
if not doesDirectoryExist(MIMTHEMES.__path__) then createDirectory(MIMTHEMES.__path__) end
local theme = decodeJson(JSON);
if (theme.col) then
for param, value in pairs(theme.col) do
pcall(function() -- pizda
imgui.GetStyle().Colors[imgui.Col[param]] = imgui.ImVec4(table.unpack(value));
end)
end
end
if (theme.style) then
for param, value in pairs(theme.style) do
pcall(function() -- pizda
imgui.GetStyle()[param] = type(value) == 'number' and value or (#value == 2 and imgui.ImVec2(table.unpack(value)) or imgui.ImVec4(table.unpack(value)));
end)
end
end
end
MIMTHEMES.getThemes = function()
if not doesDirectoryExist(MIMTHEMES.__path__) then createDirectory(MIMTHEMES.__path__) end
local result = {}
for _, filename in ipairs(MIMTHEMES.getFilesInPath(MIMTHEMES.__path__, '*.json')) do
local file = io.open(MIMTHEMES.__path__..'\\'..filename, 'r')
local JSON = file:read('*a')
file:close()
local data = decodeJson(JSON or '[]') or {} -- wtf
table.insert(result, {
filename = filename,
name = data.name or filename,
author = data.author or 'unknown',
version = data.version or 'unknown',
description = data.description or 'no description',
url = data.url,
json = JSON,
apply = function()
return MIMTHEMES.applyJsonTheme(JSON)
end
})
end
table.sort(result, function(a, b)
return a.name < b.name
end)
return result
end
local themesList = MIMTHEMES.getThemes()
local win = imgui.new.bool(true)
local newFrame = imgui.OnFrame(
function() return win[0] end,
function(self)
imgui.SetNextWindowSize(imgui.ImVec2(300, 300), imgui.Cond.FirstUseEver)
if imgui.Begin('Pizda', win) then
imgui.Text('Available themes:')
for _, theme in ipairs(themesList) do
if imgui.Button(theme.name, imgui.ImVec2(imgui.GetWindowSize().x - 10, 20)) then
theme.apply()
end
if imgui.IsItemHovered() then
imgui.BeginTooltip()
imgui.Text(('%s\n%s\n\nAuthor: %s\nVersion: %s\nURL: %s'):format(theme.name, theme.description, theme.author, theme.version, theme.url))
imgui.EndTooltip()
end
end
imgui.End()
end
end
)
Lua:
local themesInstalled, themes = pcall(require, 'mimthemes') -- подключаем либу
--assert(themesInstalled, 'Module "mimthemes" not found, download: https://blast.hk/threads/168540') -- раскомментируйте если надо крашить скрипт если библиотеки нет
Получение списка тем и применение темы:
для получения списка доступных тем и информации о них нам необходимо использовать функцию
<module>..getThemes()
. Вызывать ее в цикле нельзя, так как ваш компутер точно не скажет вам спасибо.
Lua:
local themesList = themesInstalled and themes.getThemes() or {} -- получаем список доступных тем
Lua:
local themesList = {
{
name = string, -- Название темы
author = string, -- Автор темы
description = string, -- Описание темы
version = string, -- Версия
url = string, -- Ссылка
json = string, -- Текст json файла
apply = function -- Функция для применения этой темы
},
...
}
Lua:
themesList[1].apply()
Полный код:
Lua:
local imgui = require('mimgui')
local themesInstalled, themes = pcall(require, 'mimthemes') -- подключаем либу
local themesList = themesInstalled and themes.getThemes() or {} -- получаем список доступных тем
--assert(themesInstalled, 'Module "mimthemes" not found, download: https://blast.hk/threads/168540') -- раскомментируйте если надо крашить скрипт если библиотеки нет
local win = imgui.new.bool(true)
local newFrame = imgui.OnFrame(
function() return win[0] end,
function(self)
imgui.SetNextWindowSize(imgui.ImVec2(300, 300), imgui.Cond.FirstUseEver)
if imgui.Begin('Pizda', win) then
if themesInstalled then -- если библиотека установлена, то
imgui.Text('Available themes:')
for _, theme in ipairs(themesList) do
if imgui.Button(theme.name, imgui.ImVec2(imgui.GetWindowSize().x - 10, 20)) then
theme.apply()
end
if imgui.IsItemHovered() then
imgui.BeginTooltip()
imgui.Text(('%s\n%s\n\nAuthor: %s\nVersion: %s\nURL: %s'):format(theme.name, theme.description, theme.author, theme.version, theme.url))
imgui.EndTooltip()
end
end
else
imgui.TextColored(imgui.ImVec4(1, 0, 0, 1), 'module mimthemes not found, custom themes unavailable')
end
imgui.End()
end
end
)
Для создания темы вам необходимо создать файл с расширением .json, затем вписать туда нужные вам параметры, и поместить файл в папку
Данная тема сделает фон окна красным, текст белым, а так же выставит закругление окна на 20 пикселей.
В секции 'col' должны хранится цвета, а в секции 'style' параметры стиля.
Заполнение параметров:
moonloader\lib\mimthemes
. Hапример:
Lua:
{
"name": "MyTestThemeName",
"author": "chapo",
"description": "Test theme for mimthemes.lua!",
"version": "0.1",
"url": "https://www.blast.hk/members/112329/",
"col":{
"WindowBg": [1, 0, 0, 1],
"Text": [1, 1, 1, 1]
},
"style":{
"WindowRounding": 20
}
}
Данная тема сделает фон окна красным, текст белым, а так же выставит закругление окна на 20 пикселей.
В секции 'col' должны хранится цвета, а в секции 'style' параметры стиля.
Код:
Text
TextDisabled
WindowBg
ChildBg
PopupBg
Border
BorderShadow
FrameBg
FrameBgHovered
FrameBgActive
TitleBg
TitleBgActive
TitleBgCollapsed
MenuBarBg
ScrollbarBg
ScrollbarGrab
ScrollbarGrabHovered
ScrollbarGrabActive
CheckMark
SliderGrab
SliderGrabActive
Button
ButtonHovered
ButtonActive
Header
HeaderHovered
HeaderActive
Separator
SeparatorHovered
SeparatorActive
ResizeGrip
ResizeGripHovered
ResizeGripActive
Tab
TabHovered
TabActive
TabUnfocused
TabUnfocusedActive
PlotLines
PlotLinesHovered
PlotHistogram
PlotHistogramHovered
TextSelectedBg
DragDropTarget
NavHighlight
NavWindowingHighlight
NavWindowingDimBg
ModalWindowDimBg
Код:
Alpha
WindowPadding
WindowRounding
WindowBorderSize
WindowMinSize
WindowTitleAlign
ChildRounding
ChildBorderSize
PopupRounding
PopupBorderSize
FramePadding
FrameRounding
FrameBorderSize
ItemSpacing
ItemInnerSpacing
IndentSpacing
ScrollbarSize
ScrollbarRounding
GrabMinSize
GrabRounding
TabRounding
ButtonTextAlign
SelectableTextAlign
В mimgui | в JSON |
Lua:
|
JSON:
|
Lua:
|
JSON:
|
Lua:
|
JSON:
|
Скидывайте сюда свои темы!
Вложения
Последнее редактирование: