- Версия MoonLoader
- .026-beta
Короче, я в скрипте сделал два окна, первое - начальное, второе - темы скрипта. Изначально тема при включении скрипта должна стоять синяя, которая указана у меня в
- параметр 1 это синий цвет, то есть в моём файле с темами он стоит первым. По идее он должен быть загружен самым первым стилем при активации скрипта, то есть он должен быть включен по стандарту. По итогу из того что я перечислил не получилось ничего, при активации скрипта командой - тема стандартная вот такая
, а должна быть такой
вся суть с темами находится в кнопке window2
Lua:
local checked_radio = imgui.ImInt(1)
вся суть с темами находится в кнопке window2
Lua:
local imgui = require 'imgui'
local key = require 'vkeys'
local fa = require 'fAwesome5'
local themes = import "resource/imgui_themes.lua"
local checked_radio = imgui.ImInt(1)
-- одно из основных отличий от оригинального апи
-- все переменные, значения которых записываются в ImGui по указателю, могут использоваться только через специальные типы
local main_window_state = imgui.ImBool(false)
local main_window_state2 = imgui.ImBool(false)
function imgui.OnDrawFrame()
if main_window_state.v then -- чтение и запись значения такой переменной осуществляется через поле v (или Value)
imgui.SetNextWindowSize(imgui.ImVec2(150, 200), imgui.Cond.FirstUseEver) -- меняем размер
-- но для передачи значения по указателю - обязательно напрямую
-- тут main_window_state передаётся функции imgui.Begin, чтобы можно было отследить закрытие окна нажатием на крестик
imgui.Begin('Window1', main_window_state)
imgui.Spacing()
imgui.Separator()
imgui.Spacing()
if imgui.Button(fa.ICON_PAINT_BRUSH .. " Темы") then -- а вот и кнопка с действием
-- условие будет выполнено при нажатии на неё
main_window_state2.v = not main_window_state2.v
end
imgui.End()
end
if main_window_state2.v then
imgui.SetNextWindowSize(imgui.ImVec2(210, 220), imgui.Cond.FirstUseEver)
imgui.Begin('Window2', main_window_state2, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
imgui.Spacing()
imgui.Separator()
imgui.Spacing()
-- if imgui.Button('Красная') then кнопка + функция для неё
-- themes.SwitchColorTheme(2)
imgui.BeginChild("ChildWindow2", imgui.ImVec2(200,175), true)
for i, value in ipairs(themes.colorThemes) do
if imgui.RadioButton(value, checked_radio, i) then
themes.SwitchColorTheme(i)
end
end
imgui.EndChild()
imgui.End()
end
end
function main()
imgui.Process = false
sampRegisterChatCommand("testik", function() main_window_state.v = not main_window_state.v end) -- Команда /test
while true do
wait(0)
imgui.Process = main_window_state.v or main_window_state2.v -- теперь значение imgui.Process всегда будет задаваться в зависимости от активности основного окна
end
imgui.Process = show_main_window.v
themes.SwitchColorTheme(tonumber(arg))
imgui.SwitchContext()
themes.SwitchColorTheme()
end
show_main_window = imgui.ImBool(false)
local fa_font = nil
local fa_glyph_ranges = imgui.ImGlyphRanges({ fa.min_range, fa.max_range })
function imgui.BeforeDrawFrame()
if fa_font == nil then
local font_config = imgui.ImFontConfig() -- to use 'imgui.ImFontConfig.new()' on error
font_config.MergeMode = true
fa_font = imgui.GetIO().Fonts:AddFontFromFileTTF('moonloader/resource/fonts/fa-solid-900.ttf', 13.0, font_config, fa_glyph_ranges)
end
end